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/>
|
|||
|
|
|||
|
|
|||
|
|