An nice language is Dylan. Dylan is a safe, strongly-typed, pure object-oriented language that supports multiple dispatch, modules, first-class functions etc. Dylan was originally designed by Andrew Shalit at Apple. There is a commercial implementation of it available from Harlequin (for Windows 95/NT platforms), with a personal version available via free download. Free versions of Dylan for various UNIX machines are available from the Gywdion group. Other useful Dylan sites include: Python is another favourite. Interpreted, and ideal for knocking up quick prototypes, but with a nice module system, lots of handy libraries, and almost purely object-oriented.
Apart from Simula-67, Smalltalk started the OO craze. Implementations are becoming more easily available now. (See also ObjectShare's non-commercial VisualWorks Smalltalk, available for Linux and Windows) A lot of Smalltalk-related information and projects are accessible from the Panasoft Smalltalk Links. Here is a Smalltalk tutorial from IBM.
Some other clean OOLs are:
Then we have the less clean C extensions: Objective-CC++ (Readings, FAQS, ANSI Standardor here)
- Blue, a clean OOL especially designed for teaching first-year students.
- Eiffel (see also here)
- TOM is a new object-oriented programming language that advocates unplanned reuse of code (classes can be extended in very flexible ways, even without source code for them).
A recommended book on the design of C++ is
"The Design and Evolution of C++", by Bjarne Stroustrup, Addison-Wesley, 1995. There seem to be two major contenders for the "best GUI toolkit" title at the moment. GTK+ (the GIMP toolkit) is more C oriented, but does slots and signals without a preprocessor, whereas Qt uses a preprocessor (MOC) but has the dis/advantage of being a complete solution for porting to Windows 95/NT. The GTK+ toolkit has bindings for several languages, including a C++ wrapper for GTK+ called gtk-- (or FTP).
Of course, there is the cleaner C++ derivative, Java (see also the Java white paper, a Java tutorial, Java Games and Java Puzzles). Some problems with Java that I've heard about include: hard to format a floating point number, integers etc. are not objects so cannot be subtyped or subranged, non-portable thread semantics, text I/O difficult for beginners.
Also check out Pizza, which is Java extended with parametric polymorphism, first-class functions and pattern matching. There are also quite a few other languages being implemented on top of the Java Virtual Machine, see here, here and here.
Rational Software Corporation have done an interesting comparison between development in C and Ada.
Rational Software Corporation also sell Purify (a heap-memory checker) and are responsible for the OO Unified Modelling Language, which is now the industry standard for specifying the structure of OO systems.
Here are some Software Engineering methods/tools for object-oriented programming:
Functional Programming Languages Haskell is the one that I've used the most. It is an elegant high-level language, with fast compiled implementations plus a interpreter (HUGS) that is good for development. Haskore (an extension of Haskell for writing MIDI tunes) comes with it too!
It is not too hard to interface Haskell to arbitrary C procedures, and I have interfaced it to mSQL (a freely available mini-SQL database system). Contact me for details.
Logic Programming Languages There is a WWW virtual library for logic programming. Michael Ley has a database/logic programming bibliography
Prolog is the most commonly known logic programming language, albeit impure. A few well-known implementations are: Quintus Prolog, SICStus Prolog, Eclipse Prolog, SWI Prolog (free!). Qu-Prolog is Prolog customised for formal methods (it handles quantifiers, object-variables and substitutions as primitives).
The Prolog at VIP is free for non-commercial use. Another free one is TRINC-Prolog. Michael D. Kersey recommends Amzi! Logic Explorer and the "Adventures in Prolog" (with a "very nice and complete tutorial"). See here for other free Prologs. [firstname.lastname@example.org, Alexander.Apostolovski@worldonline.be, and email@example.com; comp.lang.prolog, 12Mar99.]
Roman Bartak's Interactive Prolog Guide includes FAQs, program samples, implementations, and references.
The BURKS project provides documentation and free Prolog implementations for DOS, Windows etc.
LPA Prolog for Windows -- with an IDE and single-step debugger -- offers a free 30-day trial. [Nov98]
Amzi! Logic Explorer is free for personal use. It comes with a full tutorial and sample programs, plus a GUI development environment. Amzi! inc. also offers a Prolog compiler and embeddable libraries (for C/C++, Java, Delphi, VB, etc) for a 90-day trial. [Dec98]
Mercury is an elegant, pure, logic programming language from Melbourne University. The fastest logic programming language around...
The Cetus Links OO Prolog page has links to object-oriented logic programming languages.
Text Formatting Languages LaTeX is the defacto text formatting system for academic papers containing mathematics. There is lots of online reference material for it. See also the Comprehensive TeX Archive Network (CTAN).
For HTML (the web markup language):
Free Implementations The best programming languages are free, so try the free compilers list to find an implementation for your machine.
Garbage collection is an important aspect of modern programming languages. Harlequin's Memory Management Reference is a good resource for everyone interested in memory management and garbage collection.
Poplog is an open source, extendable, portable, multilanguage software development environment providing incremental compilers for several interactive programming languages: Pop-11, Prolog, Common Lisp, and Standard ML. It comes with documentation, libraries, and teaching materials for AI and Computer science (and more general programming).
Language Design Here are a few interesting papers about language design:
- Primitive Types Considered Harmful (why Java should be a pure OO language).
- Go To Statement Considered Harmful (a classic, by Dijkstra)
- Arrays and Pointers Considered Harmful, [Ince 92] D.C.INCE, ACM SigPlan Notices, January 1992.
- Interface Pointers Considered Harmful (About COM and C++, in The C++ Report, Sep 1995)
- COM Smart Pointers Even More Harmful (A follow-up article in The C++ Report, Feb 1996)
- An interesting comparison of language abstraction levels which showed that an almost functional language, CAML, was the best language for a large complex numerical simulation task.
Performance comparison between C++ and various higher-level languages, including Smalltalk, LISP, Dylan, Java