Ulf's Programming Language List

Analysis Requirements & Principles architecture:
Paradigms
substance:
Abstractions
structure:
Domains
building blocks: Features surface:
Syntactics
Defining PLs Language
List
foundational safety flexibilized

  1. Language Links
  2. Modeling, Specification, Design Formalisms
  3. More or Less Object-Oriented
  4. Beyond Classical OOP: Objects with Implicit Invocation
  5. Classical Multi-Paradigm with OOP
  6. Functional (+/- Side-Effects, not Object-Oriented)
  7. Logic (not Object-Oriented)
  8. Other Languages
  9. Comparison of Programming Languages
     
Disclaimer: This list is not intended to be complete, for that see links below. It is my personal selection with a tendency to OO and research languages.

If you know further references, please don't hesitate to tell me (Ulf Schünemann), likewise if you have any suggestions.


Language Links

Links to more languages: Standardizing organizations develop programming languages, the "standardized" form of (usually) already existing languages.

Modeling, Specification, Design Formalisms

For the formal methods approach here are further links, many notations, methods, tools (B, CCS, Isabelle, Mizar, OBJ, Petri-nets, Pi-calculus, SDL, VDM, Z, ...)

Graphical/Visual Modeling Languages

Graphical Modeling Languages are based on a collection of diagrams types which express different views of a system, which only together describe systems completely.
A note on visual languages: «Unfortunately, many people take diagrams lightly -- much too lightly. They find it hard to relate to a bunch of graphics as something serious enought to be called a language, and profound enought to be the `real thing' ... [A]ll too often one encounters what we may call the `doodling phenomenon', whereby diagrams are considered by people to be what an engineer scribbles down on the side, as a kind of visual aid. ... Some people find it hard to understand why you can't simply add more and more graphical notation to a visual language. For example, there have been many cases of people proposing (in private commnuication) all kinds and extensions to the language of statecharts. These people could not understand why you can't just add a new kindof arrow that "means synchronization", or a new kind of box that "means separate-thread concurrency" ... It seemed to them that if you have boxes and lines and they mean things, you can add more and just say in a few words what they are intended to mean.
A good example of how difficult such additions can really be is the idea of having overlapping states in statecharts. ... [I]t took a lot of hard work to figure out a consistent syntax and semantics for such an extension. In fact, the result turned out to be too complex to justify implementation. Nevertheless, people often ask why we don't allow overlapping ... It is very hard to convince them that it is not at all simple. One person kept asking this: "Why don't you just tell your system not to give me an error message when I draw these overlapping boxes?", as though the only thing that needs to be done is to remove the error message and you are in business!» [ML1] David Harel, Bernhard Rumpe: Modeling Languages: Syntax, Semantics and All That Stuff; Part I: The Basic Stuff; 2000. (from citeseer.com)
For single diagram types, see also spatial statics associative networks (statics graphs) ER, IE, and class diagrams of ORM, Syntropy, UML, ... dynamics graphs: statecharts, flow charts, Petri Nets, ...

Textual Formalisms

More links can be found in the Formal Methods archive.

Component Interface Description/Specification Languages (IDL)

Interface description languages are ``incomplete.'' They just describe the interface of software components. The implementation of the component must be provided in another way.

More or Less Object-Oriented

Ada: Home of the Brave Ada Programmers (US mirror?):
- Ada 95 Reference Manual; syntax overview.
- ACM: SIGAda WWW Server Home Page
- ACM Conferece: WAdaS 96
- DoD: Ada and Beyond: Software Policies for the Department of Defense
- ?: Ada95
- Gna95gp For Windows 95

BETA (links)
- Papers at Aarhus University
- New interpreter for generalization of BETA (program) Source code, precompiled interpreters for Sun/Sparc,Linux,SGI/IRIX,HP-UX9 etc. The interpreter is very new, stable enough for 10-100 lines, executing in a gdb-like environment.

C++
The C++ standard libaries: 51 Standard C++ library headers (13 constitute the STL = Standard Template Library) plus 18 headers from the Standard C library):
- Links to the
The Standard Template Library
- Dinkum C++ Library Reference
More information:
- the sign-in ``C++ home''
- C++ Annotations, a C++ course for people making the transition from C to C++.
Evolution of C++:
- Changes C to C++
- C++ Beyond the ARM
Specific issues:
- simulating typedef templates
- my summary of C++ conversions (casts, ...), and Bobby Schmidt on static_cast (to make implicit conversions explicit + any type to void (eg. in function template: return static_cast(...);) + downcast + invert some standard conversions) and on reinterpret_cast (type overlays + int <-> ptr + ptr <-> ptr within obj-ptrs, fun-ptrs, mem-obj-ptrs, mem-fun-ptrs)
- unnamed namespaces
- Are global operators 'part' of (the interface of) a class? (NB "a set of data along with the functions that operate on that data") This leads over to:
- Koenig's lookup rule for functions and for templates, which depends on actual arguments' namespaces. (more: Herb Sutter's Guru Of The Week, and Bobby Schmidt's Present Imperfect).
- C++ does allow covariant overriding of result types (like Simula did) (see ISO C++ standard: paragraph 5 in 10.3 Virtual functions [class.virtual])

[removed from web:]
The ISO/ANSI Standard for C++ (according to the December 1996 Committee Draft 2) [australia]:
Table of contents, Index of section labels
Old: January 1996 Draft [australia] is marked up for Working Group members. Also: Head [at weimar]
Old: Public Review [australia] (April 28th 95 to July 25th 95). Also: Head [at weimar], Head [at warwick], Head [at cygnus], FTP ISO DRAFT ASCII [at cygnus]

Cecil
- Cecil Project Overview
- Object-Oriented Multi-Methods in Cecil

Dylon Home Page
- an ``object-oriented DYnamic LANguage'' (OODL)
- a good introduction: A First Look at Dylan: Classes, Functions, and Modules
- PC AI - The Dylan Programming Language
- developed at Apple

Dynace Object Oriented Extension To C

Eiffel
- the standard library EiffelBase
- CONCURRENCY [Chapter 28 of OOSC2]
- Geoff's Universal Eiffel Resource Locator (GUERL)
- syntax

Java: Programming for the Internet (Java Home Page)
- Language Specification (syntax overview).
- JavaTM 2 Platform, Standard Edition, v 1.3 API Specification
- More documentation;
- GJ - A Generic Java Language Extension
- Inner Classes (spec)
- CORBA-IDL mapping [+] (spec)
- JavaActors (program)
- Reflection API (spec)
- Safe StructuralConformance for Java (PS)
- Work on Formalizations of Java by SLURP (Sophia Drossopoulou et.al.)
- Links to Java beans, distribution.

Modula-3: Introduction.

Oberon Home Page (ETH Zurich)

Python Home Page

Sather home page
- Engineering a Programming Language: The Type and Class System of Sather (PS)

Self: DMOZ links.
- papers (Sun)

Smalltalk
- The UIUC Smalltalk Archive
- a Smalltalk presentation
- About Smalltalk
- Smalltalk links
- IBM's VisualAge Smalltalk

Sisal Language Project

Transframe Language (Transframe Technology Home Page)

YAFL Programming Language
- strict language, assertion mechanism
- inheritance and parameterized classes
- modules: definition and implementation part
- garbage collector
- compiler support facility is the availability of the compiler passes and its attached intermediate data structures as documented and usable YAFL constructs, defined as part of the standard library.

Beyond Classical OOP: Objects with Implicit Invocation

navigation bar: Message Passing
  • message passing diagrams
  • client-server architecture
  • object systems (model of computation)
  • message filtering systems
  • message passing meta-programming
  • OOP + Message Passing Meta-Programming in the Message Filtering Model-of-Computation

    OOP + Object Constraint Programming in the Object Change Propagation Model-of-Computation

    For more see different kinds of constraint slots in objects.
    • Garnet adds a bit of declarative programming, by constraints which objects can have besides attribute values, and methods [DeclOO]
    • The system of [SAOS]
    • The system of [CstrPat]


    Classical Multi-Paradigm with OOP

    OOP + Functional

    OOP + Functional + Logic + ...


    Functional (+/- Side-Effects, not Object-Oriented)

    For general information see the functional paradigm.
    Caml is a strongly-typed functional programming language from the ML family
    - Work is in progress on Objective Caml
    - Frequently asked Questions about Caml
    Cayenne
    is a simple(?) functional language with a powerful type system. The design of Cayenne has been heavily influenced by Haskell and constructive type theory and with some things borrowed from Java. The drawback of such a powerful type system is that the type checking becomes undecidable.
    Charity:
    - based on the theory of strong categorical datatypes divided into inductive datatypes (built up by constructors in the familiar way) and coinductive datatypes (broken down by destructors).
    - Programs over these datatypes are expressed by folds (catamorphisms) and by unfolds (anamorphisms), respectively.
    - lazy evaluation.
    - higher-order.
    - all computations terminate (up to user input).
    Clean is a state-of-the-art, pure and lazy functional programming language.
    Gofer is a lazy functional language by Mark P Jones (version 2.30a 1994)
    - TkGofer library for writing graphical user interfaces
    Haskell (ftp) is a polymorphicly typed, lazy, purely functional language
    - The Haskell 98 Language/Library Report (revised)
    - Simon Thompson: Haskell: The Craft of Functional Programming. Addison-Wesley, 1996.
    - Extensions: polytypic PolyP (c.f. here), object-oriented O'Haskell
    - Hugs interpreter
    Lisp/Common List/CLOS (list processing, Common Lisp Object System):
    - Common Lisp: object-oriented + functional + procedural
    - Common Lisp the Language; LISP syntax.
    - Marty's LISP Page.
    - FAQ on the Common LISP Object System.
    Scheme
    is a statically scoped and properly tail-recursive dialect of Lisp invented by Guy Lewis Steele Jr. and Gerald Jay Sussman.
    SML (ML) (meta language):
    - Standard ML (syntax overview) and the proposed Standard ML Basis Library (also).
    - SML of New Jersey compiler, MLton a whole-program optimizing compiler, MLj compiler to JBC, ML Kit compiler, Moscow ML light-weight implementation, MetaML, PolyML full SML implementation,
    - Lawrence C. Paulson. ML for the Working Programmer (2nd ed.); Cambridge University Press, 1996.

    Logic (not Object-Oriented)

  • ECLiPSe -- The ECRC Constraint Logic Parallel System.
  • Mercury
  • Prolog

    Other Languages

  • Erlang and OT environment for building distributed real-time high availability systems.
  • Mozart is based on the Oz language, which supports declarative programming, object-oriented programming, constraint programming, and concurrency as part of a coherent whole.
  • Set-based (sets as main builtin data structures): SETL, SETL2, ProSet, Slim [more links]

    Procedural

    Relational

    Layout

    Assembly

    Graphical Programming


    Comparison of Programming Languages

    Judging comparisons between languages are discussed in PL evaluation.
  • Collection of Programming Language Critiques.
  • Kanneganti, Cartwright: What is a Universal Higher-Order Programming Language? CALP 93. dvi, ps
  • Capers Jones: Programming Languages Table; Software Productivity Research, 1996. (Classifies languages by the number of statements necessary to code one function point).
  • Object-Oriented Languages: A Comparison (Eiffel, C++, Java, Smalltalk)
    Analysis Requirements & Principles Paradigms Abstractions Domains Features foundational safety flexible typing Syntactics Defining PLs Language List
    Ulf Schünemann 071297, 140801