
More mathematical epidemiology information to appear...
> 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
- Lahey Fortran full Fortran77,
90, and 95, for Linux and other platforms; links to software libraries, documents, and tutorials ("Fortran Resources").
- The Fortran Market
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.
- GNAT, originally the GNU/NYU Ada
Translator, is available free for a variety of platforms. I use both
Linux and FreeBSD ports of GNAT and they work very well. Windows ports are
also available.
- Object Ada by Aonix. More information
coming soon...
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.