Programming Languages mini-HOWTO
Risto S. Varanka
Jul 22nd 2000
A brief comparison of major programming languages for
Linux and major libraries for creating graphical user interfaces
(GUIs) under Linux
Introduction
Linux is a fascinating operating system because it lets any
user participate in its development. The variety of available
languages, however, can be confusing to beginning Linux
developers. This document lists the most common options for
everyday development and states some key facts about them. (Well,
``most common'' and ``key'' as I perceive them.)
My aim is neither to review the languages nor to determine
which one is the best. Each language is a tool that fits some
jobs and some tastes. You can get further (often conflicting)
information easily, if you ask around or keep your ears open. The
Links sections in this document will give you some pointers for
your own research.
There is a plethora of languages and libraries for Linux, so
this document only covers the most common languages and GUI
(Graphical User Interface) toolkits at the moment. This document
is intended to be fairly neutral, but I haven't included all
languages available. Since my judgment is undoubtedly biased in
many ways, I advise serious developers to check out the sites that
do a better job in listing all languages and libraries. Also note
that only the Linux implementations of the languages and GUI
toolkits are covered, their features on other platforms are not
discussed or implied.
This document is a recent addition to the LDP, so there has not
been opportunity for much community feedback. However, it is
released in hopes that it will prove useful for people interested
in programming under Linux, especially beginners. A question mark
in the tables indicates lack of information. If you can fill it
in, please contact the author.
Latest Version of the Document
You can find the latest modifications at http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/
Copyright
Copyright (c) 2000 Risto Varanka.
License
The following license terms apply to all LDP documents, unless
otherwise stated in the document. The LDP documents may be
reproduced and distributed in whole or in part, in any medium
physical or electronic, provided that this license notice is
displayed in the reproduction. Commercial redistribution is
permitted and encouraged. Thirty days advance notice via email to
the author(s) of redistribution is appreciated, to give the
authors time to provide updated documents.
Requirements of Modified Works
All modified documents, including translations, anthologies,
and partial documents, must meet the following requirements:
The modified version must be labeled as such.
The person making the modifications must be identified.
Acknowledgement of the original author must be retained.
The location of the original unmodified document be identified.
The original author's (or authors') name(s) may not be used to
assert or imply endorsement of the resulting document without
the original author's (or authors') permission.
In addition it is requested that:
The modifications (including deletions) be noted.
The author be notified by email of the modification in
advance of redistribution, if an email address is provided
in the document.
As a special exception, anthologies of LDP documents may
include a single copy of these license terms in a conspicuous
location within the anthology and replace other copies of this
license with a reference to the single copy of the license without
the document being considered ``modified'' for the purposes of
this section.
Mere aggregation of LDP documents with other documents or
programs on the same media shall not cause this license to apply
to those other works.
All translations, derivative documents, or modified documents
that incorporate any LDP document may not have more restrictive
license terms than these, except that you may require distributors
to make the resulting document available in source format.
Disclaimer
THIS DOCUMENT COVERS A LARGE AND CONSTANTLY CHANGING
DOMAIN. THEREFORE, THE INFORMATION CONTAINED IN THIS DOCUMENT MAY
BE INCORRECT OR OUTDATED. ALL USE OF THIS DOCUMENT AND ALL
INFORMATION CONTAINED IN IT IS AT YOUR OWN RISK. THE AUTHOR DOES
NOT GIVE ANY WARRANTY OR GUARANTEE, EITHER EXPLICIT OR
IMPLIED.
Author
You are welcome to send feedback to the author at: risto.varanka@helsinki.fi.
Author's web site can be found at http://www.helsinki.fi/~rvaranka/.
Credits
I am thankful to several people who commented on language
issues. These conversations have given me a better view of the
different languages, and I hope future conversations will allow
this mini-HOWTO to mature over time. Especially I would like to
thank the people at the IRCNet channel #linux: Morphy, Bluesmurf,
Vadim, Zonkˆ, Rikkus and others whose names I have
forgotten. Thanks go also to Stig Erik Sandoe for helpful
comments.
Links
Exhaustive lists of Linux development libraries and tools:
Freshmeat
Linux Development Tools
linuxprogramming.com
The Hacker FAQ by Eric S. Raymond is another interesting text
for novice Linux developers. It concentrates on some cultural and
psychological aspects of open source development.
Other LDP documents
covering general programming subjects include the Reading List
HOWTO and the Linux Programmer's Guide - several more have been
written on specific subjects.
Programming Languages
C, Lisp and Perl are traditional hacking languages in the
GNU/Linux culture; Python, PHP, Java and C++ have gained new
ground recently.
Concepts in the Table
Language
A common name of the language.
Beginner
Indicates how well suited the language is for
people with little programming experience. A language marked with
``yes'' should be viable for a beginner's first programming
language.
Performance
How fast your applications are likely to
run when you put them into production use. Performance depends
more on your algorithmic programming skills than the actual
language. As a rule of thumb, C, C++ and Fortran are sometimes
necessary because they can offer better performance than other
languages - at other times they might be unwieldy for the desired
purpose. (One idea for unscientific ``benchmarking'' of the
languages would be to implement a simple sorting algorithm in all
of them and compare running times. This of course does not measure
the performance of the actual language - since that concept does
not make sense - but only the implementation. Of course it's also
not a very reliable or thorough method, but it would give an
example how running times in different languages can
differ. Anybody want to help me with this?)
OOP, Object-Oriented Programming vs. other paradigms
Object-oriented programming is an important programming paradigm
that is gaining popularity. In object oriented programming, data
structures and algorithms are integrated into units, often called
classes. OOP is often contrasted with procedural programming
(which uses separate algorithms and data structures). It is not
strictly dependent on language: you can do OOP in languages not
listed as such (C for example), and program in the procedural
style in languages that are listed as OOP. I've listed as OOP
languages that have special features or add-ons to facilitate OOP.
Functional languages (Lisp for example) are a bit different breed
- among other things, functional programming is a superset of
OOP. Logic programming (Prolog), also called declarative
programming, on the other hand, is not related to the other types
of programming in a similar sense.
RAD, Rapid Application Development
More dependent on
the tools you are using than the actual language. There is a
HOWTO on GUI development tools for Linux, although it's out of
date. With a good graphical tool you can do RAD. RAD can be
powerful when based on code reuse as well, so free software could
provide a good starting point.
Examples
Mentions fields of programming the language is
most often used in. Other good (and bad) uses exist, but they are
less typical.
Comments
Additional information on the language, like
capacities and dialects.
Major Languages
Perl
Beginner: Yes - OOP: Yes
Examples: Scripting, sysadmin, www
Comments: Powerful for handling text and strings
Python
Beginner: Yes - OOP: Yes
Examples: Scripting, application scripting, www
Comments:
TCL
Beginner: Yes - OOP: No
Examples: Scripting, sysadmin, applications
Comments:
PHP
Beginner: Yes - OOP: Yes
Examples: Www
Comments: Popular for web databases
Java
Beginner: Yes - OOP: Yes
Examples: Cross-platform applications, www
Comments: Spreading to new areas, eg. e-commerce infrastructure
Lisp
Beginner: Yes - OOP: Functional
Examples: Emacs modes (for Elisp), AI
Comments: Variants Elisp, Clisp and Scheme
Fortran
Beginner: No - OOP: No
Examples: Mathematical (scientific) applications
Comments: Variants f77 and f90/95
C
Beginner: No - OOP: No
Examples: System programming, applications
Comments:
C++
Beginner: No - OOP: Yes
Examples: Applications
Comments:
Shell Programming
Shells are an important programming environment, too. I haven't
covered them because I don't understand the field very thoroughly
yet. Knowledge of shells is important for anyone who works on
Linux regularly, more so for system administrators. There are
similarities between shell programming and other kinds of
scripting - often they can achieve the same goals, and you have
the option of choosing between native shell and a separate
scripting language. Among the most popular shells are bash, tcsh,
csh, ksh and zsh. You can get basic information on your shell with
the man command, man bash for example.
Other Languages
Other languages of note: AWK, SED, Smalltalk, Eiffel, Ada,
Prolog, assembler, Objective C, Logo, Pascal (p2c converter)
Links
A general info site on programming languages, lots of info
and opinions
TCL
Perl
Python
PHP
Java
clisp
GUI Toolkits
The standard graphical subsystem for UNIX and Linux, called X,
has its own libraries for GUI development. They provide a
low-level programming interface to X, but tend to be hard to
use. Old end-user applications and other toolkits of course make
good use of them. Nowadays the Linux GUI scene is dominated by
GTK+ and Qt, since two popular, complete user environments - GNOME
and KDE - are based on them.
Concepts in the Table
Library
Common name or abbreviation of the toolkit.
Beginner
Whether the toolkit is suitable for a newbie programmer.
License
Different licenses for different GUI toolkits have practical
significance. GTK+, TK and GNUstep licenses allow you to develop both open
source and closed source applications without paying for a
license. Motif license requires payment, while the QT license
requires payment only if you write closed source programs.
Language
The language that is most often used with the toolkit.
Bindings
Other languages which can use the toolkit.
Examples
Applications that use the toolkit.
Comments
Additional information on the toolkit.
Major GUI Toolkits
Library
Beginner
License
Language
Bindings
Examples
Comments
TK
Yes
Free
TCL
Perl, Python, others
make xconfig, TKDesk
GTK+
No
Free (LGPL)
C
Perl, C++, Python, many others
GNOME, Gimp
Very popular
QT
No
Free for open source
C++
Python, Perl, C, others?
KDE
Very popular
Motif
No
Non-free
C/C++
Python, others?
Netscape, Wordperfect
Lesstif isa free replacement
GNUstep
No
Free (LGPL)
Objective C
Guile, Java?
None widely known, but see theapplication list
GNUstep is still under development
Links
TK
GTK+
QT
Motif
GNUstep