3. Code Development Tools
Code development consists of mainly Programming languages,
Debugging tools, Version Management tools, Compiling tools,
and Integrated Development Environments (IDEs) where all
the above are coupled as a single software application.
3.1. Programming Languages
Links are provided to various compilers used in Scientific
Computing like FORTRAN, C, C++, Java and more recently
Python.
GNU Compiler Collection
:
GNU's project to produce a world class optimizing compiler.
It works on multiple architectures and diverse environments.
Currently GCC contains front ends for C, C++, Objective C,
GNU Fortran-95, Java, and Ada, as well as libraries for these languages
(libstdc++, libgcj,..).
For manuals on using the various GCC compilers check out
The GCC online documentation
g77
:
The GCC front end for FORTRAN 77. It is a very good FORTRAN77
compiler. It however does not have the -r8 option which compiles
a program as double precision. This could be a good compiler
design philosophy but in many cases gives problems when porting
a code from SUN / DEC / HP workstations onto Linux systems.
The g77 manual is available at
The Gcc Online
documentation site.
gfortran.
I was happy to receive this link by mail. It was 3 years since I had
migrated to using the GNU C compiler for scientific computing because
there was no "truly free" FORTRAN-95 compiler available then. I thank
Paul Thomas for this link.
g95.
gfortran above and g95 are reportedly offshoots from the same CVS tree.
Has an impressive list of programs that compiles and runs using this
compiler.
fort77 and f2c:
fort77 is a perl program which invokes the f2c command
(a Fortran to C translator) transparently, so it can
be used just like a real Fortran compiler. Fort77 can
be used to compile Fortran, C and assembler code and
can link the code with f2c libraries. If you install
fort77, you'll also need to install the f2c package.
This does not have the "-r8" problem. You can download
fort77 and f2c from the above link.
lush:
An object-oriented programming language, which combines the flexibility
of an interpretive language, with the efficiency of a compiled language.
It has full interfaces to numerical libraries (GSL, LAPACK, BLAS),
graphics libraries (OpenGL), which allows creation of graphics and 3D
animations and many other features that sound too good to be
true. I have not yet tried this out, but it sounds very promising.
Scientific Python:
You may want to explore
Python for your
scientific computing needs. Python is an interpreted,
interactive, object-oriented programming language.
It has a number of extensions for numerics, plotting,
data storage and combined with Tk lets you develop very
good GUIs for your codes. The most exciting aspect is that
it simplifies programming because it has modules for almost
anything (vectors, tensors, transformations, derivatives,
linear algebra, Fourier transforms, statistics, etc ...) are
available. You can also wrap C and Fortran libraries from
Python. Finally if you want to write a numerical scheme of
your own you may find that it is simpler in Python.
There are also interfaces to netCDF (portable binary files),
MPI and BSPlib (parallel programming).
You can further explore Python for Scientific computing here:
Scientific-Python:
A collection of modules for scientific computing on Python.
All the necessary modules can be downloaded as either a tar file
or an RPM file from here. The maintainer Konrad HINSEN also has
a nice tutorial on
Scientific Computing in Python.
SciPy An open source
library of scientific tools for Python. It includes modules for
graphics and plotting, optimization, integration, special
functions, signal and image processing, genetic algorithms,
ODE solvers, etc.
3.2. Debugging Tools
In this section links are given to mainly debugging tools for GCC and
FORTRAN. I understand that python has a debugging module built in though I
have not used it. The purpose of a debugger is to allow you to see what is
going on inside a program while it executes or what the program was doing
when/if it crashed.
Ftnchek:
A FORTRAN checker designed to detect errors in a Fortran
program that a compiler usually does not. Therefore it is best
to run ftnchek on your FORTRAN programs after it has compiled
without errors. Its purpose is to assist the user in finding
semantic errors. Semantic errors are legal in the Fortran
language but are wasteful or may cause incorrect operation.
An on-line
manual is available. This project is looking for volunteers
to bringing ftnchek up to the Fortran 90 standard.
gdb
:
All programs written in the languages supported by GCC can be
debugged using gdb, an excellent interactive,
command line debugger. You can compile your programs using a -g option
which then compiles your code with debugging information inserted
into the executable. It can start your programs, stop your programs
on specified conditions and at specified locations, examine what
happened when your program stops. In a large code with multiple
cascading calls to various functions it can back trace the function
calls. You can also
Download
the document Debugging with GDB and
a quick reference card.
xxgdb:
It is a front end to the gdb debugger. Useful for beginners
to gdb as it lists out the whole gdb commands as buttons with a area
for viewing source on which one can include break points, etc by a
click of the mouse, and another area for viewing the debugging results.
DDD:
The GNU Data Display Debugger, GNU DDD, is a graphical front-end for
command-line debuggers such as GDB, DBX, WDB, Ladebug, JDB, XDB, the
Perl debugger, or the Python debugger. Besides ``usual'' front-end
features such as viewing source texts it also has a good interactive
graphical data display, where data structures are displayed as graphs.
Follow this link for a
DDD manual in postscript / HTML / PDF format.
3.3. Version Control Tools
It will be worth your while investing some time in learning to use
one of the version control tools below (cvs is what I use ..) if you
are into any serious code development.
Concurrent Versions System :
CVS is one of the most popular version control systems running on the
Linux operating system. Popular Linux projects like Apache, EGCS, GIMP,
and others are using CVS to coordinate their efforts ... This is how
the URL linked above describes their effort.
A tutorial on CVS is available at
Gentoo Linux Documentation and a free CVS book is available
here
Project Revision Control System :
PRCS, the Project Revision Control System, is the front end to a set of
tools that (like CVS) provide a way to deal with sets of files and
directories as an entity, preserving coherent versions of the entire set.
PRCS was designed primarily by Paul N. Hilfinger, with input and
modifications by Luigi Semenzato and Josh MacDonald. PRCS is written and
maintained by Josh MacDonald. Its purpose is similar to that of SCCS,
RCS, and CVS, but (according to its authors, at least), it is much simpler
than any of those systems. This page is where information on the latest
developments in PRCS can be found. Gbuild :
gbuild is a script written in the Bourne shell language to simplify
package maintenance by allowing you to automate code update from CVS,
compilation, building tar/rpms/srpms of your package. some external
scripts which certain functions of gbuild depend on are written in Perl.
gbuild is released under the GPL.
3.4. Integrated Development Environments
Integrated development environments (IDEs) can be very useful for
building code and ideally come with all the above tools (i.e a compiler,
a debugger and a version control tool). In addition to that IDEs also
usually provide a makefile generator, documenting help, online help
manuals, etc.
Kdeveloper :
A easy to use C/C++ IDE (Integrated Development Environment) for Linux.
It supports KDE/Qt, GNOME, plain C and C++ projects. This site has a lot
of documentation ..... a highly browsable site for software developers.
Specifically, KDevelop manages or provides:
All development tools needed for C++ programming like Compiler,
Linker, automake and autoconf; KAppWizard, which generates complete,
ready-to-go sample applications; Class generator, for creating new
classes and integrating them into the current project; File management
for sources, headers, documentation etc. to be included in the
project; The creation of User-Handbooks written with SGML and the
automatic generation of HTML-output with the KDE look and feel;
Automatic HTML-based API-documentation for your project's classes with
cross-references to the used libraries; Internationalization support
for your application, allowing translators to easily add their target
language to a project;
KDevelop also includes WYSIWYG (What you see is what you get)-creation
of user interfaces with a built-in dialog editor; Debugging your
application by integrating KDbg; Editing of project-specific pixmaps
with KIconEdit; The inclusion of any other program you need for
development by adding it to the "Tools"-menu according to your
individual needs.
VDKbuilder:
VDKbuilder is a tool that helps programmers in constructing GUI interfaces,
editing, compiling, linking, and debugging within an integrated environment.
Using VDKBuilder dramatically reduces developing time since all code related
to GUI construction and signal processing is automatically generated,
maintained and updated. It is distributed under the GNU Public License.
Visit the site for downloading the software.
|
|