old-www/HOWTO/Scientific-Computing-with-G.../devtools.html

575 lines
15 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML
><HEAD
><TITLE
>Code Development Tools</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
REL="HOME"
TITLE="Scientific Computing with Free software on GNU/Linux HOWTO "
HREF="index.html"><LINK
REL="PREVIOUS"
TITLE="Introduction"
HREF="intro.html"><LINK
REL="NEXT"
TITLE="Mathematics Packages"
HREF="mathpack.html"></HEAD
><BODY
CLASS="sect1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Scientific Computing with Free software on GNU/Linux HOWTO</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="intro.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="mathpack.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="devtools"
></A
>3. Code Development Tools</H1
><P
>&#13; 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.
</P
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="ProgLang"
></A
>3.1. Programming Languages</H2
><P
>&#13; Links are provided to various compilers used in Scientific
Computing like FORTRAN, C, C++, Java and more recently
Python.
</P
><P
></P
><UL
><LI
><P
>&#13; <A
HREF="http://gcc.gnu.org/"
TARGET="_top"
>GNU Compiler Collection
</A
>:
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,..).
</P
><P
>&#13; For manuals on using the various GCC compilers check out
<A
HREF="http://www.gnu.org/software/gcc/onlinedocs/"
TARGET="_top"
>&#13; The GCC online documentation</A
>
</P
></LI
><LI
><P
>&#13; <A
HREF="ftp://ftp.gnu.org/gnu/g77/index.html"
TARGET="_top"
>g77
</A
>:
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
<A
HREF="http://gcc.gnu.org/onlinedocs/g77/"
TARGET="_top"
>The Gcc Online
documentation</A
> site.
</P
></LI
><LI
><P
>&#13; <A
HREF="http://gcc.gnu.org/fortran/"
TARGET="_top"
>gfortran</A
>.
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.
</P
></LI
><LI
><P
>&#13; <A
HREF="http://g95.sourceforge.net"
TARGET="_top"
>g95</A
>.
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.
</P
></LI
><LI
><P
>&#13; <A
HREF="http://www.llnl.gov/casc/Overture/henshaw/install/node6.html"
TARGET="_top"
>&#13; fort77 and f2c</A
>:
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.
</P
></LI
><LI
><P
>&#13; <A
HREF="http://lush.sourceforge.net"
TARGET="_top"
>lush</A
>:
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.
</P
></LI
><LI
><P
><A
HREF="http://www.python.org/topics/scicomp/"
TARGET="_top"
>&#13; Scientific Python</A
>:
You may want to explore
<A
HREF="http://www.python.org"
TARGET="_top"
>Python</A
> 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).
</P
><P
>&#13; You can further explore Python for Scientific computing here:
</P
><P
></P
><UL
><LI
><P
>&#13; <A
HREF="http://starship.python.net/crew/hinsen/scientific.html"
TARGET="_top"
>&#13; Scientific-Python</A
>:
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
<A
HREF="http://starship.python.net/crew/hinsen/tutorial.ps"
TARGET="_top"
>&#13; Scientific Computing in Python</A
>.
</P
></LI
><LI
><P
>&#13; <A
HREF="http://www.scipy.org"
TARGET="_top"
>SciPy</A
> 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.
</P
></LI
></UL
></LI
></UL
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="DebugTool"
></A
>3.2. Debugging Tools</H2
><P
>&#13; 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.
</P
><P
></P
><UL
><LI
><P
><A
HREF="http://www.dsm.fordham.edu/~ftnchek"
TARGET="_top"
>Ftnchek:</A
>
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 <A
HREF="http://www.dsm.fordham.edu/~ftnchek/html/"
TARGET="_top"
>&#13; manual</A
> is available. This project is looking for volunteers
to bringing ftnchek up to the Fortran 90 standard.
</P
></LI
><LI
><P
> <A
HREF="http://www.gnu.org/software/gdb/gdb.html"
TARGET="_top"
>gdb
</A
>:
All programs written in the languages supported by GCC can be
debugged using <EM
>gdb</EM
>, 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
<A
HREF="http://sources.redhat.com/gdb/current/onlinedocs/"
TARGET="_top"
>Download
the document</A
> <EM
>Debugging with GDB</EM
> and
a quick reference card.
</P
></LI
><LI
><P
> <A
HREF="ftp://ftp.x.org/contrib/utilities/"
TARGET="_top"
>xxgdb:</A
>
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.
</P
></LI
><LI
><P
> <A
HREF="http://www.gnu.org/software/ddd/ddd.html"
TARGET="_top"
>DDD:
</A
>
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 <A
HREF="http://www.gnu.org/manual/ddd/"
TARGET="_top"
>&#13; DDD manual</A
> in postscript / HTML / PDF format.
</P
></LI
></UL
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="VCT"
></A
>3.3. Version Control Tools</H2
><P
>&#13; 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.
</P
><P
></P
><UL
><LI
><P
> <A
HREF="http://www.cvshome.org/dev/codelinux.html"
TARGET="_top"
>&#13; Concurrent Versions System </A
>:
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.
</P
><P
>&#13; A tutorial on CVS is available at <A
HREF="http://www.gentoo.org/doc/cvs-tutorial.html"
TARGET="_top"
>&#13; Gentoo Linux Documentation</A
> and a free CVS book is available
<A
HREF="http://cvsbook.red-bean.com/"
TARGET="_top"
>here</A
>
</P
></LI
><LI
><P
> <A
HREF="http://www.xcf.berkeley.edu/~jmacd/prcs.html"
TARGET="_top"
>&#13; Project Revision Control System </A
>:
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. </P
></LI
><LI
><P
><A
HREF="http://www.cryon.com/gbuild/"
TARGET="_top"
>Gbuild</A
> :
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.
</P
></LI
></UL
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="IDE"
></A
>3.4. Integrated Development Environments</H2
><P
>&#13; 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.
</P
><P
></P
><UL
><LI
><P
> <A
HREF="http://www.kdevelop.org/"
TARGET="_top"
> Kdeveloper </A
>:
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:
</P
><P
>&#13; 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.
</P
></LI
><LI
><P
> <A
HREF="http://vdkbuilder.sourceforge.net/"
TARGET="_top"
>VDKbuilder</A
>:
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.
</P
></LI
></UL
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="intro.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="mathpack.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Introduction</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Mathematics Packages</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>