Programming languages list
There are links to official sites, tutorials and other learning resources for each one.
Some languages are tagged with a platform they compile to (JVM, dotNET, JS, Native). There are also 2 additional tags - Lisp and Smalltalk - which I use to mark Lisp- and Smalltalk-like languages (there's simply quite a lot of them).
Ada
- http://www.adacore.com/adaanswers/about/ada
- compiled, statically typed, procedural with a package system
- somewhat pascal-like syntax
- got it forced on me while in college - wasn't that bad
Alpaca
- https://github.com/alpaca-lang/alpaca/
- statically typed language somewhoat similar to ML
- works on top of Erlang's BEAM, with special type system extensions
- syntactically reminiscent of OCaml and Elm
Amber JS Smalltalk
- https://lolg.it/amber/amber
- another Smalltalk for JS
- brings Morphic to the browser
- implements Pharo-like IDE, with class browser, debugger, inspector
- allows editing code of the page live, on runtime, without reloads
- uses Pharo on the backend for state management, uses Pharo as reference for features
AmbientTalk
Avail
- http://www.availlang.org/
- very interesting language:
- my post about it: https://klibert.pl/output/avail-and-articulate-programming.html
- surprisingly, it's still maintained and developed!
AWK
Boo dotNET
- looks unmaintained, latest News is MS open-sourcing .NET, which happened some time ago
- https://boo-language.github.io/
- https://github.com/boo-lang/boo
- http://langexplr.blogspot.com/search/label/boo
- about:
Boo is established object oriented, statically typed programming language for NET and Mono with a Python inspired syntax and a special focus on metaprogramming through language and compiler extensibility features such as macros and custom compilation pipelines.
Boomerang
- http://www.seas.upenn.edu/~harmony/manual.pdf
- authors:
- experimental, research langauge built around the concept of lenses
- focused on text transformation
- provides a core of lens combinators
- and a full-blown functional language with many conveniences on top
C
- low-level, compiled language with lots of undefined behaviour
- has rock solid ABI and memory layout rules
- I was writing some C in the '90
- there's also a Ch language - it's a C interpreter, working on Windows, well suited for lightweight scripting
C++
- low to high level, compiled multiparadigm language
- with support for template metaprogramming and generic programming
- not too big stdlib, but a workable one
- multiple-inheritance, no interfaces (use pure abstract classes for this)
- very complex syntax and semantics, lots of undefined behaviour
- many useful patterns in community like RAII, but without explicit support in the language
- I was writing C++ for several yearsat the end of the '90 and '00 beginnings
- with Visual Studio, WinAPI apps
- no MFC, rolled my own OO wrappers
- the language supposedly evolved significantly since then
- may be worth a look: http://www.stroustrup.com/C++11FAQ.html#constexpr
- with Visual Studio, WinAPI apps
Cat
- http://www.cat-language.com/
- it died, then resurrected and now points to Github
- it looked like this previously: https://web.archive.org/web/20061129010539/http://www.cat-language.com/
- it died, then resurrected and now points to Github
- https://github.com/cdiggins/cat-language
- soft-typed concatenative language
- works on Mono (and ofc .NET)
- see also Kitten
- no new commits since 2018, probably dead?
Cecil
- https://projectsweb.cs.washington.edu/research/projects/cecil/www/cecil.html
- Cecil is a purely object-oriented, type-safe, garbage-collected language intended to support rapid construction of high-quality, extensible software.
- TODO
Céu
- http://www.ceu-lang.org/index.html
- in short:
- so mostly imperative, concurrent language
- note to self: written in Lua
Ceylon
- http://ceylon-lang.org/
- interesting, it says that:
Ceylon's powerful flow-sensitive static type system catches many bugs while letting you express more, more easily: union and intersection types, tuples, function types, mixin inheritance, enumerated types, and reified generics.
- and has rather flexible syntax
- looks kinda dead, last commit from 2018, some broken links on the page
- https://ceylon-lang.org/documentation/1.3/spec/html_single/
Chapel
- https://chapel-lang.org/
- http://learnxinyminutes.com/docs/chapel/
- larger example: https://chapel-lang.org/tmp/OctTut2018/files/handsOn/taskpar/boundedBuffer.chpl
- A quick impression of the language:
After skimming the page it looks rather similar to Nim. Chapel looks like it wants to be a systems programming language with special focus on concurrency and parallel computation. It's statically typed with local type inference. It supports product types with tuples, but I don't see sum types or (G)ADTs in general. It has numeric types with explicit range, like Ada or Nim (that is without dependent types). It supports generics, with a very lightweight syntax (ie. lack of any syntax). Supports in/out/inout parameters like C#. Supports operator overloading. Has iterators. Supports class-based OO with destructors (so probably is not GCed?). Has coroutines as a main concurrency construct. It has "sync" keyword, but I don't have the time to look at it in depth to know how it works.
It looks like it's somewhere between C and Java, like Nim, Rust and a couple other languages. From a quick glance I can't tell if the language is garbage collected and I don't really know how the concurrency and parallelism really work in the language. Still, it looks rather nice and I suspect you'd use it any time you otherwise use C with pthreads.
Chicken Scheme Lisp
- http://www.call-cc.org/
- many packages available via chicken-install
- at least twice as fast as Python for my purposes when compiled (via C to native)
Clamato
http://clamato.net/
- another try on making Smalltalk on JS
- looks dead - the domain expired, search only returns some juice brand
- see also: Amber
Clean
- better than Haskell!
- lazy, pure, no monads, uniqueness typing instead
- http://en.wikipedia.org/wiki/Clean_(programming_language)
Clojure Lisp
- http://clojure.org/
- a Lisp-like langauge for JVM
- immutability by default and nice support for concurrency
- syntax improvements (over CL and Scheme), less parens than usual
- syntactic support for maps and vectors (besides lists)
- built-in simple pattern-matching for all core data structures
ClojureScript JS Lisp
- https://github.com/clojure/clojurescript
- Clojure to JS compiler
- there's a working self hosting implementation now
- might be worth another look
Cobra dotNET
- http://cobra-language.com/
- list of features: http://cobra-language.com/docs/why/
- supports contracts and unit tests in the language
- syntax is simple, Python-style (no : needed, though)
- optional static typing, quite fast
- OOP with closures
- overall, looks similar to Boo
- doesn't seem to be maintained, latest news from 2013
Coconut
- https://github.com/evhub/coconut
- https://coconut.readthedocs.io/en/master/HELP.html
- compile-to-Python language, ostensibly focused on functional programming
- apparently still in development, latest commit from Jan 2020
CoffeeScript JS
- http://coffeescript.org/
- the first compile-to-JS-but-leave-the-semantics-untouched language that gained traction
- I used it for a bit when it came out
- I then went for LiveScript, so I don't have much to say on Coffee itself
- it also sparked a handful of other languages, like Coco or Imba
- it also sparked a handful of other languages, like Coco or Imba
- it looks maintained, but I'm not sure about new developments
Common Lisp Lisp Native
- the most direct descendand of original LISP from the '50ies!
- quite a large language, with formal specification
- called 'HyperSpec'
- see http://www.lispworks.com/documentation/HyperSpec/Front/index.htm
- called 'HyperSpec'
- supports procedural, functional and object-oriented programming
- OOP supports multiple inheritance and multi-methods (see CLOS)
- OOP supports multiple inheritance and multi-methods (see CLOS)
- has variety of implementations, both interpreted and compiled; some are compile-only
- sbcl is the one I used the most: http://www.sbcl.org/
- sbcl is the one I used the most: http://www.sbcl.org/
- supports reflection, very late binding and redefinition of everything on runtime
- supports optional type definitions, which may be used for optimizations by the compiler
- I learned it because I use StumpWM, which is a great Window Manager for X, written in CL:
- see http://stumpwm.github.io
- I wrote some code for it, ie. /posts/stumpwm-battery-warning.html
- unfortunately, it's starting to show its age (I since jumped ship to Awesome WM)
- see http://stumpwm.github.io
Crack
- http://crack-lang.org/
- https://github.com/crack-lang/crack
- http://crack-lang.org/manuals/Manual-1.6.html
- surprisingly, it's still maintained and developed, latest commit from March 2020
- Major Influences: C, C++, Java, Python
- Syntax: C-style, curly-brace
- Typing: Static, strong (with some implicit conversion)
- Compiler: native compiled, either JIT (at runtime) or AOT (native binary)
- Paradigms: Object oriented, procedural
- Garbage Collection: Reference counted objects, programmer controlled
- OO Features: Virtual functions, overloaded functions, multiple inheritance, generics.
Crystal
- looks Ruby-like (with goals similar to Nim)
- OO all the way down, but native compilation
- http://crystal-lang.org/
- http://crystal-lang.org/docs/conventions/documenting_code.html
- http://crystal-lang.org/2015/12/24/the-future-of-crystal.html
- Web framework: http://serdardogruyol.com/kemal/
- uses fibers for concurrency, last time I checked it had no support for parallelism
Curl
- not the command-line http client!
- https://en.wikipedia.org/wiki/Curl_(programming_language)
- in 2019 dropped support for Linux and MacOS, new versions only work with MS Windows
- focused on bringing all the tech used for Web Apps programming under a single language
- Opa was another try at this
- Opa was another try at this
- supports both on- and off-line use (occasionaly/eventually connected paradigm)
Curry
Added on:
- functional and logic programming (see also: Mercury)
- has type annotations
- sounds very interesting, is intended to be "general purpose"
- http://www-ps.informatik.uni-kiel.de/currywiki/
- http://www-ps.informatik.uni-kiel.de/currywiki/_media/documentation/tutorial.pdf
- http://web.cecs.pdx.edu/~antoy/flp/patterns/ (worth checking out!)
- http://www.informatik.uni-kiel.de/~curry/examples/ (more examples)
Dylan/OpenDylan
- http://opendylan.org/
- very interesting mix of ideas: Scheme-like semantics with CLOS-like object system
- has syntax similar to the Wirthian family of languages
- supports pattern-based (e.g.
define-syntax-rule
in Scheme) macros
- uses a gradually typed type system along with multi-methods and multiple dispatch
- has an official specification in the form of Dylan book: https://opendylan.org/books/drm/
- supports modules and namespaces for modularity
- the OpenDylan implementation compiles to native via C
E
- OO and FP features
- E is an object-capability programming language and platform for writing distributed, secure, and robust software.
- http://en.wikipedia.org/wiki/Object-capability_model
Earl Grey JS
- http://breuleux.github.io/earl-grey/repl/
- macro-enabled, pattern-matching, compile-to-JS language
- looks dead, last commit from 2017
Ela
- http://elalang.net/About.aspx#features
- http://elalang.net/docs/
- resembles Haskell, but is eager and dynamically typed
- but it also has a formal type system
- runs on .NET and Mono
- the site became unavailable, probably dead
Elixir
- https://peepcode.com/products/elixir
- https://news.ycombinator.com/item?id=6864287
- at the CodeMesh conference I was finally convinced to give it a serious try
Elm JS
- http://elm-lang.org/edit/examples/Intermediate/Calculator.elm
- FRP-focused strongly statically typed compile-to-JS language
- highly controversial design of the language, some posts on the topic:
Emacs Lisp Lisp
Erlang
- almost-purely functional, highly concurrent language based on actors and message passing
- syntax sharing some similarities with Prolog
- the main implementation, the BEAM from Erricson (open sourced in 1998)
- supports SMP parallelism with M:N concurrency
- has state of the art schedulers for all supported platforms
- natively supports distribution over multiple nodes (computers/servers)
- supports JIT and experimental AOT compilation
- some other languages target the BEAM, most notably Elixir and LFE
- supports SMP parallelism with M:N concurrency
- built for fault-tolerance, correctness, and distribution
- I wrote two micro-services in it
F# dotNET
- https://github.com/fsharp/fsharpbinding/tree/master/emacs
- F# autocomplete parser
- OCaml-based language running on .NET
- it replaces OOP part of OCaml with the .NET model
- introduces alternative lightweight, indentation based (guided?) syntax
- adds some additional features, most notably list comprehensions and computational expressions
F*
Added on: 2015-09-19
- https://www.fstar-lang.org/
- summarized rather well in its introduction
F* (pronounced F star) is an ML-like functional programming language aimed at program verification. Its type system is based on a core that resembles System Fω (hence the name), but is extended with (full) dependent types, monadic effects, refinement types, and a weakest precondition calculus. Together, these features allow expressing precise and compact specifications for programs, including functional correctness properties. The F* type-checker aims to prove that programs meet their specifications using a combination of SMT solving and manual proofs. Programs written in F* can be translated to OCaml or F# for execution.
Factor
Added on:
- https://www.factorcode.org/
- https://github.com/factor/factor
- https://concatenative.org/wiki/view/Factor
- modern, concatenative, stack-based programming language
- large standard library, GUI-based listener (REPL)
- compiled to native code, even in the REPL
- had a few years of slower development, but it's apparently still maintained
Fantom
- http://www.fantom.org/doc/docIntro/Tour
- similar to Cobra and Boo (modulo C-style syntax)
- https://fantom.org/doc/docIntro/WhyFantom
Felix
- https://felix-lang.github.io/felix/
- https://github.com/felix-lang/felix/
- https://felix-tutorial.readthedocs.io/en/latest/
- it's still actively developed
- very nice scripting language
- with advanced (static) type system
- thread-safe GC, lightweight threading, async I/O
- functional and imperative, lazy
Forth
- http://www.forth.com/starting-forth/
- https://www.gnu.org/software/gforth/
- Thinking Forth is a classic introduction to the language: http://thinking-forth.sourceforge.net/
- Interesting tutorial, with focus on writing firmware, bootloaders and similar: http://wiki.laptop.org/go/Forth_Lesson_4
F-Script Smalltalk
- Smalltalk-inspired scripting for Cocoa on Macs
- Looks like it really removes the bad parts from Objective-C, leaving something even I could work with!
- ExploringCocoaWithFScript
- LearnFScriptIn20Minutes
- ScriptingCocoaWithFScript
- CreatingCocoaClassesWithFScript
- SystemWideScriptingWithFScript
- http://www.fscript.org/
Futhark
- High-performance purely functional data-parallel array programming on the GPU
- https://futhark-lang.org/blog/2018-06-18-designing-a-programming-language-for-the-desert.html
- http://futhark.readthedocs.io/en/latest/versus-other-languages.html
Gleam
Added on:
- https://gleam.run/
- statically typed langauge for the BEAM (Erlang's VM)
- in the tradition of ML, uses tagged unions and (typed) tuples as data abstraction
- may be worth another look in the future, right now it's very young
Gravity
Added on:
- https://github.com/marcobambini/gravity
- "dynamically typed, lightweight, embeddable programming language written in C"
- implementation is around 8kloc
- procedural, object-oriented and functional
Groovy
Added on:
- https://groovy-lang.org/
- dynamic language for JVM
- inspired by Ruby
- a language that the Gradle - popular JVM build system - uses for config
- it's also used by Jenkins CI for scripting
Haxe
- http://haxe.org/
- a language and toolchain optimized for compiling to many targets
- supports PHP, Flash, JS, C++ and Java backends, among others
- static typing, ADT, generics, extending existing classes
- macros, class-based OO
Hoon
Added on:
- https://urbit.org/docs/hoon/
- a language used by Urbit
- purely functional, but with imperative-like features
- very terse syntax, rivalling J and APL I think
- compiles down to "low level funtional assembly"
- has a formally verified interpreter?
Hot Cocoa Lisp JS
- https://github.com/olleicua/hcl
- another attempt at putting "JS back in Lisp clothing"
Hotel
Added on:
- https://github.com/onnlucky/hotel
- High-level, dynamic language
- focused on creating high level abstractions
- claims to disallow any global effects other than I/O (isn't it the same as Erlang?)
may be interesting in a couple of years
Idris
- http://www.idris-lang.org/
- full-dependently typed, pure, eager functional language
- better than Agda and Coq by a large margin
- described in "Seven More Languages in Seven Weeks"
Imba JS
Added on:
- https://github.com/somebee/imba
- forked from CoffeeScript in 2012
- made more JS-like in syntax
- currently (2015-08-20) it lacks documention, so I will need to find the time to read the sources
- it supposedly contains a virtual DOM implementation and supports XML literals (for the ignorant masses known as 'JSX'…)
Inform 7
- a language for programming "interactive fiction" (MUD-like single player games)
- resembles natural written English to a very large degree
- see: http://inform7.com/learn/man/WI_1_1.html
- http://inform7.com/learn/man/RB_1_1.html
- example code: http://inform7.com/learn/eg/wir1/source.html
Io
- http://iolanguage.org/scm/io/docs/reference/index.html
- http://iolanguage.org/scm/io/docs/IoGuide.html
- purely OO, prototype-based
- homoiconic, metaprogramming enabled
- very consistent and small syntax, but extendable
Ioke JVM
- https://ioke.org/
- inspired by Io, but running on JVM
- homoiconic, fully dynamic, prototype oriented OOP
- still experimental, not production ready
Irken
- http://dark.nightmare.com/rushing/irken/irken/lang.html
- a Scheme with static typing and pattern matching…
- …or an ML with lispy syntax
J
- http://code.jsoftware.com/
- designed by Ken Iverson, one of the Ancient Programming Gods
- it uses freakishly alien computation model, with absolutely nothing in common with any other language
- except for APL of course
- good for simulations, number crunching, dealing with tables of any kind
- takes long to learn: on par with C++ (including learning some more advanced features)
- takes being Iverson to master?
Janet
Added on:
- https://janet-lang.org/index.html
- functional and imperative programming language
- S-exp syntax
- small, efficient implementation (in C)
- there's a shell based on it: https://github.com/andrewchambers/janetsh
- has PEG library for parsing: https://janet-lang.org/docs/peg.html
- docs: https://janet-lang.org/docs/index.html
JavaScript
Added on:
Jisp JS Lisp
- http://jisp.io/
- Clojure-inspired JS sexpr syntax
- partly or completely abandoned, this is what the author has to say about that:
There's been a hiatus in updates. Mostly it's because I'm busy with other projects. Another part of the reason is that my views on JS have underwent a complete 180°. (Please mentally apply a vintage filter to everything else you read in this documentation.) JS doesn't need lispy features or macros because of its polymorphism and flexibility. Problems solved with macros are usually better solved with apt program architecture and using the language to its fullest. Preprocessors tend to be detrimental to the latter part.
- of course, I disagree completely - JS syntax is a major PITA…
Joy
Added on:
- https://github.com/calroc/joypy
- a functional, stack-based language
- I couldn't get original implementation to work
- but fortunately someone made a Python-based implementation
- may be a good way to finally learn what is it all about
jq
- https://stedolan.github.io/jq/
- a DSL for JSON data manipulation
- which happens to be a full blown functional language
- (I assume this happened by accident, like with C++ templates)
- written in C and command-line use optimized
TODO Kayia
Added on:
- http://kayia.org/
- integrated, reactive
- looks interesting, need find some time to try it out
Kernel (Klisp)
- http://klisp.org/
- Klisp is an implementation of Kernel language
- Kernel is a Lisp which uses
vau
operator
vau
is a cross between macros and functions
- http://www.wpi.edu/Pubs/ETD/Available/etd-090110-124904/unrestricted/jshutt.pdf
Khepri JS
- https://github.com/mattbierner/khepri
- small syntactic extensions to JS for easier FP
- borrows from Haskell which is why I hate it
Ki JS Lisp
- http://ki-lang.org/
- another Lisp for JS
- this time written on top of sweet.js macros
- great interop (source-code level!) with JS
Kitten
- http://kittenlang.org/
- continuation of Cat? (which is unmaintained)
- is very early in development
Koka
Added on:
- http://www.rise4fun.com/koka/tutorial
- JavaScript-like language with strong typing
- also tracks kinds of effects in the type system
- (that dreaded word which starts with "M" would fit here)
- very interesting language!
Of course its dead now, no longer maintained and so on, but the idea seems very intriguing. I see this as a next step after F# with its workflows. The only conceptual difference now is that all the code runs in some workflow; this means that you have to add one additional workflow, called something like
Normal
. All the code that's not run in explicit workflows runs in theNormal
workflow.
L
Added on:
- a VM-based, interpreted, dynamically typed language
- with OOP features, with syntax similar to Ruby with (more) braces
- http://www.lemon-lang.org/documentation
- https://github.com/lemon-lang/lemon/tree/master
Leaf
Added on:
http://leaflang.org/
work in progressdead
- from its front page:
- dead, the author left it to rot in 2018:
- https://mortoray.com/2018/08/07/sadly-i-must-say-goodbye-to-leaf-my-programming-language/
- because "there wasn't much technical challenge anymore" in the language design, or so he says
TBH it sounds like he understood at some point that implementation of a language is the easier part, and that the design is both harder and more important, and that you can paint yourself into the corner very easily if you jump from one "interesting problem" to another "technical challenge". I might be reading too much into it, of course, just a personal impression.
- https://mortoray.com/2018/08/07/sadly-i-must-say-goodbye-to-leaf-my-programming-language/
Lily
Added on:
- https://gitlab.com/FascinatedBox/lily
- https://fascinatedbox.gitlab.io/lily-docs/
- an interpreted, statically typed language
- possible to use as an embedded language for C-based apps
- still under active development
LISP/c
Added on:
- https://github.com/eratosthenesia/lispc
- a Lisp-based macroprocessor for C language
- written in Common Lisp, with support for sbcl
- looks dead, no update since 2016
LiveCode
- https://livecode.org/
- interesting: an articulate language and HyperCard-like programming env
- open-source version available on Github, but they make you register if you want to download a full distribution
- source: https://github.com/livecode/livecode/
- other options: https://livecode.com/products/livecode-platform/pricing/
- interestingly, as of 2020, they seem to be doing well commercially! Nice.
- source: https://github.com/livecode/livecode/
LivelyKernel
- A JS-based, in browser environment and implementation of Morphic
- it allows interactive editing of all elements on page
- creates Single Page Applications (implemented and scripted in JavaScript)
- created by Dan Ingalls, one of original Smalltalk implementers/creators
- https://lively-web.org/welcome.html
LiveScript JS
Added:
- http://livescript.net/
- it's really sweet little language which makes functional programming in JS really awesome
- current version is stable and solid
- I got a little fix into it: https://github.com/gkz/LiveScript/pull/541
- I did a talk once on FP fundamentals and use-cases using LS
- personal note:
It seems that the frontend developer community decided to ditch most of compile-to-JS languages in favor of compile-JS-to-JS solutions. CoffeeScript fell out of favor and it became harder to smuggle any non-JS language into projects. I still use it in some of my private projects, and here's why.
- The good.
- LS supports nearly all of ES2017, so it's not like you lose some features by choosing it
- While "modern JS" supports a lot of Coffee features, it has almost none of the features of LS
- LS gives a syntactic support to a lot of functional programming techniques, which are awkward to use otherwise
- LS is PERL-level terse if you want, but still retains clear and well defined semantics
- LS supports nearly all of ES2017, so it's not like you lose some features by choosing it
- The bad.
- LS comes with a custom, optional library of functional utils. Great idea in its time, but now Ramda.js would be better
- Semantics of some constructs, like
const
andlet
, are slightly different from JS, which may be confusing
- It's way too easy to kill performance with a lot of higher-order functions and lambdas - they're cheap syntactically, not in terms of performance
- No built-in type inference or checking (the same is true for JS), although it probably could be integrated with Flow
- LS comes with a custom, optional library of functional utils. Great idea in its time, but now Ramda.js would be better
- The good.
- it is still maintained, but not actively developed
- I have some code in LS, in the form of Tizen app, and also here on the blog
Lobster
- http://strlen.com/lobster/
- https://github.com/aardappel/lobster
- http://aardappel.github.io/lobster/C_style%20language%20Cheat%20Sheet%20for%20Lobster.html
- language focused on game programming
- Python-like indentation-based syntax, with some C-like additions
- statically typed, with inference
- auto-vectorized operators for collections
- offers Lua-like coroutines, and performance on the Lua (non-JIT) level
Lua
- http://www.lua.org/
- mostly known as an embeddable scripting language
- Baldur's Gate, MUSHClient, Redis, Nginx and much more use Lua for scripting
- Lua is a simple language with very few primitives.
- It sports a prototype-based OO programming for those so inclined
- Lua is fast, and LuaJIT is blazingly fast and made by an alien robot from the future ;-)
- MoonScript is to Lua what CoffeeScript is to JavaScript
- Lua has a very simple syntax without much syntactic sugar, Moonscript fixes this
Lumen
- https://github.com/sctb/lumen
- self-hosted Lisp for JavaScript and Lua(!)
- features Lisp-like macros and reader macros
Luna
Added on:
- https://www.luna-lang.org/
- another (after Nemerle) language from Polish folks
- it's a purely functional, data-flow driven language
- which also has 1 to 1 complete visual representation
- there are other flow-based visual languages, but they have no (or have impaired) textual representation
Mercury
Added on:
- https://mercurylang.org/
- tutorial: https://mercurylang.org/documentation/papers/book.pdf
- Logic/Functional language
Mochi
- https://github.com/i2y/mochi
- functional, with pattern-matching and macros
- another compile-to-Python language
Myrrdin
Updated on:
- http://eigenstate.org/myrddin/
- described as "C with Generics"
- statically typed and AOT compiled to native
- ADT, pattern matching, type inference, package system
- low level control, like in C
Mythryl
- the author, who used nickname Cynbe, died in 2016, due to cancer.
- he wrote his last "status update" on 2015-09-18
- talking about the end of life, both his and the project's
- it's easily the most touching (and heartbreaking) PL-related thing I've ever read
- https://mythryl.org/pipermail/mythryl/2015-October/000932.html
- the message was deleted since then, here's the copy: https://web.archive.org/web/20160304013424/http://mythryl.org/pipermail/mythryl/2015-October/000932.html
- talking about the end of life, both his and the project's
- some "foundation" claims to be continuing the work
- a fork of SML/NJ with syntax closer to C-style and focused on practical applications
Nemerle dotNET
- http://nemerle.org/About
- Poland-based multiparadigm language for .NET/Mono
- with macros and other advanced features
NewLISP Lisp
- http://www.newlisp.org/
- dynamically typed, pragmatic, shell-oriented Lisp
- (I even liked it a bit IIRC)
Newspeak Smalltalk
- http://www.newspeaklanguage.org/
- https://bitbucket.org/newspeaklanguage
- https://groups.google.com/forum/#!forum/newspeaklanguage
- Based on Squeak Smalltalk, adds:
- by Gilad Bracha, who worked on Smalltalk and Java, and more recently on Dart design and implementation
Nf
- https://bitbucket.org/qx89l4/nf/src
- https://news.ycombinator.com/item?id=10032540
- concatenative, Forth inspired low level language
- a base for custom x64 OS
Nial
- http://www.nial.com/NialSaga.html
- http://en.wikipedia.org/wiki/Nial
- old! (from '82)
- uses APL-style vectorized operations
- has also support for FP with higher-order funcs
- very clean, simple but robust syntax
- it could be a Q/K/J competitor…
Nim
- http://nim-lang.org/
- nice: clean, expressive, compiled and fast
- on the other hand, it's an alpha-grade software: there are bugs
- (but that's normal and will improve with time)
- https://nim-by-example.github.io/oop_macro/
- some features:
- (from: http://hookrace.net/blog/what-is-special-about-nim/)
- Run regular code at compile time
- Extend the language (AST templates and macros);
- Bind (easily) to your favorite C functions and libraries
- Control when and for how long the garbage collector runs
- Type safe sets and arrays of enums
- Unified Call Syntax, so mystr.len() is equivalent to len(mystr)
- Good performance - C level in micro-benchmarks
- Compile to JavaScript
- (from: http://hookrace.net/blog/what-is-special-about-nim/)
- it has a package manager, called Nimble
Nu Lisp
- http://programming.nu/reference
- a Lisp for Objective-C
- interpreted, but with direct access to Obj-C classes
TODO Oberon
- https://en.wikipedia.org/wiki/Oberon_(programming_language)
- one more language from Niclaus Wirth, like Pascal
- it's apparently supported, maintained and even developed
- works on many platforms, suitable for systems programming
- to prove that point, there's an OS written in Oberon, also called Oberon
- to prove that point, there's an OS written in Oberon, also called Oberon
OCaml
- http://ocaml.org/
- oo&functional, impure, eager, static typing with global type inference (HM style)
- and ofc with module system, both bytecode and native compiler, nice async
- compile-to-js and many more interesting features
- has OPAM, native package manager and utop, IPython-like top-level (REPL)
- my first real functional language
ooc
Added on:
- https://ooc-lang.org/
- I encountered it a long time ago, along with Zimbu I think
- compiles to C, static typing with inference
- clean, minimal syntax
Opa
- http://opalang.org/
- dead, no longer maintained
- a language and a framework for writing web apps
- compiled to JS both on backend and frontend
Oz
Added on:
- Oz/Mozart is a main implementation, implements Oz v. 3
- multiparadigm, caught my attention because of logic-programming features
- transparent concurrency with promises and something else I don't know yet
- with a graphical environment and a nice Emacs mode
- https://mozart.github.io/mozart-v1/doc-1.4.0/tutorial/node3.html#chapter.basics
P
Added on:
- https://github.com/p-org/P
- a language for asynchronous event-driven programming
- looks a bit like Erlang with gen_fsm
Papyrus
- https://www.creationkit.com/fallout4/index.php?title=Papyrus_Introduction
- Object-Oriented scripting language
- used for scripting Skyrim
- with syntax somewhat similar to Visual Basic
ParenScript JS Lisp
- http://common-lisp.net/project/parenscript/
- http://common-lisp.net/project/parenscript/tutorial.html
- Common Lisp implementation targeting JS
- it's not 100% CL compliant, but close enough (I hear)
Pascal
Pharo Smalltalk
- http://pharo.org/
- PBE2 (aka. Deep into Pharo)
- I have a couple of simple projects done in it
- package management is not the easiest, but it gets better
- Pharo has its own versioning system (Monticello) and pkg management tool (Metacello)
- Gofer is another package which helps with installing packages
- there are many repositories with packages, no central repo like in Node, Python, Ruby…
- one such repository is: http://smalltalkhub.com/
- there is a problem, however: Smalltalk people like to use strange names for packages, like Pomodoro, Magritte, Ephestos, Epicea…
- …but they apparently HATE writing descriptions for packages explaining what they do
- in effect, you need to Google every second package name to learn what the heck it is
- (the rest - installing the package - is easy…)
- package management is not the easiest, but it gets better
PHP
PicoLisp Lisp
- http://picolisp.com/wiki/?home
- even simpler and smaller than newLISP
- very fast, expressive, with built-in DB
- and built-in Prolog (Pilog) engine
Pike
- http://pike.lysator.liu.se/
- OO byte-compiled language with multiple inheritance
- static typing, but with
mixed
datatype
- C-like syntax
Pixie
- https://github.com/pixie-lang/pixie
- inspired by Clojure, implemented in RPython
- a work in progress currently
- a light-weight Lisp which reuses PyPy JIT machinery
PogoScript JS
http://pogoscript.org/
- very flexible function definition syntax
Allows for both defining and calling functions with arguments inserted between parts of a function name. This is similar to Avail.
- adds primitives for async operations, transforms to CPS under the hood
Pony
Added on:
- http://www.ponylang.org/
- https://github.com/CausalityLtd/ponyc
- statically typed, with type system guaranteeing sharing/aliasing semantics
- actor-based concurrency, built into method calls via behaviours
- both nominal (traits
) and structural (
interface) typing
- classes, extending classes, no inheritance for classes (composition over inheritance)
PowerShell
- http://powershell.com/cs/
- Windows specific shell language
- procedural, giving access to all of .NET
- makes shell "pipes" (with | operator) into streams of objects
Prolog
- I used this one: http://www.swi-prolog.org/
- executable name: swipl
- logic programming language
- meta-programmable in itself, homoiconic
- good for writing parsers thanks to Definite Clause Grammar
TODO Pyret
Added on:
- https://www.pyret.org/
- scripting language with functional capabilities
- some more advanced features like pattern matching, built-in tests and type annotation
- algebraic data types
- syntactically resembles Lua, Python and possibly Ruby
Python
Added (for completeness) on:
Racket Lisp
- http://racket-lang.org
I did a little writeup on Racket when working on Bezier curvesforget it, I'm writing a new version
- in general, my first Lisp; still very impressive
- includes TONS of features, some of which are unique to Racket
ReasonML
- https://reasonml.github.io/
- an alternative frontend compiler for OCaml
- supported by Facebook
- integrates with BuckleScript to target JavaScript
- has JSX/XML-literals built in
Red
Added:
- http://www.red-lang.org/
- REBOL-inspired open source language
- simple and extensible syntax, very small footprint (500Kb runtime + tools )
- both compiled and interpreted, with cross-compiling capabilities (planned)
- there's an interesting interview with Red author
- it reminds me of Lisp and TCL (by the words of its author "it's in the Lisp family") in that it's:
- homoiconic (but the syntax is more similar to TCL or Smalltalk than Lisp)
- supports syntactic abstraction so you can implement your own loops etc.
- basically every command can parse the remainder symbols however it wants
- it has blocks, which are transparent and open for interpretation (unlike lambdas)
- homoiconic (but the syntax is more similar to TCL or Smalltalk than Lisp)
- some interesting one-liners (largely the same as in REBOL IIRC):
view layout [button “Click Me” [print “Hello”]] print read http://rebol.com parse read http://rebol.com [thru <title> copy text to </title> (print text)] send [email protected] mold read %. foreach row read/custom mysql://[email protected]/books [“SELECT * FROM authors”] [print row]
Redline Smalltalk Smalltalk
- http://www.redline.st/learn/redline-examples.html
- non-image based Smalltalk for JVM
- was gathering funds for development, but apparently failed
- no development for the last 3 years
Ruby
- https://www.ruby-lang.org/en/
- I had a bit of a plugin for Emacs written in Ruby, so I had to learn a bit
- it's familiar to me because of its Smalltalk roots
Rust
Added on:
- http://doc.rust-lang.org/
- Systems-programming language from Mozilla
- focused on type- and memory-safety by default
- focused on concurrency
- incorporates the notion of ownership into type system
Sather
- http://www1.icsi.berkeley.edu/~sather/
- related to Eifell, OO with later addition of FP features
- academic, free, not very practical :(
- would be good to investigate more
Scala
Added:
- http://www.scala-lang.org/
- FP/OO language for JVM, with seamless interop
- "flexible" syntax (that is, full of special cases)
- powerful static type system with local type inference
- you can choose immutability or mutability (vars, collections)
- supports dynamic, duck-typing-style structural subtyping too
Shen Lisp
- http://www.shenlanguage.org/
- a Lisp with turing-complete static type system
- called Qi earlier IIRC
Shill
Added on:
- http://shill.seas.harvard.edu/
- A shell-scripting language, which focuses on controlling privilages of running scripts
- written in Racket and apparently only working on FreeBSD for now
Slate
- http://slatelanguage.org/tag/cookbook/
- discontinued :(
- prototype-based, pure object-oriented and image-based
Sparkling
Added on:
- http://h2co3.github.io/
- https://github.com/H2CO3/Sparkling/blob/master/doc/tutorial.md
- interpreted, dynamic language with C-style syntax
- looks very similar to JavaScript
Spry (formerly Ni)
Added on:
- https://github.com/gokr/ni
- Smalltalk and REBOL influenced language
- "homoiconic without parentheses"
- with some influences from Nim - and implemented in it
- somewhat-active repository
Squirrel
Updated on:
- https://github.com/albertodemichelis/squirrel
- the features:
- Open Source MIT licence
- dynamic typing
- delegation
- classes & inheritance
- higher order functions
- lexical scoping
- generators
- cooperative threads(coroutines)
- tail recursion
- exception handling
- automatic memory management (CPU bursts free; mixed approach ref counting/GC)
- both compiler and virtual machine fit together in about 7k lines of C++ code and add only around 100kb-150kb the executable size.
- optional 16bits characters strings
- powerful embedding api
- eg. function/classes can be defined by scripts or in C
- eg. objects can fully exist in the VM or be bound to native code
- eg. classes created in C can be extended by scripts or vice-versa
- and more
- fast, embeddable language with full OOP support
Swift
szl
Added on:
- http://dimakrasner.com/szl
- a tiny, embeddable scripting engine inspired by Tcl and shell
TaijiLang JS
- https://github.com/taijiweb/taijilang
- a customizable and extensible language with dynamic parser and meta compilation
Tcl
- string-based interpreted language
- http://www.tcl.tk/man/tcl8.5/ | Tcl/Tk 8.5 Manual
- https://www.packtpub.com/networking-and-servers/tcltk-85-programming-cookbook | Tcl/Tk 8.5 Programming Cookbook | PACKT Books
- http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm | Tcl Commands
- http://docs.activestate.com/activetcl/8.5/tcl/TclCmd/contents.htm | Tcl Commands
- http://wiki.tcl.tk/20786 | Getting Tcl/Tk
- http://wiki.tcl.tk/515 | Unicode and UTF-8
- http://www.tcl.tk/doc/howto/i18n.html | How to Use Tcl 8.1 Internationalization Features
- https://github.com/dbohdan/sqawk | dbohdan/sqawk
- https://github.com/antirez/recidiv/blob/master/recidiv.tcl | recidiv/recidiv.tcl at master · antirez/recidiv
- http://wiki.tcl.tk/16925 | A Tcl repository
- http://core.tcl.tk/tcllib/doc/trunk/embedded/www/toc.html | Table Of Contents
Terra
Added on:
- http://terralang.org/
- a new low-level language designed for interoperability with Lua
- it extends Lua with a couple of keywords and constructs related to static typing and such
- looks somewhat like Cython, but not quite
Tokay
- https://news.ycombinator.com/item?id=31362049#31365007
- https://tokay.dev/
- AWK / sed replacement
- built-in support for parsing grammars
Tulip
Added on:
- very interesting take on shell/cmdline optimized language
- using FP as composition model
- uses auto-curring and function composition for chaining
- it doesn't exist yet, sadly:
- https://github.com/jneen/tulip
- http://www.jneen.net/posts/2015-03-01-tulip-language
Txr
- http://www.nongnu.org/txr/
- practical language for text manipulation and data extraction
- sounds like PERL, but isn't
- includes a full-blown Lisp-2 implementation
- is focused on matching patterns in incoming data
TypeScript
- static type system and transpiler for JavaScript
- its type system is Turing-complete
- https://github.com/microsoft/TypeScript/issues/14833
- still didn't have the chance to work with it
Unison
- https://www.unisonweb.org/docs/tour
- experimental language where all code is identified by its content
- if you heard of a FreeNet - this is the same idea, specialized to source code
Ur and Ur/Web
Updated on:
- http://impredicative.com/ur/
- http://www.impredicative.com/ur/manual.pdf
- Ur is functional, pure, statically typed, and strict
- Ur/Web is Ur plus a special standard library with support for construction of dynamic web applications
- incredible that it didn't go the way of many academic projects, it's still being developed in 2020!
V
- https://github.com/vlang/v/blob/master/doc/docs.md
- apparently backed by some fin tech comapny: https://www.mx.com/
- similar to Go in design goals, but compiles to native
- has a converter from C to V and also can compile via C to native
- easy cross compilation - like in Zig
- not sure about memory management scheme (they say "minimal allocations")
- hot code reloading
- REPL
Vala
- "almost C", but with syntactic support for GObject system
- nice for both low- and middle-level code
- https://wiki.gnome.org/Projects/Vala/Tutorial
- https://wiki.gnome.org/Projects/Vala/StringSample
wisp JS Lisp
- https://github.com/Gozala/wisp
- yet another Lisp for JS…
- there's also Lisp in C++ under the same name
Wren
- http://munificent.github.io/wren/index.html
- "a little classy scripting language"
- class-based OO similar to Smalltalk, but classes are immutable (for speed)
- fibers - and full coroutines built on top - for concurrency
- easily embeddable - only 4k loc, small clean API
- quite fast, in the same ballpark as Lua
XSLT/XPath
- language for transforming XML documents
- it's a pure functional, dynamically typed language with XML syntax
- based on pattern matching and recursion
- most implementations allow for extension
- http://en.wikipedia.org/wiki/XSLT
Yeti
- ML-like language on the JVM
- looks kind-of maintained
- https://mth.github.io/yeti/
- https://github.com/mth/yeti
Zimbu
Added on:
- http://www.zimbu.org/
- I found it some three years ago
- according to HN comments, similar to ooc
- written by Bram Moolenaar, the author of Vim