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, perciòquesto 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/