You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
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.
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.
This is a collection of programming language theory texts and resources, all
of which are freely available over the Internet.
Many valuable reference texts on programming language theory, previously only
available in paper form, have in recent years become publicly accessible from
the net. I list here the ones I know of; below that you will also find a much
broader list of lecture notes and tutorials, other interesting reading, plus a
collection of related resources.
Obligatory plea
If you know of any other texts or resources which might belong here, please
add them to this list by editing this page.
(Does your submission belong in this list? See the #SubmissionGuidelines.)
I hope other authors will also make an effort, when possible, to get their
books online, especially if the book goes out of print.
Part of the reason PL theory and advanced programming languages seem
impenetrable to other communities is that learning materials are hard to
obtain, or demand a sizeable investment of resources (time, money, ...) even
if the potential reader is only exploring the subject.
Texts in this section are interesting, though not directly
related to programming language theory.
G.J. Chaitin.
The Unknowable.
(link)
Philip J. Koopman, Jr.Stack Computers: the new wave.
(link)
Resources
If you are interested in these topics, you can find additional resources (mostly in the forms of technical articles and theses) via:
Most importantly, any submission must include a URL to the full text of the
manuscript: this is not an
online list of texts,
but rather
a list of online texts.
Also, the text should be freely accessible; so, texts which belong to
some sort of private digital library (like the ACM Digital Library or
Elsevier's collection) are not admissible.
This list focuses on book-length reference works which treat major topics
in programming language theory, mathematical semantics and foundations,
particularly texts which have gone out of print. It would be nice if we could
assemble a set of texts which are representative of a master's degree
curriculum in programming language theory or computational mathematics.
On the other hand, do not dismiss interesting-looking material only
because it is too short, or because it does not treat a central topic, or
because it is too specific. If you know of something valuable which does not
quite fit the guidelines above, consider putting it in the
#OtherTexts category.
Dissertations, theses and technical articles are not really suitable for this
list, unless they provide an accessible (or: the unique) introduction to, or
tutorial for, a relatively broad and/or important topic. Conversely, a survey
would need to treat its topic in considerable depth to be included here.
Lecture notes and tutorials are acceptable, provided they are readable as
self-contained manuscripts. Because there are so many manuscripts here of this
type, please try to submit material which minimizes overlap with existing
entries.
Administration
This Wiki page is adapted from my (FrankAtanassow's)
PLT Online page.
For now, both versions will coexist
and I will probably add any updates to this page to my own page as well, and vice versa.
If this Wiki version sees a lot of activity and takes off, and does not evolve too far
from my original purpose (outlined in the
#SubmissionGuidelines above),
then I may trash my page and redirect page views to this Wiki.
-- FrankAtanassow - 23 Sep 2002