An opinionated collection of programming languages. This is a list of what I consider interesting. Requests to add to this list are welcome, but there is no guarantee I’ll include them. As you can see many mainstream programming languages are misssing from this list.
- Alore is a language that explores optional typing in a Python-like programming language.
- Alpaca is a statically typed, strict/eagerly evaluated, functional programming language for the Erlang virtual machine (BEAM). At present it relies on type inference but does provide a way to add type specifications to top-level function and value bindings. It was formerly known as ML-flavoured Erlang (MLFE).
- appcypher/astro: A multi-paradigm programming language that compiles to WebAssembly and native code. with Python syntax.
- Asymptote is a descriptive vector graphics language that provides a natural coordinate-based framework for technical drawing. Labels and equations are typeset with LaTeX, for high-quality PostScript output.
- ATS is a statically typed programming language that unifies implementation with formal specification. It is equipped with a highly expressive type system rooted in the framework Applied Type System, which gives the language its name. In particular, both dependent types and linear types are available in ATS.
- Ballerina “Ballerina is a compiled, transactional, statically and strongly typed programming language with textual and graphical syntaxes. Ballerina incorporates fundamental concepts of distributed system integration into the language and offers a type safe, concurrent environment to implement microservices with distributed transactions, reliable messaging, stream processing, and workflows.”
- Boomerang is a language for writing lenses—well-behaved bidirectional transformations—that operate on ad-hoc, textual data formats. Every lens program, when read from left to right, describes a function that maps an input to an output; when read from right to left, the very same program describes a “backwards” function that maps a modified output, together with the original input, back to a modified input.
- C2 an evolution of C, using LLVM.
- Cell offers, among other things, a very flexible, entirely structural type system; deterministic, repeatable execution; support for reactive programming; the ability to use relations to store data; transactions and propagation of undefined values for error handling; and ortogonal persistence. “Cell is designed to complement and integrate with your primary language, not to replace it. Once a component of an application has been implement in Cell, the compiler will generate from it an easy-to-use Java, C++ or C# class that can be integrated into an existing project. Support for other languages will be added in the future.”
- Chapel is a modern programming language that is parallel, productive, portable, scalable and open-source by Cray.
- Ciao is a general-purpose programming language which supports logic, constraint, functional, higher-order, and object-oriented programming styles. Its main design objectives are high expressive power, extensibility, safety, reliability, and efficient execution.
- Circle compiler enables you to metaprogram C++ in C++. It encourages a seamless mixing of compile-time and runtime capabilities that upends decades of language design.
- Clean is a general purpose, state-of-the-art, pure and lazy functional programming language designed for making real-world applications. Some of its most notable language features are uniqueness typing, dynamic typing, and generic functions. quick look.
- Cool is a small language designed for use in an undergraduate compiler course project. While small enough for a one term project, Cool still has many of the features of modern programming languages, including objects, automatic memory management, and strong static typing. Used for Stanford CS1 Compiler class.
- Crystal – is a ruby syntax inspired, statically type checked language that compiles to binary.
- Cuneiform is a functional programming language for large-scale data analysis workflows. Cuneiform uses distributed Erlang to scalably run in cluster and cloud environments. The flexible foreign function interface lets you integrate tools and libraries from many different sources. This allows you to drive a heterogeneous software collection through a uniform interface (Bash, Erlang, Python, Java, R, MATLAB, JS). Static type checking.
- Curry – Haskell with Logic Extensions
- Dafny: A Language and Program Verifier for Functional Correctness - Microsoft Research
- Dao is a lightweight and optionally typed programming language; Optional typing with type inference and static type checking; Object-Oriented Programming (OOP) with class and mixin class; Abstract interface and concrete interface to supplement class-based for OOP; Code section methods as a better alternative to functional methods; Support closures, anonymous functions; Deferred block and exception handling by defer-recover; Native support for concurrent programming; Concurrent garbage collection;
- Duet delta is an educational dialect of Haskell aimed at interactivity.
- Eff Programming Language is a functional programming language based on algebraic effect handlers. This means that Eff provides handlers of not only exceptions, but of any computational effect, allowing you to redirect output, wrap state modifications in transactions, schedule asynchronous threads, and much much more… Try it out in the browser
- The Egison Programming Language
- Ela combines strict and lazy evaluation, dynamic typing and features, which are normally adopted by statically typed languages, such as algebraic data types andHaskell style type classes. Compiles to .NET
- Euphoria – the language that brought me back from the C++ induced panic :D
- DRAKON, is a visual language for specifications. Discussions
- Elixir is a functional meta-programming aware language built on top of the Erlang VM.
- Fennel – Lisp in Lua. “Full Lua compatibilty, Zero Overhead, Compile-time macros, Embeddable”.
- Felix claims to have its own type system based on a combination of Ocaml and Haskell. Like Ocaml it provides strong support for functional programming, whilst also supporting imperative programming. The type system is strict.
- Flask staged Functional Programming for Sensor Networks
- Flex group at YC Research has a few interesting lanauges like: Ohm, Seymour, Purple, Trainee, and transcript.
- Flix – “takes inspiration from F#, Go, OCaml, Haskell, Rust, and Scala. Flix visually resembles Scala, but its type system is closer to that of OCaml and Haskell. Its concurrency model is inspired by Go-style processes and channels. Flix compiles to JVM bytecode and runs on the Java Virtual Machine. Flix supports full tail call elimination which means that tail calls (even to other functions) never overflow the stack.”
- Futhark - A High Performance Functional Array Language. “a small programming language designed to be compiled to efficient parallel code. It is a statically typed, data-parallel, and purely functional array language in the ML family, and comes with a heavily optimising ahead-of-time compiler that presently generates GPU code via OpenCL, although the language itself is hardware-agnostic.”
- Gleam is a statically typed functional programming language for building scalable concurrent systems. It compiles to Erlang and has straightforward interop with other BEAM languages such as Erlang, Elixir and LFE. Interview with the creator of Gleam
- Gush: A stack based language eventually for genetic programming
- Hazel, a live functional programming environment featuring typed holes.
- hobbes – a programming language, JIT compiler, and database system for low-latency, high-volume trading applications (built at Morgan Stanley).
- Idris is is a general purpose pure functional programming language with dependent types.
Inko ” is a gradually-typed, safe, object-oriented programming language for writing concurrent programs. By using lightweight isolated processes, data race conditions can not occur. The syntax is easy to learn and remember, and thanks to its error handling model you will never have to worry about unexpected runtime errors.”
“Inko is an object-oriented programming language, drawing heavy inspiration from Smalltalk, Self, and Ruby. There are no statements used for conditionals and loops, instead Inko uses message passing for (almost) everything.” Processes don’t share their memory, and communicate by passing messages, which are deep copied. This removes the need for explicit synchronisation, and makes data race conditions impossible. Inko uses a high performance parallel garbage collector, based on Immix. Each process is garbage collected independently, removing the need for a global stop-the-world phase. Inko is an interpreted programming language, with a bytecode virtual machine written in Rust. Inko is gradually typed, with static typing being the default. This gives you the safety of a statically typed language, and the option to exchange this for the flexibility of a dynamically typed language. Related reading:
Janet is a functional and imperative programming language. Janet makes a good system scripting language, or a language to embed in other programs. Think Lua or Guile. Janet also can be used for rapid prototying, dynamic systems, and other domains where lisp shines.
- Julia is a high-level, high-performance dynamic programming language for technical computing.
- Kit is a “Compiles-to-C” language. It is strong, and statically typed with many modern language features like type inference, algebraic data types, pattern matching, generics, implicits, while still having low level features like raw pointers, and manual memory management. Kit is written in Haskell. notes.
- Koka – is a function-oriented programming language that seperates pure values from side-effecting computations, where the effect of every function is automatically inferred. The language is strict (as in ML), but seperates pure values from side effecting computations (as in Haskell). Through the effect types, there is also a strong connection to its denotational semantics, where the effect type of each function has a direct translation to the type signature of the denotational function. more Recently, Koka fully supports user-defined effects through algebraic effect handlers.
- The Lemon Programming Language – python with curly braces. embeddable.
- Lily – an interpreted, statically typed programming language focusing on expressiveness and safety.
- Lobster is a game programming language. Unlike other game making systems that focus on an engine/editor that happens to be able to call out to a scripting language, Lobster is a general purpose stand-alone programming language that comes with a built-in library suitable for making games and other graphical things. Looks like python, but is statically typed.
- Logtalk is an object-oriented logic programming language that can use most Prolog implementations as a back-end compiler.
- Luna “is a data processing and visualization environment built on a principle that people need an immediate connection to what they are building. It provides an ever-growing library of highly tailored, domain specific components and an extensible framework for building new ones. Luna targets domains where data processing is the primary focus, such as data science, IoT, bioinformatics, graphic design and architecture.”
- Mercury is a logic/functional programming language, which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.
- Myrddin is a programming language that runs close to the metal, giving the programmer predictable and transparent behavior and mental model. It also does strong type checking, generics, type inference, closures, and traits.
- Mythryl is a rewrite of the SML/NJ compiler
- Nim – see my more exhaustive set of notes here.
- Objective-Smalltalk is an evolution of Smalltalk based on the Objective-C runtime.
- Opis reliable distributed systems in Ocaml (paper, 2009).
- P: Safe Asynchronous Event-Driven Programming by Microsoft Research
- Picat is a simple, and yet powerful, logic-based multi-paradigm programming language aimed for general-purpose applications. Picat is a rule-based language, in which predicates, functions, and actors are defined with pattern-matching rules. Picat incorporates many declarative language features for better productivity of software development, including explicit non-determinism, explicit unification, functions, list comprehensions, constraints, and tabling. Picat also provides imperative language constructs, such as assignments and loops, for programming everyday things. The Picat implementation, which is based on a well-designed virtual machine and incorporates a memory manager that garbage-collects and expands the stacks and data areas when needed, is efficient and scalable. Picat can be used for not only symbolic computations, which is a traditional application domain of declarative languages, but also for scripting and modeling tasks.
- Piplin is a language that lets you write Clojure to simulate and program FPGAs.
- Ponylang – is an object-oriented, actor-model, capabilities-secure, high-performance programming language.
- Propane Language a language for simple, correct-by-construction network configuration
- Pure – is a modern-style functional programming language based on term rewriting. It offers equational definitions with pattern matching, full symbolic rewriting capabilities, dynamic typing, eager and lazy evaluation, lexical closures, built-in list and matrix support and an easy-to-use C interface. The interpreter uses LLVM as a backend to JIT-compile Pure programs to fast native code.
- Pyret – python like language (syntactially) with FP ideas. inbuilt testing emphasis with
where:keyword. structured data like OCaml etc., Runs on top of Racket.
- The QED programming language – “[for]… designing complex graphical user interfaces the simple way. Its parallel GUI/business logic (GUI/BL - or guible) coding paradigm offers unequaled binding power, which considerably reduces the lines of code required to develop a GUI application. QED runs in both native and web environments, without changing a single line of code.”
- Rascal – is a metaprogramming language that integrates source code analysis, transformation, and generation primitives on the language level
- Red ; FAQ
- Reva – a small, cross-platform Forth. Recommended by \@deech in the context of “read the source code of the programming language to learn how things work”.
- Rosie Pattern Language – a better Regex. See MWPLS 2019 slides (PDF). Has a REPL, JSON output, Can use with C, Python, Haskell, Go.
- Quirrel is a purely declarative querylanguage designed for performing analytics and statistics on large-scale, multi-structured data sets.
- Quorum – an OOPS lang for teaching that compiles to Java bytecode.
- Scopes – The language is expression based, but primarily imperative. The syntactical style marries concepts from Scheme and Python, describing source code with S-expressions but delimiting blocks by indentation rather than braces. Closures are supported as a zero-cost abstraction. The type system is strongly statically typed but fully inferred, therefore every function is a template. Both nominal and structural typing are supported. Type primitives roughly match C level, but are aimed to be expandable without limitations. The memory model is compatible to C/C++ and utilizes simple unmanaged stack and heap memory. Scopes provides many metaprogramming facilities such as programmable macros, deterministic/guided folding of constant expressions, metadata necessary for basic step-by-step debugging as well as inspection of types, constants, intermediate code, optimized output and disassembly. The environment is suitable for development of domain specific languages to describe configuration files, user interfaces, state machines or processing graphs. Scopes embeds the clang compiler infrastructure and is therefore fully C compatible. C libraries can be imported and executed at compile- and runtime without overhead and without requiring special bindings. The SCIL (Scopes Compiler Intermediate Language) is suitable for painless translation to SSA forms such as LLVM IR and SPIR-V, of which both are supported. The SPIR-V compiler can also emit GLSL shader code on the fly. The Scopes compiler fundamentally differs from C++ and other traditional AOT (ahead of time) compilers, in that the compiler is designed to remain on-line at runtime so that functions can be recompiled when the need arises, and generated machine code can adapt to the instruction set present on the target machine. This also diminishes the need for a build system. Still, Scopes is not a JIT compiler. Compilation is always explicitly initiated by the user.
- Self is a prototype-based dynamic object-oriented programming language, environment, and virtual machine centered around the principles of simplicity, uniformity, concreteness, and liveness.
- SharpScript, a scripting language for .NET Core and .NET Apps that utilizes a familiar expressive Syntax to enable dynamic scripting of .NET Apps via controlled access to pluggable methods and arguments within a sandbox environment. looks good for exploratory and literate programming.
- SparForte “… allows you to write small scripts (think bash) and when they (inevitably) grow, you can transform them piecewise into Ada. The approach is similar to starting with Python and extending it with Rust where necessary. The advantage is the language is explicitly designed to support that use case.” – via
- syn·di·cate – a language for interactive programs. Syndicate is an Actor-based programming language offering. Pub/sub pattern-based message routing, for mapping events to actors. Dataspaces, stores for semi-structured data, for managing shared state. State change notifications for keeping actors informed of changes in dataspaces. Integrated techniques for registering and discovering services and for cleaning up after both graceful and unexpected actor failures. Recursive layering of groups of actors, each group with a private dataspace of its own, for organising larger programs
- Tab is a kind of general-purpose query language for text files.
- Terra is a new low-level system programming language that is designed to interoperate seamlessly with the Lua programming language. Like C, Terra is a simple, statically-typed, compiled language with manual memory management. But unlike C, it is designed from the beginning to interoperate with Lua. Terra functions are first-class Lua values created using the terra keyword. When needed they are JIT-compiled to machine code.
- Tree Language Tree Notation is a simpler kind of code. Tree Notation is an error-free base notation like binary. Check out the “dumbdown” (markdown) designer demo.
- TXL is a unique programming language specifically designed to support computer software analysis and source transformation tasks.
- Wren is a small, fast, class-based concurrent scripting language # Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in a familiar, modern syntax. Used in luxe game engine.
- Yeti is ML style functional programming language, that runs on the JVM.
- The Zig Programming Language is a system programming language which prioritizes optimality, safety, and readability. Ambition to replace C discussion on lobste.rs. Iterative Replacement of C with Zig
- ZL is a C compatible and C++ like programming language that focuses on extensiblilty and giving the programmer control over how high-level constructs (such as classes) are implemented. ZL archives the first goal by means of a customizable grammar and a powerful Scheme-like macro system. ZL archives the second goal by using the macro system to define high-level constructs from a C-like core language in a similar in spirit to Scheme.
- syntax across languages (One Big Page) – “Quite comprehensive comparison of syntax across languages”
- A quick comparison of 10 non-mainstream programming languages
- A list of multi-paradigm programming languages
- Hostiness: list of languages targeting an exiting host platform
- A wish list for new programming language. A laundry list of features. July 2015.
- Advanced programming langauges by Matt Might on Haskell, Scala, Scheme, SML and OCaml.
- James Iry’s history of programming languages (illustrated with pictures and large fonts)
- Say something you dislike about a language you love | Lobsters
- Say something nice about a programming language you dislike | Lobsters
Implementing programming languages
- Build your own Lisp Learn C by building a Lisp.
- Programming Languages: Application and Interpretation
- Less is more: language features
- What are some niche features you’d like to see in more languages? : ProgrammingLanguages … same on lobste.rs
- Interview with Jesper Louis Andersen about Erlang, Haskell, OCaml, Go, Idris, the JVM, software and… — Medium
- Programming language Pragmatics by Michael L Scott covers some of the theoritical background behind programming languages beyond the syntax.
See also: D lang, Rust, OCaml, C, C++, Python