Programming Languages

Techno

There are many interesting and useful ProgrammingLanguageTheoryTextsOnline.

Google has a directory of programmming language websites.

Statically typed languages

Haskell

Haskell is a non-strict, polymorphic functional language with type inference and controlled side effects and supports overloading via type classes. Haskell implementations include compilers (GHC, NHC98, HBC) and interpreters (GHC and Hugs). Most implementations support extensions such as existential types and multiparameter type classes. Generic Haskell is a preprocessor which extends Haskell with the ability to define functions which recurse over types.

Gofer is a not-quite-Haskell predecessor of Hugs. Concurrent Clean is a Haskell-like language with uniqueness typing.

ML

ML is a strict, polymorphic functional language with uncontrolled side effects, type inference and a powerful system of parametrizable modules. SML FAQ, ML FAQ, Info. SML/NJ is a robust compiler with extensions like first-class continuations and higher-order functors. Moscow ML is a popular lightweight compiler supporting recursive modules. MLton is a whole-program optimizing compiler. The ML Kit is a modular reference implementation of the language. MLj is a compiler which targets Java. SML.NET is a compiler for a variant of Standard ML which targets Microsoft's .NET. The new SML Basis library is part of the standard. SML/Tk is a Tk interface.

Objective Caml (also see CAML) is a pragmatic ML variant with OO extensions. ocaml.org has many useful links. F# is (nearly) an implementation of CAML which targets .NET. JoCaml extends Ocaml with high-level features for distributed programming based on the join calculus. MetaOCaml is a derivative of Ocaml with compile-time reflection.

Java and C#

Java is a statically typed object-oriented language very similar to C++, which typically runs atop a virtual machine. Tutorial, Latest JDK, JavaBeans, Gamelan, Pizza, GJ. There are a ton of resources and libraries available for Java: BluePrints, Developer Connection, jars.com, Java Foundry at SourceForge, jGuru, Cafe au Lait Java FAQs, News and Resources.

C# is Microsoft's answer to Java; it runs atop the .NET platform, which (unlike the Java platform) is intended to support multiple source languages. C# Corner, C# Today, C# Help. Mono is an open source implementation of .NET for UNIX.

Algebraic languages

ASF+SDF is a generic environment for language specification. Maude is a reflective language based on rewriting logic. OPAL is actually higher-order, but has an algebraic flavor to it. Other members of this group are: OBJ and CafeOBJ. Also see Joseph Goguen's Hidden Algebra page and the Oxford Hidden Algebra page. TXL is a hybrid functional/rule-based language with unification, implied iteration and deep pattern match.

Charity is a terminating, polymorphic language supporting type inference and algebraic, and higher-order coalgebraic, datatypes. FISh is an array programming language based on the idea: Function = Imperative + Shape.

Logic languages

Mercury is a polymorphic logic/functional language with controlled side effects supporting static declaration of modes and determinism for logical predicates.

Wirth's languages

Niklaus Wirth has created several languages of note, all procedural, of which Pascal is the best known. Pascal Central. Brian Kernighan (co-designer of C) wrote a famous diatribe, Why Pascal Is Not My Favorite Programming Language. See also the Modula-3 Home Page and Digital's SRC Modula-3. Shortcut to the Modula-3 Language Definition. Oberon is interesting for its tight integration with the Oberon operating system. See: ETH Oberon, Oberon Microsystems, Oberon System V4, The Oberon Reference Site and The Oberon Webring.

Experimental

Vault is a low-level, safe, C-like language with functional features, generics, modules and resource-tracking types. Cyclone is another C-like language with tagged unions, parametric polymorphism, pattern-matching, exceptions, structural typing for records and parametrized typedefs. Alice is an SML variant descended, at least in spirit, from Mozart. Aldor was originally intended as an extension language for the computer algebra system AXIOM; it supports dependent and first-class types. Stratego is a language for specifying program transformations via rewriting strategies. Cayenne is a programming language with dependent types; type checking in Cayenne is undecidable (i.e., the checker may not terminate), but the system is extremely expressive.

Piccola is a language based on Milner's pi-calculus, designed to make it easy to define high-level connectors for composing and coordinating software components written in other languages. Nice is an OO language based on Java, with parametric types, higher-order functions and multi-methods. Scala is a concurrent, object-oriented, functional language with a special focus on web services, and designed as a successor to Funnel, a language based on the Join calculus which combines FP with Petri nets.

Elephant 2000 is a language from John McCarthy (of LISP fame) based on speech-acts. TOM is an OO language that tries to support unplanned reuse of code. Transframe is an OO language that lets dynamically and statically typed code interoperate via run-time code generation. UFO Unites Functions and Objects.

Procedural

Ada is a procedural language with subtyping and parametrizable modules, intended for heavy-duty military and industrial applications. See also Ada Core Technologies, home of the GNAT compiler.

Pike is a fast statically typed scripting language.

Logic frameworks, theorem provers and proof assistants

Yarrow is a proof assistant for pure type systems with subtyping. LEGO is a proof assistant implementing Edinburgh LF, the (Generalized) Calculus of Constructions and Unified Theory of Dependent Types. Isabelle is a generic theorem prover with tactics and tacticals. HOL is a theorem prover for higher-order logic. Nuprl is a theorem prover based on a significant extension of Martin-Lof's Intuitionistic Type Theory.

COQ is a proof assistant for the Calculus of Inductive Constructions. PVS is a verification system including a specification language based on classical, typed, higher-order logic and a theorem prover. Twelf includes the LF framework with type reconstruction, the Elf constraint logic programming language and an inductive meta-theorem prover for LF.

The Mizar Project is a long-term effort aimed at developing software to support a working mathematician in preparing papers, including a natural deduction language for expressing mathematics over Tarski-Grothendieck set theory.

Dynamically typed languages

Scheme

Scheme is a minimalist functional language with uncontrolled side effects and a hygienic macro system. It descends from LISP. DrScheme is a full-featured Scheme environment including a graphic IDE, debugger, help system and GUI library, well-suited for classroom use. Gambit Scheme, Bigloo, (Petite) Chez Scheme, QScheme, SXM, SISC, Schemers.Org, the Scheme Repository.

Scripting languages

What these languages seem to have in common is that they are all dynamically typed and procedural, with lots of built-in datatypes and a strong emphasis on syntax and text-processing. Also, it seems all of them are implemented either as interpreters, or as compilers targeting a virtual machine, and support garbage collection.

Python (and the Java-targeting implementation Jython) is an OO language with closures, exceptions and resumptions. Ruby is a single inheritance OO language with closures. Nickle is a desk calculator language with optional static type checking. Lua is lightweight language designed for extending applications. Perl is a language with OO extensions and built-in support for text-processing. Icon supports "goal-directed evaluation". Tcl is a language for gluing applications together and interfacing with the Tk graphical toolkit. The Q language is based on term rewriting. Rexx is a procedural language developed at IBM. See also Object Rexx, an OO extension, and NetRexx, which targets Java.

Logic languages

Prolog is the de facto standard here, for intuitionistic logic: SWI-Prolog, SICStus Prolog, GNU Prolog, YAP Prolog, XSB.

Lygon is based on linear logic.

Other

Erlang has built-in support for concurrency, distributed computation and fault tolerance. Erlang is used in several large telecommunication systems at Ericsson. See also Gerl.

Objective C is an extension of C with constructs for dynamically typed object-oriented programming. See Objective C Resources at swarm.org.

Cecil is a pure OO language with multi-methods; the Vortex compiler uses a whole-program optimizer to largely eliminate unnecessary dispatches.

StarLogo is an updated version of the well known LOGO language.

Mozart is a multiparadigm language based on Oz, which supports declarative programming, object-oriented programming, constraint programming, and concurrency as part of a coherent whole.

Document languages

Typesetting

TeX is a typesetting program created by Donald Knuth, based on a macro programming language. It is widely used in academia and research circles, not least because of its unequaled support for mathematical typography. Many useful macro packages are available from the CTAN servers. Omega is a 16-bit version of TeX supporting Unicode. (La)TeX Navigator is a portal. TeXtrace converts TeX fonts to Type 1 fonts, which is important for producing PDF files legible in Acrobat.

Lout is a document formatting system similar to TeX which produces PostScript and PDF.

Markup languages

XML is a markup language related to HTML widely used in industry. See the W3C XML Page, the XML Cover Pages, xml.com and Cafe con Leche XML News and Resources.

SGML is a predecessor of XML which is still used in many places. See SGML Cover Pages. DSSSL is an ISO standard for formatting and transforming SGML documents, based on a superset of the Scheme programming language. OpenJade is an implementation of DSSSL based on James Clark's earlier Jade (also James Clark's DSSSL Page). There is a DSSSL Mailing List.

Literate Programming

See the DESY Literate Programming Library for a summary.

Miscellaneous

If it exists (or once did), you will probably find it in the the Language List. Other kinds of information are available at Inter-Language Unification and Programming Language Exploration.

Here are some quick links to other programming languages and related projects: the SUIF Compiler, Sisal, Lolli, Poplog, Sather, The R Project for Statistical Computing, merd, Flare, Styx Scanner & Parser Generator, High Performance Generic Programming Project, the CiME Rewrite Tool, avram, the Internet Virtual Machine, The Great Computer Language Shootout, The Great Win32 Computer Language Shootout, Leda.

Broken links: Napier88 at St. Andrews, and KiR at Kiel.

-- FrankAtanassow - 23 Sep 2002