old-www/LDP/LG/issue33/burtch.html

601 lines
21 KiB
HTML

<!--startcut ==========================================================-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>Gnat and Linux: C++ and Java Under Fire LG #33</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#A000A0"
ALINK="#FF0000">
<!--endcut ============================================================-->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<CENTER>
<H1><font color="maroon">Gnat and Linux: C++ and Java Under Fire</font></H1>
<H4>By <a href="mailto:ken@tiamet.vaxxine.com">Ken O. Burtch</a></H4>
</center>
<P> <HR> <P>
<CENTER>
<FONT SIZE=-1><U>Quick Index</U>: <A HREF="#Newer">Newer than Java </A>/
<A HREF="#Under">Gnat: gcc understands Ada</A> / <A HREF="#Features">Features
and Compatibility</A> / <A HREF="#Install">Installation</A> / <A HREF="#Avail">Availability
and Commercial Support</A> / <A HREF="#Java">Java Byte Code and Distributed
Processing</A> / <A HREF="#Gripes">Gripes</A> / <A HREF="#Recommend">Recommendations</A>
</center>
<BR>
<HR WIDTH="100%">
<P><FONT SIZE=-1>Long sessions.</FONT>
<BR><FONT SIZE=-1>Awkward environments.</FONT>
<BR><FONT SIZE=-1>Convoluted rules.</FONT>
<BR><FONT SIZE=-1>Missile guidance systems.</FONT>
<P><FONT SIZE=-1>This is the computer language that many people know as
Ada. Today's Ada looks more like Inprise's Delphi than its caveman ancestor,
and soon will produce Java applets that you can drop into your web sites.
However, does it stack up against other languages available for Linux?</FONT>
<BR>&nbsp;
<H3>
<HR WIDTH="100%"><A NAME="Newer"></A><FONT SIZE=-1>Newer than Java</FONT></H3>
<FONT SIZE=-1>The new Ada standard is known as Ada 95. Two years younger
than Java, this is the first object-oriented programming language to be
internationally standardized. This means that all Ada compilers and their
libraries should work exactly the same on any operating system, giving
Linux programmers an extra level of portability.</FONT>
<P><FONT SIZE=-1>C++ is the de facto standard for Linux programming. After
all, the kernel itself is written in C. However, C++ is not suitable for
all kinds of projects because different computer languages have different
strengths and weaknesses. Ada was designed for team development and embedded
systems, leading to advantages over C in development time and debugging.
An in-depth 1995 study by Stephen F. Zeigler (http://sw-eng.falls-church.va.us/AdaIC/docs/reports/cada/cada_art.html)
showed that development in Ada costs about half that of C++. It also suggests
that Ada produces "almost 90% fewer bugs for the final customer".</FONT>
<P><FONT SIZE=-1>The test bed compiler for Ada 95 was gnat.</FONT>
<BR>&nbsp;
<H3>
<HR WIDTH="100%"><A NAME="Under"></A><FONT SIZE=-1>Gnat: gcc understands
Ada</FONT></H3>
<FONT SIZE=-1>The Ada compiler produced by Ada Core Technologies (ACT),
gnat is available for free for Linux. Gnat is also available for other
platforms, including Sun Solaris, Silicon Graphics, DEC Alpha and Microsoft
Windows.</FONT>
<P><FONT SIZE=-1>Gnat was developed closely with gcc, the native C
compiler for Linux. Unlike some compilers that translate a program into
C and then feed the C program into gcc, gcc has built-in support for the
Ada language. Like g++, gnat works with with gcc, allowing
it to produce fast, quality executables without any intermediate steps.</FONT>
<P><FONT SIZE=-1>This integration gives a lot of flexibility to programmers
who want or need to support multiple languages. Gnat has an extensive set
of features for trading variables and function calls between Ada and C/C++.
It can import C/C++ items into Ada, export Ada items to C/C++. You can
also link Ada functions indirectly into Java, using Java's ability to import
C++ functions.</FONT>
<P><FONT SIZE=-1>Gnat comes with over 140 standard libraries. These include
numeric and string libraries, file operations, hash tables and sorts. If
you would rather work directly with Linux C libraries, a variety of "binding"
libraries exist, available for download from the Public Ada Library or
The Home of the Brave Ada Programmers. These include bindings for POSIX
(that is, the kernel), X Windows, Motif, TCL and WWW CGI applications.</FONT>
<P><FONT SIZE=-1>Although gnat is distributed under the GPL license, gnat
and its libraries may be used in commercial applications.</FONT>
<BR>&nbsp;
<H3>
<HR WIDTH="100%"><A NAME="Features"></A><FONT SIZE=-1>Features and Compatibility</FONT></H3>
<FONT SIZE=-1>Last year I ran some simple time trials on gnat, the Java
Development Kit, and gcc.</FONT><p>
<CENTER><I><U><FONT SIZE=-1>Language Performance Comparision</FONT></U></I></CENTER>
<CENTER><I><FONT SIZE=-1>(Pentium 90, 10 million iterations, results in
CPU Seconds)</FONT></I></CENTER>
<CENTER>&nbsp;</CENTER>
<TABLE BORDER CELLPADDING=7 WIDTH="696" >
<TR>
<TD VALIGN=TOP><FONT SIZE=-1></FONT></TD>
<TD><B><FONT SIZE=-1>Java</FONT></B></TD>
<TD><B><FONT SIZE=-1>Ada</FONT></B></TD>
<TD><B><FONT SIZE=-1>C</FONT></B></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1></FONT></TD>
<TD><FONT SIZE=-1>JDK 1.0.1&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>gnat 3.09&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>gcc 2.7.2.1</FONT></TD>
</TR>
<TR>
<TD><B><FONT SIZE=-1>Test</FONT></B></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Constant assignment&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>20.68&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.36&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.23</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Long Int assignment&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>20.88&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.35&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.22</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Long Int multiply&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>29.50&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.38&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.23</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Array access&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>24.52&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.64&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.23</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Function Calls&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>15.63&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>1.07&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.22</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Strings Concatenation&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>19.29&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>0.35&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>2.75</FONT></TD>
</TR>
</TABLE>
<FONT SIZE=-1></FONT>
<P><FONT SIZE=-1>Gnat performed well against gcc. Inspite of gnat's extensive
run-time error checks, the test programs ran on average only a third slower
than gcc. With these checks disabled, you should get performance comparable
with C. As an interpreted language, Java ran several times slower than
either Ada or C.</FONT>
<P><FONT SIZE=-1>The following table presents a summary of some common
features, compared with others languages (including Delphi):</FONT><p>
<CENTER><FONT SIZE=-1>&nbsp;<I><U>Summary of Common Features</U></I></FONT></CENTER>
<FONT SIZE=-1></FONT>&nbsp;
<TABLE BORDER CELLPADDING=7 WIDTH="696" >
<TR>
<TD VALIGN=TOP><B><FONT SIZE=-1></FONT></B></TD>
<TD><B><FONT SIZE=-1>C++&nbsp;</FONT></B></TD>
<TD><B><FONT SIZE=-1>Java&nbsp;</FONT></B></TD>
<TD><B><FONT SIZE=-1>Ada&nbsp;</FONT></B></TD>
<TD><B><FONT SIZE=-1>Delphi</FONT></B></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>&nbsp;<B>Feature</B></FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Objects &amp; Classes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>16-bit Characters&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Short Circuiting&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Overloading&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>some*&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>*no infix operators</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Inlining&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Built-in Multithreading&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes*&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>*has 2 kinds</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Multiple Inheritance&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>interfaces&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Polymorphism&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Private fields&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Built-in Distributed Processing&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO+&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes*&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>*requires free add-on&nbsp;</FONT>
<BR><FONT SIZE=-1>+not built-in, uses a class</FONT></TD>
</TR>
<TR>
<TD VALIGN=TOP><FONT SIZE=-1>Garbage Collection&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>NO&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes*&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>yes&nbsp;</FONT></TD>
<TD><FONT SIZE=-1>*not implemented by gnat</FONT></TD>
</TR>
</TABLE>
<FONT SIZE=-1>&nbsp;</FONT><p>
<p><FONT SIZE=-1>As you can see, Ada holds its own against Java.</FONT>
<H3>
<HR WIDTH="100%"><A NAME="Install"></A><FONT SIZE=-1>Installation</FONT></H3>
<FONT SIZE=-1>Because gnat is integrated with gcc, the gnat binaries are
compiled for a specific version of gcc and will only work with that version.
The latest public version from ACT is 3.10p, which has been compiled for
gcc 2.7.2.1. If you have this version, the installation program allows
you to install gnat directly on your system. This will overwrite your copy
of gcc with one that has Ada support enabled.</FONT>
<P><FONT SIZE=-1>If you don't have gcc 2.7.2.1, you can specify a separate
directory where gnat will install itself and its personal copy of gcc 2.7.2.1.
To make gnat available, you have to perform two additional steps:</FONT>
<OL>
<LI>
<FONT SIZE=-1>The installation program creates a shell script containing
environment variables that you can copy to your shell startup script (under
bash, this is your .profile file). Gnat uses these variables to locate
important files.</FONT></LI>
<LI>
<FONT SIZE=-1>Include the gnat directory in the front of your path to prevent
gnat from using the gcc that came with your Linux distribution. (Only do
this when you want to run gnat.)</FONT></LI>
</OL>
<FONT SIZE=-1>When I attempted to install gnat on RedHat, I ran into a
number of problems. According to ACT, they are aware of the problems of
running gnat under RedHat and instructions on how to get it working are
found in the gnat chat and comp.lang.ada archives. Nevertheless, ACT says
they will be releasing a RedHat 5.1 compatible public version of gnat in
the relatively near future.</FONT>
<P><FONT SIZE=-1>Once you have the binaries installed, the more adventuresome
can recompile gnat for their version gcc:</FONT>
<OL>
<LI>
<FONT SIZE=-1>You need a copy of the gcc sources in order to build a copy
of gcc that's compatible with gnat. These should be available with your
Linux distribution. The minimum version is 2.7.2.</FONT></LI>
<LI>
<FONT SIZE=-1>Download a copy of the gnat sources, which are available
for download from the gnat download site and its mirrors.</FONT></LI>
<LI>
<FONT SIZE=-1>Recompile gcc and gnat. Make sure you follow gcc's instructions
for activating Ada support.</FONT></LI>
</OL>
<FONT SIZE=-1>&nbsp;</FONT>
<H3>
<HR WIDTH="100%"><A NAME="Avail"></A><FONT SIZE=-1>Availability and Commercial
Support</FONT></H3>
<FONT SIZE=-1>The compiler sources and executable for the general public
are available for free from <A HREF="ftp://cs.nyu.edu/pub/gnat">ftp://cs.nyu.edu/pub/gnat</A>
and its mirrors.</FONT>
<P><FONT SIZE=-1>Similar to Samba, ACT can provide comprehensive commercial
support, but it costs several thousand dollars. The support includes priority
bug fixes and the latest version of gnat (compiled against whatever version
of gcc you are using). The commercial support is not strictly required
for serious projects for the same reason that Samba isn't. Technical assistance
is available on the Internet, and since the compiler adheres to the international
standard and has been well-tested, the public release is as well-built
and reliable as gcc itself. The commercial support is aimed at substantial
projects that need high level support, such as projects critical to the
success of a business or department.</FONT>
<P><FONT SIZE=-1>Gnat comes with extensive documentation in HTML format
that you can browse with lynx or Netscape. This includes complete coverage
of all of gnat's unique features and options. Unfortunately, no tutorial
for Ada is included.</FONT>
<BR>&nbsp;
<H3>
<HR WIDTH="100%"><A NAME="Java"></A><FONT SIZE=-1>Java Byte Code and Distributed
Processing</FONT></H3>
<FONT SIZE=-1>In the past year, ACT announced that their next release of
gnat would be able to produce not only executable programs but Java executables
(called "byte code") as well. A gnat program will be able
to run on any Java interpreter, such as web site applets running under
a Java-enabled browser. This gives Linux web programmers an alternative
to using the Java.</FONT>
<P><FONT SIZE=-1>ACT also provides a free gnat add-on called "Glade", which
enables Ada 95's built-in distributed processing support. Programs using
Glade can work with each other transparently over a network.</FONT>
<P><FONT SIZE=-1>&nbsp;</FONT>
<H3>
<HR WIDTH="100%"><A NAME="Gripes"></A><FONT SIZE=-1>Gripes</FONT></H3>
<FONT SIZE=-1>I came across a few problems while working with gnat.</FONT>
<P><FONT SIZE=-1>When testing gnat, I found a minor problem related to the
<I>normalize_scalers</I> pragma. This is a compiler directive
that helps to detect variables used before they are initialized. The directive
worked fine except in a package containing object definitions. All other
language features I tested appeared to work properly under Linux, including
multitasking.</FONT>
<P><FONT SIZE=-1>Gnat's executables can be several times the size of a
gcc executable. Gnat provides compiler directives to reduce a program's
size, but if a small footprint is an important issue, you may want to avoid
gnat.</FONT>
<P><FONT SIZE=-1>Gnat also lacks an IDE, but this is a common problem for
Linux languages.</FONT>
<P><FONT SIZE=-1>My biggest complaint isn't with the language: it's ACT's
uneven customer support. Although I've always received prompt replies from
ACT, they are not always courteous or helpful, and I've often been more
frustrated than enlightened.</FONT>
<P><FONT SIZE=-1>Once I went to my local photocopy shop to make copies
of the gnat manual, and they refused because the manuals contain a copyright
notice. I emailed ACT and they were quick to respond that the copyright
notice would be changed in the next edition. It's been over a year since
they updated their FTP site, and I'm still waiting to see this simple
change.</FONT>
<P><FONT SIZE=-1>On another occasion, my software company was investigating
gnat's suitability as a development platform for Linux. As far as we knew,
ACT could have been run out of Robert Dewar's basement. We wanted to know
that there would be future releases of gnat before we committed
ourselves to developing a software base and suffer the stigma of
programming in Ada. At first we were told we shouldn't consider developing
in gnat unless we had their commercial suppport. Then we were told that
they wouldn't provide commerical support for a fledgling company like
ourselves. If ACT would have given us a straight answer on the commercial
support, told us that we would still be supported on a non-priority
basis, and wished us luck on our future endevours, we would have been
more than happy. Instead, we felt that they had been dishonest with us and then
told that we were dirt when we had gone out on a limb to consider gnat
in the first place.</FONT>
<p><FONT SIZE=-1>No company should be rude or disrespectful to its clients.
They deserve straight-forward answers, timely fixes, and a "please" and
"thank you" now and then to show their interest is appreciated.</FONT>
<BR>&nbsp;
<H3>
<HR WIDTH="100%"><A NAME="Recommend"></A><FONT SIZE=-1>Recommendations</FONT></H3>
<FONT SIZE=-1>Without a doubt, gnat holds its own against other Linux development tools.
I would recommend gnat and Ada for the following:</FONT>
<UL>
<LI>
<FONT SIZE=-1>Any project requiring a team environment, multiple computer
languages or high accuracy. Ada excels over C++ and Java on these issues.</FONT></LI>
</UL>
<UL>
<LI>
<FONT SIZE=-1>It is a cost-effective alternative for universities and colleges.
Ada's strong structure, rich features and easy to read syntax make it ideal
for introductory courses in computer science.</FONT></LI>
</UL>
<UL>
<LI>
<FONT SIZE=-1>Anybody who's more comfortable using a Pascal-style language,
such as a Delphi or BASIC programmer new to the world of Linux.</FONT></LI>
</UL>
<FONT SIZE=-1>Also, anybody doing Java development for Linux should investigate
the next release of gnat.</FONT>
<P><FONT SIZE=-1>Robert Dewar, the head of ACT, assured
me that "ACT is committed to providing high quality Ada 95 products for
Linux. We have a number of serious Ada users using Linux today, and we
intend to continue to serve the Linux market for such users."</FONT>
<P><FONT SIZE=-1>When speaking of Linux's exponential growth over the last
two years, Mr. Dewar was quick to point out that the gnat Linux market
is currently small. ACT is not interested in promoting the Ada 95 standard.
They would rather spend their time improving their products and selling them
to the existing Ada markets. That the Linux
community has largely overlooked gnat is not surprising.</FONT>
<P><FONT SIZE=-1>The difference between a successful project and a failure can
often hinge upon choosing the right development tool for the job, and gnat
has a lot to offer. Gnat brings a versatile development environment to Linux,
an efficient compiler and a rich set of development tools, and that is
something the Linux community cannot ignore. Whether or not gnat has a
bright future in Linux is anybody's guess, but it would be a shame if a
high quality piece of free software should be overlooked. This is a lesson
that all Linux enthusiasts have learned very well.</FONT>
<BR>&nbsp;
<H3>
<HR WIDTH="100%"><A NAME="Resources"></A><B><FONT SIZE=-1>Resources</FONT></B></H3>
<U><FONT SIZE=-1>Web Sites</FONT></U>
<P><FONT SIZE=-1>Ada Core Technologies (ACT): <A HREF="http://www.gnat.com/">http://www.gnat.com</A></FONT>
<BR><FONT SIZE=-1>Ada Information Clearinghouse (AIC): <A HREF="http://sw-eng.falls-church.va.us/">http://sw-eng.falls-church.va.us/</A></FONT>
<BR><FONT SIZE=-1>Gnat FTP Site: <A HREF="ftp://cs.nyu.edu/pub/gnat">ftp://cs.nyu.edu/pub/gnat</A></FONT>
<BR><FONT SIZE=-1>Home of the Brave Ada Programmers (HBAP): <A HREF="http://www.adahome.com/">http://www.adahome.com</A></FONT>
<BR><FONT SIZE=-1>Public Ada Archive (PAL): <A HREF="http://www.wustl.edu/">http://www.wustl.edu</A></FONT>
<BR><FONT SIZE=-1>Samba: <A HREF="http://samba.anu.edu.au/samba/">http://samba.anu.edu.au/samba/</A></FONT>
<P><U><FONT SIZE=-1>Books</FONT></U>
<P><FONT SIZE=-1><U>Professional Java Fundamentals</U>. Cohen, Shy et al.
Wrox Press, 1996.</FONT>
<BR><FONT SIZE=-1><U>Programming in Ada 95</U>. Barnes, John. Addison Wesley,
1996.</FONT>
<BR><FONT SIZE=-1><U>C++ for Professional Programmers</U>. Blaha, Stephen.
Int'l Thomson Computer Press, 1995.</FONT>
<BR>&nbsp;
<H3>
<!--===================================================================-->
<P> <hr> <P>
<center><H5>Copyright &copy; 1998, Ken O. Burtch <BR>
Published in Issue 33 of <i>Linux Gazette</i>, October 1998</H5></center>
<!--===================================================================-->
<P> <hr> <P>
<A HREF="./index.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif"
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../index.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./nelson.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./gm.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P>
<!--startcut ==========================================================-->
</BODY>
</HTML>
<!--endcut ============================================================-->