programming-languages
TLDR: I've explored tons of languages, but ultimately I think that Zig(systems) and Common Lisp (general purpose) (relatively soon: my ownLisp, TBD) are worth betting on, my criteria being:
- Performant. Racket, Clojure and other lisps are slow relative toCommon Lisp. I don't have time for a slow programming language builton some hill of abstractions when high level languages that are alsoincredibly fast exist.
- Fast to use. I don't want to have to learn new language features. Ishould be able to get from 0 to product as easily as possible.
Languages
J
A high-performance language for data processing and parallel computing.J implementation in Nim. it has adifferent mental model of programming languages reading hillel wayneessay on it is cool! can create a unique sieve as a value and makeassignmetns! can transform the object directly after it has beencreated! j provides mechanism to fuse mapping and filtering, can studyproperties of the sieve https://github.com/pitr/jj: J implementationsin C and C++,Rust
Fractran
XXIIVV — fractran . Cool?
Z
A dialect for C that's immutable by default, resolves undefined behaviorand uses an SMT solver to guarantee reference stability
Chapel
A parallel programming language that claims to have some novel ideas.
Catala
A DSL for representing laws by construction, designed to enable lawyersto certify laws. Interested in formal verification of legal documents,potentially.
Raku
A descendent of Perl, it features lots of additional features includingfun grammar specifications.
Ante
'The compile-time language'. Made by a Northeastern undergraduate.
Oak
Designed as a simple replacement for C.
Topshell
A functional, reactive scripting language.
Chef
An esoteric programming language designed to simultaneously representrecipes and programs.
Whitespace
A programming language designed with only whitespace characters,ignoring all others. Any program that disregards whitespace can expressa whitespace program within it. Fun to represent in laugnages thataren't indent-aware - these programs can also encode Whitespace withinthem!
Lux
A statically typed Lisp-like language for the JVM.
While
A language used in textbooks such as 'Principles of Program Analysis'.
PolyRPC
A 'multi-tier' functional programming language.
Steno
livecoding metalanguage
Unlambda
A minimal functional programming language based on combinatory logicmeant to be a demonstration of pure functional programming
Vodka
A creative coding environment and language for structured editing forwriters.
Play
A statically typed Forth!
Imba
A programming language for the web that finally handles full stack inall of the right waysLove the syntax!!! Great lessons from someone whoknows how to teach as well - very easy to understand and get startedwith the language!
Smalltalk
Innovative "talk to objects" approach! Self (programming language) -Wikipedia isan evolution of this. Why is self interesting independent of smalltalk?Not sure?
Faust
Programming language for signal processing! Super fast super super fast.I wonder if any of these ideas and principles can be implemented in someDSL used in Rust, Hasnekk, Zig, etc…
Piet
DM's Esoteric Programming Languages -Piet: A coolprogramming language in 2D leveraging solid colors and art cycles!
The Nomsu Programming Language – Nomsu
A cute programming language that stays as close as possible to naturallanguage. A function definition conveys some statement in naturallanguage - it's a phrase that can parse some argument(s) providedanywhere in the phrase - and allows users to write in more clearEnglish. It's a fun idea, but I doubt that this system preserves itsreadability when working with complex programs; I'd bet that itapproaches the complexity of a large, mathematical proof and takes onthe structure of a programming language but far more verbose and a bitmore difficult to reason about (Assume we have some variable that meetsthis constraint; set it here, reset it here, apply this functioncomposition here, and so forth). It's possible that there is some way toescape this - but I've only spent five minutes reading this thing.
Flix \| The Flix Programming Language
Cooooooool
DSLs
MLang
A DSL created to represent and calculate the French tax code.
- Bloom
- Dhall :: langauge for system configuration
- https://microformats.io/ html dsl in classes to add meaning
- puzzlescript :: language for puzzles!
- Frink :: The Frink is Good, the Unit isEvil.Language that's optimized for unit conversions and usability; if Ihave to do a lot of unit manipulation and I'm worried about forgettinganything, I can offset the burden to Frink and mostly use it like asuper elegant calculator. No problem. The local optimum of embeddingsuch a system in a language with ADTs seems better though, honestly…
- Alda :: Make music!
- Unison :: A distributed programminglanguage and editing environment for the modern web. A majorinspiration for the projectional TextEditors project.
- Inform 7 :: Aprogramming language for expressing interactive fiction. The sourcecode is published as an expressive literate program that's navigablethrough the website - it's super interesting! This is downstream fromsome choose your own adventure system but seems far more expressive…there seems to be a community that gathers monthly at MIT to discussthese things: The People's Republic of Interactive Fiction -Play. Might be worth visiting in January : )
blurring the curry howard line
sourceworks on autonomous vehicles, fun stuff.
typically using languages iwth proof assistants. however, actuationsystems in carshave real time constraints, so lazy evaluation ornondeterministic memory management is not valid. this is typically donein c or cpp. pulling a c program from a coq proof ?
programs :: formalized syntactically but modeled semantically.denotational semantics map some number to some set :: ie some u8 integerfits within one set. map syntactic objects to universal mathematics withsuch denotational semantics.
typing rules: tau - a : A, f:A -\> B
tau \|- a
cannot capture everything with type theory? dependent types end upcapturing everything. can provide complete specification of a program'sbehavior in the dependent type theory.
curry-howard correspondance :: a correspondence between program andproof! we know we can reason about our programs from a dependent typetheory, but what is this gap called? specifying program in the types:can make assertions about the correctness of this code.
why dependent types matter paper. rust provides subset forrepresenting dependent typed behavior in our programs. type leveldefinition of the natural numbers, for example!
these programs can be fully represented in state machines! the entiresystem and communication protocols can be captured with such a statemachine, and this state machine can be represented in a rust typesystem.
state :: sum type. type family adjacency; types that are members of thetype family are adjacent to each of these states.
can use demotational semantics to convert rust semantics to agda :: andas agda has full dependent types. using agda allows us to mechanizesemantic function ! agda has a notion of proofs and may soon have anotion of tactics. proving things foundationally in agda could be doableonce we have the specification of the program in its own domain
state machines :: behold the program counter as everything is tracked atcompile time. not easy in this representation to track a state machinein terms of program handlers.
church numerals :: general way of using a function to produce numbersprogram that extracts information from a rust program and stick thesemantics in agda
Lua
Really interesting, compact language with lots of work developingsub-languages.
Fennel
Lisp for Lua.
Terra
A metaprogramming language that lets you metaprogram with and in thelanguage! Looks like Ebb is a language embeddedin Terra for easily using physical simulations, embedding meshes andsuch. Not sure when I'll ever use this, but it's a testament to thepower of this Terra system…
Experimental langauges…
Effekt Language: Home: Has effectpolymorphism and handlers. Effect safety. Extemporedocumentation: Why do I havethis saved? Might be interesting.. The reflective languageBlack: A Scheme extended withthe function \`exec-at-metalevel\`, a function that allows arbitraryaccess and modification to the metalevel interpreter, modifying thesemantics of the language from within the language itself. 10 Most(lydead) Influential Programming Languages • HillelWayne: Anoverview of influential programming languages and their details.
Z: This is really cool… most of theinnovation is in the concrete syntax, sure, but the fact that the newindentation and super simple function application without parens worksmeans that macros are far more powerful. Concrete syntax makes thingsmore readable, and doing things like defining a comment with a macroadvances text! It's a cool idea. You'll probably end up tripping upfairly fast though… definitely a bit of a toy. Also notable that it'skind of just lisp without parens and some cute re-parsing trick /re-eval at macro time that allows for some more elegant concrete syntax.
future reading
Great Works in ProgrammingLanguages:An overview from Benjamin Pierce of great programming language worksthroughout history - direction for what's worth reading and worthknowing.
term rewriting
https://www21.in.tum.de/~nipkow/TRaAT/ – book benjamin had, it's adescription of term rewriting problems, universal algebra, unificationtheory
pl random link spit
https://www.cis.upenn.edu/~bcpierce/courses/670Fall04/GreatWorksInPL.shtml– overview of great works in pl to know before diving in!https://softwarefoundations.cis.upenn.edu/ – software foundationshttps://plfa.github.io/ – foundations in agda! for free!
parsing
shunting yard algorithm : used to parse expressions in infix notation !
redex
https://www.youtube.com/watch?v=BuCRToctmw0 – run your research - talkon redex https://redex.racket-lang.org/ a dsl for specifying anddebugging operational semantics
meta
increasing the impact of pl research, connecting it toreality!http://www.is.ocha.ac.jp/~asai/Black/ :: an extension of scheme thatnot only allows for metaprogramming, but also meta-modification of theinterpreter it's running on! any program can modify the behavior of theinterpreter. nuts! interview aboutunlambda ProbabilisticProgramming is a brilliantoverview of the space from a major contributor, Adrian Sampson. JeanYang on An Axiomatic Basis for Computer Programming -YouTube Whatare some interesting language features that may not be well known? :Pro…:Cool language features? In Further Praise of Dependent Types \| Then-CategoryCaf é:Lol someone likes dependenttypes…https://golem.ph.utexas.edu/category/2020/05/in_further_praise_of_dependent.htmlWhat is your favourite academic paper on programming languages? :Programming…:Cool papers to read!
Parsing
Which Parsing Approach? \| HackerNews: An "LL"recursive-descent parser (recursive descent can handle an LL grammar) isthe best way to go because it provides the best error messages.