Programming Languages mini-HOWTO
 Risto S. Varanka, <[email protected]>
 v, 6 January 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 Copyright
    1.2 License
       1.2.1 Requirements of Modified Works
    1.3 Disclaimer
    1.4 Author
    1.5 Credits
    1.6 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 toolkits at the
 moment. Also note that the languages and GUI toolkits are seen from
 the Linux point of view, 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. A question mark in the tables indicates lack of
 information. If you can fill it in, please contact the author.



 1.1.  Copyright

 Copyright (c) 2000 Risto Varanka.

 1.2.  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.2.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.3.  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.4.  Author

 You are welcome to send feedback to the author at:
 [email protected] <mailto:[email protected]>.

 Author's web site can be found at http://www.helsinki.fi/~rvaranka/
 <http://www.helsinki.fi/~rvaranka/>.

 1.5.  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.6.  Links

 Exhaustive lists of Linux development libraries and tools:


   Freshmeat <http://www.freshmeat.net/appindex/development/>

   Linux Development Tools <http://www.hotfeet.ch/~gemi/LDT/>

   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

 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 ``benchmarking'' the languages would be to
       implement a simple sorting algorithm in all of them and compare
       running times.  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. Sometimes RAD is 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, very popular

 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:

 Lisp
 Beginner: Yes - OOP: Functional
 Examples: Emacs modes (for elisp), AI
 Comments: Variants Elisp, Clisp and Scheme

 Fortran
 Beginner: No  - OOP: No
 Examples: Mathematical applications
 Comments: Variants f77 and f90/95

 C
 Beginner: No  - OOP: No
 Examples: System programming, applications
 Comments: Very popular

 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 scripting - often they can achieve the
 same goals, and you have the option of choosing between native shell
 and a 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


   A general info site <http://www.tunes.org/Review/Languages.html> on
    programming languages, lots of info and opinions

   TCL <http://www.scriptics.com/>

   PERL <http://www.perl.org/>

   Python <http://www.python.org/>

   PHP <http://www.php.net>

   Java <http://www.javasoft.com/>

   clisp <http://clisp.cons.org/~haible/packages-clisp.html>

 3.  GUI Toolkits

 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+ and TK 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


 3.3.  Links


   TK <http://www.scriptics.com/>



 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

   GTK+ <http://www.gtk.org/>

   QT <http://www.troll.no/>

   Motif <http://www.metrolink.com/>