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.
Si possono trovare gli ultimi aggiornamenti presso http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/
Copyright (c) 2000 Risto Varanka.
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.
All modified documents, including translations, anthologies, and partial documents, must meet the following requirements:
In addition it is requested that:
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.
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.
Siete incoraggiati a mandare osservazioni all'autore presso: risto.varanka@helsinki.fi.
Il sito web dell'autore si può trovare a http://www.helsinki.fi/~rvaranka/.
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.
Elenchi esaustivi di librerie di sviluppo e tool per Linux :
Le 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 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.
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.
Un nome comune del linguaggio.
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.
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?)
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.
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.
Sono gli ambiti della programmazione in cui il linguaggio è più utilizzato. Possono esistere altri buoni (e cattivi) casi di uso, ma sono meno caratteristici.
Informazioni aggiuntive sul linguaggio, come capacità e dialetti.
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:
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.
Altri linguaggi degni di nota: AWK, SED, Smalltalk, Eiffel, Ada, Prolog, assembler, Objective C, Logo, Pascal (convertitore p2c)
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.
Nome comune o abbreviazione del toolkit
Indica se il toolkit è adatto per un programmatore agli inizi.
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.
Il linguaggio che viene più spesso usato con il toolkit.
Altri linguaggi che possono utilizzare il toolkit.
Applicazioni che fanno uso del toolkit.
Informazioni addizionali sul toolkit.
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 | Lesstif è unsostituto free |
GNUstep | No | Free (LGPL) | Objective C | Guile, Java? | Non molto conosciuto, ma si veda la lista di applicazioni | GNUstep è ancora in corso di sviluppo |