
                       Programming Languages mini-HOWTO

Risto S. Varanka

   22 luglio 2000
     _________________________________________________________________

   Un breve confronto tra i principali linguaggi di programmazione per
   Linux e le principali librerie per creare interfacce grafiche (GUIs)
   in ambiente Linux Traduzione a cura di Andrea Giancola Revisione a
   cura di Giulio Daprel 
     _________________________________________________________________

1. [1]Introduzione

     * 1.1 [2]Ultima versione del documento
     * 1.2 [3]Copyright
     * 1.3 [4]License
     * 1.4 [5]Disclaimer
     * 1.5 [6]Autore
     * 1.6 [7]Credits
     * 1.7 [8]Collegamenti

2. [9]Linguaggi di programmazione

     * 2.1 [10]Concetti della tabella
     * 2.2 [11]Linguaggi principali
     * 2.3 [12]Programmazione di shell
     * 2.4 [13]Altri linguaggi
     * 2.5 [14]Link

3. [15]Toolkit per GUI

     * 3.1 [16]Concetti nella tabella
     * 3.2 [17]Principali toolkit GUI
     * 3.3 [18]Link
     _________________________________________________________________

1. [19]Introduzione

   Linux  un sistema operativo affascinante, perch permette ad ogni
   utente di prendere parte al suo sviluppo. La variet di linguaggi
   disponibili, per, pu confondere i programmatori che sono agli inizi.
   Questo documento elenca le scelte pi comuni per gli sviluppi di tutti
   i giorni e fornisce alcune informazioni chiave su di essi. (Beh, ``pi
   comuni '' e ``chiave'' cos come li percepisco io.)

   Il mio scopo non  n di recensire i linguaggi n di determinare quale
   sia il migliore. Ogni linguaggio  uno strumento che si adatta bene ad
   alcune funzioni e ad alcuni gusti. Si possono ottenere ulteriori
   informazioni (spesso contraddittorie) facilmente, se si chiede in giro
   o si tengono le orecchie aperte. La sezione Links in questo documento
   dar alcuni puntatori per fare ricerche per conto proprio.

   C' una pletora di linguaggi e librerie per Linux, perciquesto
   documento copre solo i linguaggi e i toolkit per GUI (Graphical User
   Interface) pi comuni in questo momento. Questo documento vuole essere
   piuttosto neutrale, ma non ho incluso tutti i linguaggi disponibili.
   Poich il mio giudizio  indubbiamente per molti versi distorto,
   consiglio agli sviluppatori seri di controllare i siti che elencano in
   modo pi esaustivo tutti i linguaggi e le librerie disponibili. Da
   notare anche che sono coperte solo le implementazioni per Linux dei
   linguaggi e dei toolkit per GUI citati, le loro caratteristiche su
   altre piattaforme non sono discusse o implicate.

   Questo documento  una recente aggiunta al LDP, quindi non ci sono
   state opportunit per feedback da parte della comunit. Comunque viene
   rilasciato nella speranza che si mostri utile per chi  interessato a
   programmare sotto Linux, specialmente i principianti. Un punto di
   domanda nelle tabelle indica mancanza di informazioni. Se si  in
   grado di riempirlo, per favore si contatti l'autore.

1.1 [20]Ultima versione del documento

   Si possono trovare gli ultimi aggiornamenti presso
   [21]http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/

1.2 [22]Copyright

   Copyright (c) 2000 Risto Varanka.

1.3 [23]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:

    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 [24]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 [25]Autore

   Siete incoraggiati a mandare osservazioni all'autore presso:
   [26]risto.varanka@helsinki.fi.

   Il sito web dell'autore si pu trovare a
   [27]http://www.helsinki.fi/~rvaranka/.

1.6 [28]Credits

   Sono grato a diverse persone che hanno espresso commenti su
   problematiche dei linguaggi di programmazione. Queste conversazioni mi
   hanno aiutato ad ottenere una migliore comprensione dei differenti
   linguaggi, e spero che future conversazioni consentiranno a questo
   mini-HOWTO di maturare nel tempo. Vorrei in particolare ringraziare le
   persone del canale IRCNet #linux: Morphy, Bluesmurf, Vadim, Zonk^,
   Rikkus ed altri i cui nomi ho dimenticato.Ringraziamenti vanno anche a
   Stig Erik Sandoe per i suoi utili commenti.

1.7 [29]Collegamenti

   Elenchi esaustivi di librerie di sviluppo e tool per Linux :

     * [30]Freshmeat
     * [31]Linux Development Tools
     * [32]linuxprogramming.com

   Le [33]Hacker FAQ di Eric S. Raymond sono un altro testo interessante
   per sviluppatori Linux alle prime armi. Si concentrano su alcuni
   aspetti culturali e psicologici dello sviluppo open source.

   Altri [34]documenti LDP che coprono argomenti generali di
   programmazione comprendono la Reading List HOWTO e la Linux
   Programmer's Guide - diversi altri sono stati scritti su argomenti
   specifici.

2. [35]Linguaggi di programmazione

   C, Lisp e Perl sono i linguaggi tradizionalmente usati per l'hacking
   nella cultura GNU/Linux; Python, PHP, Java e C++ hanno guadagnato
   terreno di recente.

2.1 [36]Concetti della tabella

   Linguaggio
          Un nome comune del linguaggio.

   Principianti
          Indica quanto un linguaggio  adatto per persone con poca
          esperienza di programmazione. Un linguaggio marcato con ``s''
          dovrebbe essere adatto come primo linguaggio di programmazione
          per un principiante.

   Performance
          Quanto veloci le applicazioni saranno quando verranno messe in
          un ambiente di produzione. Le prestazioni dipendono pi dalle
          capacit di programmazione algoritmica che dal linguaggio
          utilizzato. A lume di naso C, C++ e Fortran sono talvolta
          necessari perch possono offrire migliori prestazioni di altri
          linguaggi - altre volte possono essere poco maneggevoli per lo
          scopo prefisso. (Una idea per un ``benchmarking'' empirico dei
          linguaggi potrebbe essere implementare un semplice algoritmo di
          ricerca in tutti quanti e confrontare i tempi di esecuzione.
          Questo naturalmente non misura le prestazioni del linguaggio in
          s - in quanto un tale concetto non ha significato - ma solo
          dell'implementazione. Naturalmente non  nemmeno un metodo
          molto affidabile o completo, ma darebbe un'idea di quanto i
          tempi di esecuzione possono differire tra linguaggi diversi.
          Nessuno vuol aiutarmi in questa cosa?)

   OOP, Object-Oriented Programming vs. altri paradigmi
          La programmazione orientata gli oggetti  un importante
          paradigma di programmazione che sta guadagnando popolarit.
          Nella programmazione orientata agli oggetti le strutture dati e
          gli algoritmi sono integrati in unit, spesso chiamate classi.
          L'OOP  spesso contrapposta alla programmazione procedurale
          (che separa algoritmi e strutture dati). La questione non 
          strettamente dipendente dal linguaggio usato: si pu fare OOP
          in un linguaggio non elencato sotto tale categoria (per esempio
          il C), e programmare in stile procedurale in linguaggi elencati
          come OOP. Ho elencato come OOP i linguaggi che hanno speciali
          caratteristiche od estensioni per facilitare l'OOP. I linguaggi
          funzionali (il Lisp per esempio) sono un tipo un po' diverso -
          tra le altre cose, la programmazione funzionale  un
          superinsieme dell'OOP. La programmazione logica (Prolog), anche
          detta programmazione dichiarativa, d'altra parte, non 
          collegata alle altre categorie di programmazione in un senso
          simile.

   RAD, Rapid Application Development
          Dipende pi dagli strumenti che si stanno utilizzanfo che dal
          linguaggio in s. C' un HOWTO sugli strumenti di sviluppo GUI
          per Linux, anche se non  aggiornato. Con un buon strumento
          grafico si pu fare RAD. Il RAD pu essere potente quando si
          basa anche sul riuso di codice, perci il software libero
          potrebbe fornire un buon punto di partenza.

   Esempi
          Sono gli ambiti della programmazione in cui il linguaggio  pi
          utilizzato. Possono esistere altri buoni (e cattivi) casi di
          uso, ma sono meno caratteristici.

   Commenti
          Informazioni aggiuntive sul linguaggio, come capacit e
          dialetti.

2.2 [37]Linguaggi principali


Perl
Principianti: S - OOP: S
Esempi: Scripting, amministrazione di sistema, www
Commenti: Potente per gestire testi e stringhe

Python
Principianti: S - OOP: S
Esempi: Scripting, scripting di applicazioni, www
Commenti:

TCL
Principianti: S - OOP: No
Esempi: Scripting, amministrazione di sistema, applicazioni
Commenti:

PHP
Principianti: S - OOP: S
Esempi: Www
Commenti: Popolare per database web

Java
Principianti: S - OOP: S
Esempi: Applicazioni cross-platform, www
Commenti: Si sta diffondendo in nuove aree, ad es. infrastrutture di e-commerce

Lisp
Principianti: S - OOP: funzionale
Esempi: modi di Emacs (per Elisp), intelligenza artificiale
Commenti: Varianti Elisp, Clisp e Scheme

Fortran
Principianti: No  - OOP: No
Esempi: applicazioni matematiche (scientifiche)
Commenti: Varianti f77 e f90/95

C
Principianti: No  - OOP: No
Esempi: programmazione di sistema, applicazioni
Commenti:

C++
Principianti: No  - OOP: S
Esempi: Applicazioni
Commenti:

2.3 [38]Programmazione di shell

   Anche le shell sono un importante ambiente di programmazione. Non le
   ho trattate qui perch non conosco ancora l'argomento molto a fondo.
   La conoscenza delle shell  importante per chiunque lavori in Linux
   regolarmente, ed ancor pi per gli amministratori di sistema. Ci sono
   analogie tra la programmazione di shell e gli altri tipi di scripting
   - spesso raggiungono gli stessi obiettivi, e si ha la possibilit di
   scegliere tra una shell nativa ed un linguaggio di scripting a s
   stante. Tra le shell pi popolari vi sono bash, tcsh, csh, ksh e zsh.
   Si possono ottenere informazioni di base sulla propria shell con il
   comando man, ad esempio man bash.

2.4 [39]Altri linguaggi

   Altri linguaggi degni di nota: AWK, SED, Smalltalk, Eiffel, Ada,
   Prolog, assembler, Objective C, Logo, Pascal (convertitore p2c)

2.5 [40]Link

     * [41]Un sito di informazioni generali sui linguaggi di
       programmazione, molte informazioni ed opinioni
     * [42]TCL
     * [43]Perl
     * [44]Python
     * [45]PHP
     * [46]Java
     * [47]clisp

3. [48]Toolkit per GUI

   Il sottosistema grafico standard per UNIX e Linux, chiamato X, ha le
   proprie librerie per lo sviluppo di GUI. Forniscono una interfaccia
   programmativa di basso livello verso X, ma tendono a essere difficili
   da usare. Vecchie applicazioni verso l'utente finale ed altri toolkit
   naturalmente ne fanno largo uso. Oggigiorno la scena delle GUI per
   Linux  dominata da GTK+ e Qt, poich due popolari e completi ambienti
   operativi (GNOME e KDE) sono basati su di essi.

3.1 [49]Concetti nella tabella

   Libreria
          Nome comune o abbreviazione del toolkit

   Principianti
          Indica se il toolkit  adatto per un programmatore agli inizi.

   Licenza
          Il fatto che toolkit differenti adottino licenze differenti ha
          una certa importanza pratica. Le licenze GTK+, TK e GNUstep
          consentono di sviluppare applicazioni sia open-source che
          closed-source senza pagare per una licenza. La licenza Motif
          richiede un pagamento, mentre la licenza QT richiede pagamento
          solo se si scrivono programmi closed-source.

   Linguaggio
          Il linguaggio che viene pi spesso usato con il toolkit.

   Bindings
          Altri linguaggi che possono utilizzare il toolkit.

   Esempi
          Applicazioni che fanno uso del toolkit.

   Commenti
          Informazioni addizionali sul toolkit.

3.2 [50]Principali toolkit GUI

   Libreria Principianti Licenza Linguaggio Bindings Esempi Commenti
   TK S Free TCL Perl, Python, altri make xconfig, TKDesk
   GTK+ No Free (LGPL) C Perl, C++, Python, molti altri GNOME, Gimp Molto
   popolare
   QT No Free per sviluppi open source C++ Python, Perl, C, altri? KDE
   Molto popolare
   Motif No A pagamento C/C++ Python, altri? Netscape, Wordperfect
   [51]Lesstif  unsostituto free
   GNUstep No Free (LGPL) Objective C Guile, Java? Non molto conosciuto,
   ma si veda la [52]lista di applicazioni GNUstep  ancora in corso di
   sviluppo

3.3 [53]Link

     * [54]TK
     * [55]GTK+
     * [56]QT
     * [57]Motif
     * [58]GNUstep

Riferimenti

   1. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#s1
   2. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss1.1
   3. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss1.2
   4. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss1.3
   5. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss1.4
   6. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss1.5
   7. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss1.6
   8. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss1.7
   9. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#s2
  10. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss2.1
  11. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss2.2
  12. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss2.3
  13. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss2.4
  14. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss2.5
  15. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#s3
  16. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss3.1
  17. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss3.2
  18. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#ss3.3
  19. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1
  20. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1.1
  21. http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/
  22. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1.2
  23. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1.3
  24. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1.4
  25. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1.5
  26. mailto:risto.varanka@helsinki.fi
  27. http://www.helsinki.fi/~rvaranka/
  28. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1.6
  29. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc1.7
  30. http://www.freshmeat.net/appindex/development/
  31. http://www.hotfeet.ch/~gemi/LDT/
  32. http://www.linuxprogramming.com/
  33. http://www.tuxedo.org/~esr/faqs/hacker-howto.html
  34. http://www.tldp.org/
  35. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc2
  36. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc2.1
  37. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc2.2
  38. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc2.3
  39. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc2.4
  40. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc2.5
  41. http://www.tunes.org/Review/Languages.html
  42. http://dev.scriptics.com/
  43. http://www.perl.org/
  44. http://www.python.org/
  45. http://www.php.net/
  46. http://www.javasoft.com/
  47. http://clisp.cons.org/~haible/packages-clisp.html
  48. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc3
  49. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc3.1
  50. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc3.2
  51. http://www.lesstif.org/
  52. http://www.gnustep.org/resources/apps.html
  53. file://localhost/home/giulio/ILDP/howto/temp/Programming-Languages.html#toc3.3
  54. http://dev.scriptics.com/
  55. http://www.gtk.org/
  56. http://www.troll.no/
  57. http://www.metrolink.com/
  58. http://www.gnustep.org/
