mathepi.com
More mathematical epidemiology information to appear...
Home   About us   Mathematical Epidemiology   Rweb   EPITools   Statistics Notes   Web Design   Search   Contact us   Links
 
> Home > Modeling and Methods > Languages
Last updated January 23, 2003

Programming Languages

There are thousands of programming languages that have been developed. This is a short review of some I've used and found interesting or useful. The contents of this page are idiosyncratic and not particularly complete, consisting more or less of stuff I think is interesting! There is a disclaimer at the bottom of the page.

Fortran

The first high level language ever, Fortran has changed a good bit since its inception. Many numerical and scientific programming libraries have been written in Fortran. The new Fortran 90 and Fortran 95 introduce special features for parallel algorithms and other powerful data abstraction features--Fortran is now a completely modernized, expressive language and yet retains its traditional strengths.
Personal opinion: Fortran 90/95 is a good choice for serious number crunching.
Some links you might find helpful:

Advocacy:

Language overviews, tutorials, and books

Compilers and other Fortran Products

Fortran software libraries

Other information

Much more is available through the standard search engines.

Matlab

Essentially a scripting language targeted at numerical programming, Matlab features an expressive and powerful array language. A commercial version has been produced by The MathWorks; Scilab, a full-featured language very similar to Matlab, is freely available from INRIA (thanks to Prof. Bertran Auvert for pointing this out). Matlab was featured in an article in Dr. Dobbs' Journal, Jan. 1999. Matlab and Scilab are compared to R (and S) here.

Octave

Octave is a powerful high-level numerical analysis scripting language.

S, R, and S-Plus

S may be considered either a scripting language aimed at statistical computing, or a full-featured statistical package depending on your perspective. The commercial extension S-Plus contains extended functionality and a friendly graphical user interface. R is a language nearly identical to S and is freely available from the Comprehensive R Archive Network. Many links and references are also available at this site. Matlab and Scilab are compared to R (and S) here.

Ada

Ada is an object oriented language and also contains support for generic functions and concurrent tasks. Those of you who are Pascal fans may find that Ada has a similar feel to it. One of the things most appealing about Ada is that readability and reliability were central design goals for the language. The lead developer of Ada was Jean Ichbiah; the lead developer of the Ada95 revision was Tucker Taft. The lead developer of the GNAT compiler is Robert Dewar.

Learn more about Ada at these sites:

For an interesting study of Ada productivity, see "Software Engineering Education: On The Right Track With Ada" by John W. McCormick in Ada Letters, vol XX, num 3, Sep 2000. See also another interesting article.

Compilers are available for a variety of platforms. Here are a few examples.

It is possible to compile Ada code into Java bytecode. More information coming soon...

Simula

Simula, like Pascal and Ada, is a direct descendant of the celebrated Algol language and features strong typing. Simula is famous for being the first object-oriented language and is thus a direct ancestor of newer object-oriented languages such as C++, Ada95, and Java. Although Simula is a general purpose language, it was originally developed specifically for simulation modeling, and it has built-in support for event activation and scheduling. The principal architects of Simula were Kristen Nygaard and Ole-Johan Dahl. Personal opinion: Simula remains an interesting and useful language, especially for small discrete-event simulation projects.

Learn more about Simula at these sites:

The cim project makes a Simula compiler available free of charge for a wide variety of platforms. I have used the FreeBSD port successfully. Learn more about cim from the Cim Home Page. Cim has been ported to the Windows environment:

Python

Python, developed by Guido van Rossum, is a powerful general purpose language. It is often considered a "scripting" language and is often considered for use in the same niche as Perl and TCL, and is useful for such things as CGI scripts. Some people consider Python to be suitable for large projects. Python is completely object oriented, and also features built-in support for regular expression matching as well as high-level data structures such as dictionaries. There are also add-on packages for Image Processing and Numerical Analysis, and there is an implementation called JPython written entirely in Java and therefore can provide access to Java class libraries. Personal opinion: Elegant, clear, and powerful, Python is, beyond a doubt, the friendliest language I have ever had the pleasure of using. (The little Latin Hypercube Sampling CGI program on this web site is written in Python.)

Learn more about Python from the Official Python Home Page.
 

ML

ML, developed originally for research in automatic theorem proving, is one of the most elegant general purpose languages available. It is a completely functional language and features a remarkable type system; genericity with strong typing, which is occasionally cumbersome in some languages, is achieved with remarkable ease to the programmer. I have not investigated available ML systems recently as to speed, foreign language interfaces, and so forth.

Lisp

Short for List Processing, Lisp was invented by John McCarthy then at MIT. Lisp looks quite strange at first, since Lisp programs are themselves Lisp data structures. However, Lisp is an extraordinarily expressive, interesting and useful language. Many mature implementations are available, and with a good optimizing compiler, compiled floating point numerical code is said to rival or exceed execution speed of C in some applications. Learn more at these links: The amount of Lisp resources available on the Net is enormous; more links will be added here as time goes by. A search under the standard engines will yield many pages.

C

The C programming language, developed by Brian Kernighan and Dennis Ritchie, is a compact and somewhat low-level language whose chief advantages are its ubiquity and speed. It is useful for writing speed-sensitive portions of applications, and is used as a target language for compilers on occasion (as in the Simula implementation cim described above).

Smalltalk

Smalltalk (developed by Alan Kay and others at Xerox PARC) popularized object-oriented programming and the graphical user interface, making Smalltalk one of the most influential systems ever. Smalltalk seems to have a reputation for being an easy-to-use system for development. Learn more about this fascinating and unique language at www.smalltalk.org. Also, Daniel Ingalls has written a fascinating article on the Design Principles behind Smalltalk.

Here are links to some products which feature the ability to code Java applets using Smalltalk:

Mercury

Mercury is an amazing new logic programming language. Information is available at the Mercury Project Site.

Java, and the Java Virtual Machine Language

Java (developed by James Gosling and others at Sun Microsystems) has enjoyed an enormous increase in popularity recently. Like C++, Java is an object-oriented language based on C (but Java is not a superset of C). Java features strong typing, run-time garbage collection, concurrency and threads, references instead of C-style pointers, and an elegant interface mechanism to provide benefits of multiple inheritance but without some of the headaches multiple inheritance can cause.

Java programs are frequently compiled into Java Virtual Machine Language; Java Virtual Machines may be embedded in Web browsers or directly in hardware (Sun's Picojava chips). Much of the fame and application of Java comes from the embedded JVM's in web browsers, which enable users to download applets from servers and run them on their own machines. An interesting feature of JVM code was the development of algorithms which prove that the JVM code is safe; JVM code that cannot be proven to be safe is never run.

Java code can be either compiled to JVM bytecode, or in principle to native machine code. On the other hand, other languages can be compiled to JVM bytecode as well, notably Ada, Lisp, and Smalltalk. Thus, one can write Java applets without Java! See this list of programming languages for the Java Virtual Machine for more examples.

C++

C++, developed by Bjarne Stroustrup, is an object-oriented extension to C. A much, much bigger language than C, C++ remains a for the most part a true superset of C. C++ can be quite challenging, but if used carefully can provide excellent performance; I've come to believe that this language is rewarding to use and study. The Standard Template Library is considered by many to be a masterpiece of design and implementation; make good use of it.

Bjarne Stroustrup's website has many useful and informative links.

A useful tutorial can be found here.

C#

More or less, Microsoft's anti-Java. Useful for some programming in Microsoft's so-called .NET platform; perhaps someone will produce C# compilers for other platforms.
Personal opinion: don't waste time with C#; for number crunching and simulation, stick with Fortran (77, 90, or 95), C, or C++ (with its remarkable Standard Template Library).

Assembler

Programming in the assembly language of your machine can probably give you the fastest execution speed you'll ever get. Unfortunately, assembler programming is widely considered tedious and error-prone. It certainly lacks in portability. For assembler advocacy and useful information, see The Art of Assembly Language, an online book by Randall Hyde.
Useful links for UNIX/Linux programmers:

At least one book, Linux Assembly Language Programming, by Bob Neveln, (Prentice Hall, Open Source Technology Series) has been published.

For those Linux programmers using assembly language on an Intel platform, the Intel technical information site is very useful. Note that the mnemonics used by Intel are not the same as those used by all assemblers, though there is not usually a big difference.


Disclaimer and Commentary

Of course, language comparions inevitably involve some degree of subjectivity as well as aesthetic preference. I've only worked on projects involving very few people, and moreover I am neither a full-time programming professional nor a numerical analysis specialist. And I confess to not particularly liking the programming process for its own sweet sake! But like a lot of people, I do need to do programming frequently, both on projects where speed is paramount, and on those where programmer time is paramount.

For what it's worth, the tools I've found most useful have been the scripting languages, especially Matlab, S (or R), Mathematica, and Python. When a lower-level language is needed for some reason, I give clarity, readability, and simplicity very high priority. It's taken me a long time to learn the hard way that the languages and systems that are considered useful for professionals working in very large teams, or that are popular among clever hackers aren't necessarily well suited for the small, one-person simulation project or one-person web development project.

No one language suits all projects or all people, and as always about these things, your mileage may vary. I'm working on adding more detail to this page, and moving all evaluations and opinions to the lines marked "Personal opinion".


All content © 2000 Mathepi.Com (except R and Rweb).
About us.