416 lines
14 KiB
Plaintext
416 lines
14 KiB
Plaintext
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
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
1. Introduction
|
||
|
||
1.1 Latest Version of the Document
|
||
1.2 Copyright
|
||
1.3 License
|
||
1.3.1 Requirements of Modified Works
|
||
1.4 Disclaimer
|
||
1.5 Author
|
||
1.6 Credits
|
||
1.7 Links
|
||
|
||
2. Programming Languages
|
||
|
||
2.1 Concepts in the Table
|
||
2.2 Major Languages
|
||
2.3 Shell Programming
|
||
2.4 Other Languages
|
||
2.5 Links
|
||
|
||
3. GUI Toolkits
|
||
|
||
3.1 Concepts in the Table
|
||
3.2 Major GUI Toolkits
|
||
3.3 Links
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. 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.
|
||
|
||
1.1. Latest Version of the Document
|
||
|
||
You can find the latest modifications at
|
||
http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/
|
||
<http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/>
|
||
|
||
1.2. Copyright
|
||
|
||
Copyright (c) 2000 Risto Varanka.
|
||
|
||
1.3. 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.
|
||
|
||
1.3.1. Requirements of Modified Works
|
||
|
||
All modified documents, including translations, anthologies, and
|
||
partial documents, must meet the following requirements:
|
||
|
||
|
||
1. The modified version must be labeled as such.
|
||
|
||
2. The person making the modifications must be identified.
|
||
|
||
3. Acknowledgement of the original author must be retained.
|
||
|
||
4. The location of the original unmodified document be identified.
|
||
|
||
5. 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:
|
||
|
||
|
||
1. The modifications (including deletions) be noted.
|
||
|
||
2. 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.
|
||
1.4. 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.
|
||
|
||
1.5. Author
|
||
|
||
You are welcome to send feedback to the author at:
|
||
risto.varanka@helsinki.fi <mailto:risto.varanka@helsinki.fi>.
|
||
|
||
Author's web site can be found at http://www.helsinki.fi/~rvaranka/
|
||
<http://www.helsinki.fi/~rvaranka/>.
|
||
|
||
1.6. 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.
|
||
|
||
1.7. Links
|
||
|
||
Exhaustive lists of Linux development libraries and tools:
|
||
|
||
|
||
<20> Freshmeat <http://www.freshmeat.net/appindex/development/>
|
||
|
||
<20> Linux Development Tools <http://www.hotfeet.ch/~gemi/LDT/>
|
||
|
||
<20> linuxprogramming.com <http://www.linuxprogramming.com/>
|
||
|
||
The Hacker FAQ <http://www.tuxedo.org/~esr/faqs/hacker-howto.html> 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 <http://www.linuxdoc.org/> covering general
|
||
programming subjects include the Reading List HOWTO and the Linux
|
||
Programmer's Guide - several more have been written on specific
|
||
subjects.
|
||
|
||
2. 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.
|
||
|
||
2.1. 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.
|
||
|
||
|
||
2.2. 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:
|
||
|
||
|
||
|
||
2.3. 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.
|
||
|
||
2.4. Other Languages
|
||
|
||
Other languages of note: AWK, SED, Smalltalk, Eiffel, Ada, Prolog,
|
||
assembler, Objective C, Logo, Pascal (p2c converter)
|
||
|
||
|
||
|
||
2.5. Links
|
||
|
||
|
||
<20> A general info site <http://www.tunes.org/Review/Languages.html> on
|
||
programming languages, lots of info and opinions
|
||
|
||
<20> TCL <http://dev.scriptics.com/>
|
||
|
||
<20> Perl <http://www.perl.org/>
|
||
|
||
<20> Python <http://www.python.org/>
|
||
|
||
<20> PHP <http://www.php.net>
|
||
|
||
<20> Java <http://www.javasoft.com/>
|
||
|
||
<20> clisp <http://clisp.cons.org/~haible/packages-clisp.html>
|
||
|
||
3. 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.
|
||
|
||
3.1. 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.
|
||
|
||
|
||
3.2. Major GUI Toolkits
|
||
|
||
|
||
Library Beginner License Language Bindings Examples
|
||
TK Yes Free TCL Perl, Python, others make xconfig, TKDesk
|
||
GTK+ No Free (LGPL) C Perl, C++, Python, many others GNOME, Gimp
|
||
QT No Free for open source C++ Python, Perl, C, others? KDE
|
||
Motif No Non-free C/C++ Python, others? Netscape, Wordperfect
|
||
GNUstep No Free (LGPL) Objective C Guile, Java? None widely known, but see theapplication list <http://www.gnustep.org/resources/apps.html>
|
||
|
||
|
||
|
||
3.3. Links
|
||
|
||
|
||
<20> TK <http://dev.scriptics.com/>
|
||
|
||
<20> GTK+ <http://www.gtk.org/>
|
||
|
||
<20> QT <http://www.troll.no/>
|
||
|
||
<20> Motif <http://www.metrolink.com/>
|
||
|
||
<20> GNUstep <http://www.gnustep.org/>
|
||
|
||
|
||
|