This work deals extensively with the development of methods and standards and their implementation on computer hardware. For this purpose different programming languages have been used.
C++
The C++ programming language was developed as an enhancement to the C programming language called "C with classes" in 1979 by Bjarne Stroustrup at the Bell Laboratories[68]. In 1983 is was renamed to C++.
C++ is a general purpose compiled language which means that it can be used to write arbitrary computer programs and that the program code
PROGRAMMING LANGUAGES 21
written as text (source code) by the developer is compiled into a form (ex- ecutable binary) that can be processed by the computers central processing unit (CPU).
For the compilation of C++ programs, another computer program, a so called compiler, is needed.
The C++ programming language has been standardized in 1998 and since the standard is open, everyone that is interested can implement a standard compliant C++ compiler.
As the language as well as the standard have existed for many years now they are very mature and many high quality compilers, commercial as well as non-commercial, are available for the different operating systems.
Its maturity and the availability of a number of high quality C++ compilers on almost all operating systems, was the reason that C++ was chosen as the main programming language for the implementation of COPASI[69].
The first implementations of libsbml[70], a library for reading SBML doc- uments, were based on the C programming language, but recent versions are also implemented using the C++ programming language.
Not all compilers exist for all operating systems and even if some compiler is available for a number of operating systems, it is not guaranteed that the code generated on all operating systems has the same quality. Due to these reasons several different compiler from different compiler manufacturers have been used for this work.
For the Windows operating system, C++ developers have a choice of several free and commercial compilers. Free compiler used to compile code under Windows were the GNU Compiler Collection (GCC)[71] as well as different versions (2008, 2010) of Microsoft Visual C++ Studio Express[72]. As a commercial compiler, the Intel C++ compiler[73] was used because it can sometimes provide executable binaries that run faster than the binaries build with GCC or Visual C++.
On Mac OS X, GCC is pre-installed and was used to compile most of the C++ code on that platform. Occasionally the commercial Intel C++ compiler was used to get executable binaries with improved speed as well as to cross check for potential errors in the code.
Under Linux and Solaris, the GCC compilers were used as a default. Oc- casionally the free C++ compiler from Sun[74] or the commercial C++ compiler from Intel was used. Especially when cross checking for errors in the code.
Java
The Java programming language is an interpreted general programming lan- guage developed in 1995 by James Gosling at Sun Microsystems[75]. The syntax of the language is based on C++, but several language elements have been dropped or modified to make the language less complex.
In contrast to C++ source code, Java source code is usually not compiled to a binary executable that can be directly interpreted by the CPU, but to an intermediate byte code that needs to be interpreted by a so called Java virtual machine (JavaVM or JVM). This is done by a Java compiler. The JVM finally translates the intermediate byte code into code that can be executed by the CPU. This translation is usually done by a Just-in-time (JIT) compiler which for some source code can provide almost the same speed as a program written in e.g. C++.
Java is not a standardized language and Sun Microsystems (now owned by Oracle) determines the direction of the development of the language.
There are several implementations of Java compilers and Java virtual machines.
For the most common operating systems like Windows and Linux these are provided by Sun/Oracle. Since support for other operating systems is not directly provided by Sun/Oracle, support on these operating systems usually is several versions behind the latest stable version released by Sun/Oracle and sometimes doesn’t provide the same level of quality and compliance to the Java specification.
Apple provides a version of the Java compiler and the virtual machine with Mac OS X, but it usually lags behind the current implementation by Sun/Oracle.
Today Java is widely used for writing programs in the scientific community[31, 76, 77], especially with respect to client/server programming.
The Java programming language has been used in this work to write the Java language bindings for the implementation of the SBML Layout and Render Extension in the different versions of libsbml as well as to implement the Java bindings for the COPASI API.
Python
Python is a general purpose, high level scripting language developed by Guido van Rossum in the late 1980s, early 1990s[78].
Scripting languages are similar to Java in so far as the source code is not compiled to a binary that is interpretable by the CPU, but a so called
PROGRAMMING LANGUAGES 23
interpreter takes the source code and translates it to code that the CPU can process. This translation is done each time the program is run. Sometimes an intermediate binary file that is easier to interpret is created in the process. The main advantage of scripting languages like Python is their ease of use compared to compiled languages like C++. The program does not have to be compiled, but the source code is directly executed in the interpreter. Since scripting languages are usually high level languages, they provide the user with sophisticated constructs that allow the development of programs with less code in less time.
Due to the fact that the program code has to be interpreted each time the program is run, the increase in flexibility and ease of use comes at the price of slower running times of the programs. So scripting languages like Python are mostly used for programs where execution time is not an important factor.
Due to its relatively simple syntax, Python has gained a lot of support over time and is widely used in the scientific community[79, 80, 81, 82].
The Python programming language has been used in this work to write the Python language bindings for the implementation of the SBML Lay- out and Render Extension in the different versions of libsbml as well as to implement the Python bindings for the COPASI API.
Perl
Perl[83] is another general purpose, high level scripting language developed by Larry Wall in 1987. It is very similar in scope to Python and shares the same advantages and disadvantages. It is also widely used in the scientific community, e.g. BioPerl[84].
The Perl programming language has been used in this work to write the Perl language bindings for the COPASI API.
GNU Octave
GNU Octave[85] is a free clone of the Matlab[86] numerical computing envi- ronment. It includes a general purpose, high level scripting language with a strong emphasis on mathematical methods and concepts and it comes with a user interface for the display of graphical output and numerical results.
Octave in its current form was started in 1992 by John W. Eaton and is now developed by a number of volunteers under the GNU aegis.
Although it is not 100% compatible with Matlab, it can replace the com- mercial program for many tasks.
The Octave programming language has been used in this work to write the Octave language bindings for the COPASI API.
the R programming language
The R programming language[87] is also a general purpose, high level script- ing language but with a strong emphasis an statistical computing and graph- ics.
R is an implementation of the S programming language originally devel- oped by John Chambers at the Bell Laboratories[88].
Ross Ihaka and Robert Gentleman implemented R in 1993. Today it is developed by a team of developers under the GNU aegis.
The R programming language has been used in this work to write the R language bindings for the COPASI API.