MokaByte Numero 29  -  Aprile 1999
Sviluppare in Java con 
Emacs e JDE
di 
Antonio Cisternino
Uno storico strumento di lavoro sempre attuale anche per il programmatore moderno


In questo articolo mi occuperò di illustrare il funzionamento di un ambiente di sviluppo per Java basato su un editor storico Emacs
Uno degli editor più famosi nella storia dell’informatica è Emacs,  è anche uno dei programmi più vecchi che siano tutt’oggi realmente utilizzati. Uno dei punti chiave di Emacs è la possibilità di essere completamente programmato in LISP. È quindi possibile estenderne le funzionalità permettendo di personalizzarlo fino all’inverosimile.
JDE (Java Development Environment) è un ambiente di sviluppo Java free basato su Emacs che consente a mio avviso delle capacità di editing che non hanno niente da invidiare agli IDE più avanzati. Inoltre offre funzionalità avanzate (e personalizzabili) di autocode per pattern di programmazione standard e il browsing dei file Java a partire da un albero di classi e metodi senza che sia necessaria una compilazione. Inoltre parte dell’ambiente funziona anche con altri linguaggi di programmazione come ad esempio C, C++ Perl e molti altri linguaggi.
Nel caso di Java è inoltre supportata la compilazione direttamente da Emacs con la possibilità di andare alla linea in cui è stato trovato un errore. Inoltre fa interfaccia a jdb offrendo il browsing del codice durante il debugging e viene rilasciato con un programma che si chiama beanshell che è in pratica un interprete Java che permette direttamente di provare parti di codice.
Emacs è da tempo un sistema multipiattaforma ed esiste un porting dell’editor per Windows disponibile con la libreria JDE già configurata all’URL http://medialab.di.unipi.it/ftp.
 
 
 

 Emacs

Emacs è uno degli editor più vecchi della storia dell’informatica (secondo solo a vi) è stato sviluppato negli anni settanta da Richard Stallman. La definizione di Emacs riportata nella documentazione di GNU Emacs è: un editor avanzato, auto-documentante, personalizzabile, estendibile e real-time.
A parte questo enorme slogan si può dire che Emacs sia realmente ciò che dice di essere, molti sono i suoi meriti primo tra tutti quello di aver introdotto una filosofia di personalizzazione dell’ambiente di editing che è stata poi ripresa in molti editor come ad esempio Word di Microsoft. Le parole veramente chiave nella definizione di Emacs sono: auto-documentante, personalizzabile e soprattutto estendibile. Sono infatti queste caratteristiche che permettono ad Emacs di sopravvivere e di crescere con i bisogni dell’informatica. Tanto per fare un esempio io leggo la mia posta con Emacs (usando il package RMAIL di Emacs) attraverso POP che notoriamente non esisteva proprio quando il sistema fu pensato. Il package che uso per mandare gli attachment è stato scritto (scusate ma lo devo proprio dire…) da Mark Adresseen quando era ancora all’NCSA.
In realtà il cuore di Emacs è un interprete LISP con funzionalità orientate all’editing: offre quindi capacità di matching di espressioni regolari, di editing dei buffer (le finestre contenenti i documenti) e di gestione dei file. Il resto è scritto in E-Lisp, un dialetto del Lisp di Emacs, sfruttando le funzionalità del cuore. La stessa architettura che ad esempio troviamo in Word che in buona parte scritto in Word Basic.
Molti sono i primati che Emacs detiene, i più importanti sono: è stato il primo editor a permettere di modificare più file in una sola sessione (ben prima delle interfacce grafiche) sfruttando lo schermo a caratteri in modo assolutamente geniale; è stato primo editor completamente programmabile e capace di effettuare editing guidato dalla sintassi (indentazione automatica del testo); primo editor auto-documentante in cui le funzionalità aggiunte dall’utente vengono confuse con quelle di sistema e la documentazione viene gestita in modo uniforme. Chiunque estenda Emacs può quindi offrire documentazione delle proprie estensioni che entra a far parte della documentazione dell’editor e può essere trovata con i meccanismi standard di help offerti dall’editor.
Ogni volta che uso Emacs resto affascinato della potenza che ha in sé, potenza che ormai è matura poiché ha molti anni di sviluppo alle spalle. Ecco quindi che è abbastanza bug free e vi si trova quasi tutto quello che si potrebbe desiderare per l’editing del testo.
 
 
 

 Utilizzare Emacs

Dopo questa propaganda sfegatata posso passare a fare una breve introduzione al funzionamento di Emacs necessario a comprendere il funzionamento di JDE. L’interfaccia ad Emacs è principalmente orientata alla tastiera. Questo perché quando è stato sviluppato la tastiera era il vero confine tra l’uomo e la macchina. Ecco quindi che ci sono alcuni tasti chiave che inizialmente possono sembrare leggermente oscuri e far rimpiangere un sano menu ma che successivamente si rivelano essenziali per essere rapidi nella scrittura. Inoltre l’estrema coerenza delle combinazioni di tasti rendono facile ricordare le combinazioni di tasti necessari.
Quando Emacs fu scritto c’erano ancora i vecchi terminali che spesso differivano non poco nella gestione della tastiera; ad esempio capitava spesso che i cursori non fossero supportati e quindi diveniva un’impresa configurare un terminale per l’utilizzo con un certo programma. Per questo motivo Emacs fu sviluppato ipotizzando una tastiera con le lettere (almeno quelle…), il ritorno a capo, il backspace, la tabulazione e due metatasti: Control e Meta. Questi tasti furono scelti perché praticamente sempre disponibili sui terminali. La scelta fu quindi di offrire tutte le funzionalità basandosi su combinazione di questi tasti. Ovviamente se poi erano disponibili tasti come i cursori l’editor rende equivalente la pressione del tasto e il comando basato sui tasti fondamentali. Il tasto Meta è sostituito sui PC dal tasto ESC ed è assolutamente equivalente, inoltre Meta sul PC è emulato con il tasto Alt.
Quando Emacs viene avviato fornisce delle informazioni sulla versione e sulla piattaforma oltre ad informazioni essenziali quali ad esempio come ottenere un tutorial introduttivo oppure come uscire. Spesso quando l’editor indica un comando lo fa indicando con C- la pressione di Control seguito da una lettera e con M- la pressione del tasto Meta seguito da un tasto.
Quando Emacs viene avviato viene aperto un buffer di default chiamato *scratch* che serve per segnare appunti e il cui contenuto non viene salvato e viene considerato come appunti non importanti.
Si può inoltre osservare come sia presente una barra (dove è riportato il nome del buffer) che contiene molte informazioni relative allo stato attuale del buffer. Infine vi è una regione sotto questa barra nota col nome di minibuffer. Questo è un piccolo buffer di editing dove si specificano di solito i parametri necessari all’esecuzione di comandi.
Suggerisco vivamente di eseguire il tutorial per capire meglio l’utilizzo di base dell’editor, riporto comunque i comandi fondamentali: il comando per aprire un file è il comando C-x C-f  (ovvero Control-x e Control-f), una volta digitato nel minibuffer Emacs richiede qual’è il nome del file e il suo percorso. Emacs supporta la name completion ovvero quel meccanismo che, alla pressione del Tab, cerca di completare i nomi dei file. Ecco quindi che trovare un file o una directory per aprirla diviene semplice poiché si possono specificare i prefissi dei nomi e lasciare ad Emacs il compito di completare il nome. Un altro comando importante di Emacs è quello per annullare l’operazione in corso e si ottiene con la pressione di C-g; questo comando si rivela essenziale poiché consente di interrompere comandi erroneamente avviati. Il comando C-x C-s permette di salvare il buffer corrente (ovvero la finestra di editing che contiene il cursore) sul disco.
Restano da chiarire ora due aspetti fondamentali di Emacs che sono sfruttati ampiamente da JDE: i buffer e la capacità di indentare il codice automaticamente. La gestione di più file contemporaneamente è stata rivoluzionaria poiché era possibile quando non esistevano le interfacce grafiche  ed è tuttora molto utile. Un buffer è in qualche modo simile ad una finestra di un documento Word, è possibile avere più buffer aperti contemporaneamente e passare dall’uno all’altro più o meno come si fa in Word con il menu Window che tiene la lista dei documenti aperti. Un buffer può essere chiuso con il comando C-x k; nel caso in cui un buffer sia aperto e se ne apra un altro quello aperto passa in «background» e quello nuovo viene visualizzato. Per passare da un buffer all’altro si può usare il comando C-x b mentre il comando C-x C-b permette di visualizzare la lista dei buffer aperti.
La capacità di formattare automaticamente il codice è una caratteristica storica di Emacs che è un esempio classico di editor guidato dalla sintassi. Il tipo di indentazione che l’editor offre è data dal modo corrente; quando l’editor viene avviato il modo è Fundamental e fa comportare l’editor come un editor standard di testo. Se si apre un file con estensione C il modo diviene appunto C e l’editor indenta automaticamente una riga di codice alla pressione del Tab. Emacs supporta molti linguaggi (C, C++, Perl, Fortran, Lisp, Java, Pascal, …) ed è quindi molto semplice indentare automaticamente il proprio codice.
 
 
 

 JDE

Infine resta un angolino per JDE… D’altronde JDE si appoggia ed estende Emacs per cui aver descritto Emacs equivale ad aver descritto le funzionalità di editing di JDE. La domanda che sorge spontanea ora è: che cosa fa JDE? La risposta è semplice: offre uno strumento essenziale che si chiama speedbar che permette di fare il browsing di directory di file e quando si esplode un file ne fa il parsing e mostra in un albero tutti i metodi e le definizioni in esso contenute. La speedbar può essere aperta con il comando M-x speedbar (ovvero Alt-x e si digita speedbar nel minibuffer seguito da invio).
Oltre a questo essenziale meccanismo di browsing del proprio codice sono offerti (nel menu JDE che appare quando si apre un file Java) alcuni generatori di codice che consentono di generare automaticamente pattern di codice nel proprio sorgente richiedendo solo i parametri necessari.
Un esempio di questo tipo di interazione si ha con la generazione del pattern get/set: ovvero della generazione di una variabile e di due metodi, get e set per accedere alla variabile. Per poter generare il codice è sufficiente utilizzare il comando M-x jde-gen-get-set e nel minibuffer specificare su richiesta il tipo della variabile e il nome. Provare per credere!Infine JDE si offre come interfaccia al compilatore e tramite il menu è possibile compilare le proprie classi direttamente da Emacs, è inoltre possibile specificare delle opzioni relative ad un progetto che vengono salvate in un file e recuperate all’occorrenza.
 
 
 

 Conclusioni

In questo articolo non ho raccontato niente… troppo poco per Emacs, ancora meno per JDE… spero solo di aver dato un’idea di cosa è l’ambiente e di essere riuscito ad incuriosire almeno una persona che si scarica il tutto e prova ad usarlo.

MokaByte Java Web Magazine
www.mokabyte.it
La redazione di MokaByte ricerca nuovi collaboratori. 
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it