[CS 348 class banner]

A Quick Overview of a Few Programming Languages

Fritz Ruehr, 16 January 2002

This short list of programming languages is intended as the basis for a "teaser" lecture which will quickly review the history (and future?) of programming languages, with an eye toward those which are important, interesting or just plain different from Java. The list is in roughly historical order. There are some underlying themes, including: static versus dynamic; meta-linguistic hijinx; linear to hierarchical to graph-like structrues; increasing use of graphics and networking primitives; and interpreters versus compilers.

[should probably add Prolog, Curl, Scheme, one of Perl/Ruby/Python, CAML, maybe Cyclone]


Assembly Language

Assembly language is not so much a specific language as it is a language style: assemblers transliterate a low-level but human-readable notation into machine code which can be directly executed by a computer. The actual language therefore depends very much on the target machine. We will be using the PC-231 "virtual machine" this semester (it is basically a made-up computer used in older versions of the CS 231 class). The assembler (asm231) and simulator (sim231) are available on the Gemini and Hudson central servers (for use there, from the command line: downloading them to another machine would not do you much good).

FORTRAN

FORTRAN is one of the first higher-level languages and the first to feature hierarchically-structured expressions. It was treated with suspiscion by the programmers of the day as they didn't believe it could yield as good code as they could write by hand. The syntax of commands/statements was still line-oriented (i.e., there were no embedded statements): larger statement structures were "simulated" with jumps and similar constructs.

COBOL

COBOL is an old but still much-favored language for business applications. Its design was dictated by the desire to make programs readable (and modifiable!) by management and business personnel. To most programmers' eyes it looks rather verbose and ugly, but it is still probably the backbone of much business computing in the world.

APL

APL is an older functional language based on the array as a fundamental primitive data structure. It's statement structures harken back to assembly and FORTRAN, being essentially linear sequences with GOTOs, but it encourages an expression-oriented approach through its provision of (pre-defined) higher-order operators (i.e., functions which take other functions as arguments). APL is probably most known for its cryptic syntax, which involves a non-standard character set including Greek letters and other strange symbols.

C

C is basically a simple structured language layered on top of assembly and hardware concepts. It is nevertheless still the most popular of the modern languages, especially if you include C++, the object-oriented language which was originally layered on top of it via a pre-processor. C is very fast due to its closeness to low-level machine concepts, but it can be difficult to program high-level concepts without library support, and it's weak type-checking makes it very difficult to debug.

Squeak

Squeak is a modern freeware version of the object-oriented Smalltalk. It is a bit more purely object-oriented than Java, and certainly more dynamic in character: when you work in Squeak, you write, edit and run programs all in the same environment, and have constant access to all the objects in that environment.

Haskell

Haskell is a modern purely functional language (i.e., it has no side-effects). Programming without assignment statements might seem impossible, but Haskell demonstrates that it is not only possible, but effective and fun.

Rebol

Rebol is a modern internet-aware scripting language. In some ways it descends from the LISP family, in taking a fluid view of data and language, but it includes a rich set of built-in datatypes, a notion of objects, compelling graphics capabilities, close integration with the internet and world-wide web, and is associated with a "next generation" net platform called X Internet (or Rebol IOS).

Toontalk

Toontalk is a modern, general-purpose programming language with a different sort of syntax: rather than text written with ASCII characters, it uses an "action-oriented video game animation syntax". Toontalk is intended primarily for teaching programming and programming concepts to children, but it includes some sophisticated features, e.g., recursion, dynamic process creation, communication channels and method preconditions.