  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:


  ·  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

  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


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

  ·  TCL <http://dev.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

  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


  ·  TK <http://dev.scriptics.com/>

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

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

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

  ·  GNUstep <http://www.gnustep.org/>



