Forth è una lingua insolita. È principalmente un interprete, e ha un’interfaccia a riga di comando in modo che possa essere usato in tempo reale. Ma ha anche la capacità di prendere insiemi di codice e compilarli. Quindi è qualcosa di ibrido.
A causa di questo, Forth è comunemente usato su hardware che non ha un sistema operativo tradizionale. È anche ampiamente usato per controllare macchinari, ed è stato usato nell’esplorazione spaziale – anche su Philae, la sonda che è atterrata sulla cometa 67P/Churyumov-Gerasimenko.
Storia
Forth è stato sviluppato da Charles Moore a partire dal 1968 mentre faceva programmazione grafica alla Mohasco Industries. Ma la prima implementazione completa di Forth non arrivò fino al 1971, quando Moore creò un sistema autonomo per controllare il telescopio di 11 metri all’Osservatorio Nazionale di Radio Astronomia degli Stati Uniti (NRAO).
Le versioni precedenti di Forth avevano catturato l’attenzione della comunità di programmazione. Ma a questo punto, divenne molto popolare nella comunità astronomica. Così nel 1973, Moore fondò FORTH, Inc con i suoi colleghi del NRAO Elizabeth Rather e Edward Conklin.
L’azienda portò il programma su molti sistemi diversi. E FORTH, Inc continua ad essere un’azienda importante, fornendo prodotti relativi a Forth a persone nel mondo degli affari, nel mondo accademico e nel governo.
Panoramica di Forth
Ci sono una serie di aspetti unici del linguaggio di programmazione Forth. Discuteremo qui i più importanti.
Caratteristiche di Forth
Forth offre molte caratteristiche uniche:
- Programmazione interattiva
- Creazione di estensioni compilate del linguaggio chiamate “parole”
- Stacks e Reverse Polish Notation
- Connessione diretta tra utente e hardware.
Notazione polacca inversa
Forth fa calcoli matematici usando la notazione polacca inversa. Questo dipende dalla memorizzazione dei numeri in una pila.
Considera il calcolo: 2 + 3
. In Forth, questo verrebbe fatto mettendo il 2 sullo stack, poi mettendo il 3 sullo stack, e poi sommandoli. Questo sembrerebbe qualcosa del genere: 2 3 +
.
Sembra un po’ strano, ma è più facile da analizzare per il computer, perché questo è il modo in cui i computer fanno effettivamente i calcoli. E una volta che ci si abitua come codificatore, diventa abbastanza naturale.
Inoltre, non c’è bisogno delle parentesi. Considerate i seguenti due esempi. (Nota: il carattere backslash inizia un commento.)
2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5
Nel primo esempio, il 2 viene inserito nello stack seguito dal 3. Quindi il 2 è il secondo nello stack e il 3 è il primo. L’operatore “+” viene applicato ai primi due elementi dello stack. Questo rimuove questi due elementi dallo stack, e lascia 5 (2 + 3) in cima allo stack.
Poi spingiamo 5 sullo stack. Questo mette un 5 nella prima e nella seconda posizione dello stack. Infine, applichiamo l’operatore “*”, che risulta in 25 (5 * 5) che viene messo in cima alla pila.
Nel secondo esempio, mettiamo 2, 3, e 5 sulla pila, in modo che 5 sia nella prima posizione, 3 nella seconda, e 2 nella terza. Poi applichiamo l’operatore “*” sui primi due elementi della pila (5 * 3) con il risultato che 15 viene messo in cima alla pila.
A questo punto, 15 è in prima posizione e 2 è in seconda posizione. Quando l’operatore + viene applicato, lascia 17 (15 + 2) in cima allo stack.
Programma d’esempio
Il seguente programma è molto semplice, ma dimostra molto di quello che succede nel linguaggio.
: OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH
La prima cosa che fa questo programma è definire una funzione chiamata OUTMATH
. Le linee che lo seguono fanno parte della funzione fino alla linea che termina con un punto e virgola. La prima linea stampa il testo “Ora calcoleremo: (2 + 3) * 5” e la segue con un ritorno a capo.
La linea successiva esegue il calcolo di cui abbiamo parlato sopra, con il risultato che 25 viene messo in cima allo stack. L’ultima riga della funzione emette “This equals: “seguito dal valore in cima allo stack (rappresentato da “.”) e da un ritorno a capo.
Poi eseguiamo semplicemente la funzione. Così, quando il programma viene eseguito, produce:
We will now calculate: (2 + 3) * 5This equals: 25
Imparare il Forth
Per molti programmatori, questo è un nuovo modo di pensare. Ma è sorprendente quanto sembri naturale una volta che si inizia a lavorarci. Ecco alcuni tutorial e libri che vi faranno lavorare con il linguaggio.
Forth Tutorials
Ci sono molti tutorial online. Poiché Forth è strano per i programmatori non-Forth allo stesso tempo in cui è evidente per gli utenti attuali, molti dei tutorial sorvolano su cose che possono confondere i principianti. Questi tutorial non hanno questo problema.
- Easy Forth: questo breve Ebook è un’eccellente introduzione. Il suo unico svantaggio è che non è molto ricco di esempi. Quindi controllate alcuni degli esempi qui sotto.
- A Beginner’s Guide to Forth: questa è un’altra buona introduzione. È un po’ più tecnico, ma ha più esempi.
- And So Forth…: questa è un’introduzione molto approfondita al Forth – buona quasi quanto un libro.
Forth Books
Spesso è più facile imparare un nuovo linguaggio prendendo un libro che possa accompagnarvi passo dopo passo nel processo. Ci sono un sacco di buoni libri su Forth – specialmente risalenti agli anni ’80, quando Forth è veramente decollato. Ecco una raccolta dei migliori e più importanti.
- Discover Forth: Learning and Programming the Forth Language (1982) di Thom Hogan: questa è una buona e concisa introduzione al linguaggio Forth.
- Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) di Leo Brodie: questo è un classico e un ottimo modo per imparare il Forth. È fuori stampa, ma copie usate non sono difficili da trovare per pochi soldi. È anche online gratuitamente. I programmatori Forth avanzati potrebbero voler controllare il più recente di Brodie, Thinking Forth.
- Programmare un linguaggio orientato ai problemi: Forth – How the Internals Work (2014) di Charles Moore: questa è una versione Kindle del libro che il creatore di Forth ha scritto molto tempo fa. Fornisce ancora intuizioni interessanti sul linguaggio, ma non è la scelta migliore per iniziare.
- Forth Programmer’s Handbook (2007) di Elizabeth Rather e Edward Conklin: questo è un libro più avanzato sul Forth dagli altri due pionieri del Forth. Vedi anche il libro di Rather, Forth Application Techniques (2006).
Altre risorse
- Forth Interest Group: questo sito ha tutti i tipi di informazioni interessanti inclusi vecchi documenti storici. Sfortunatamente, ha anche molti link non funzionanti. Ma vale ancora la pena controllare.
- Links to Forth Programs: questa è una grande collezione di programmi di esempio reali come un foglio di calcolo e un risolutore di puzzle Sudoku.
- Forth Google Group: questo è un gruppo molto attivo di utenti Forth che fanno e rispondono a domande.
- Forth Subreddit: questo non è un forum terribilmente attivo, ma ci sono comunque persone competenti.
Forth Implementations
Ci sono state molte implementazioni di Forth negli anni. Il Forth Interest Group ha una lunga pagina di compilatori Forth. Quindi se vi capita di avere un PDP-11 in giro nel vostro garage, potete ottenere un compilatore Forth per esso! Ma per sistemi più moderni, ecco le opzioni più comuni.
bigFORTH
A metà degli anni ’80, Dietrich Weineck, Georg Rehfeld e Klaus Schleisiek svilupparono volksFORTH per macchine a 16 bit come il PC IBM 8086 e le macchine Apple, Commodore e Atari 6502.
Finalmente, crearono una versione a 32 bit per l’Atari ST (basato sul bus a 16 bit) 68000. Anche se volksFORTH stava facendo progressi, il progetto è praticamente morto (sebbene sia stato poi riavviato).
Bernd Paysan era sufficientemente interessato a questa versione di volksFORTH (chiamata turboFORTH da allora), tuttavia, che ne fece la base di bigFORTH.
La sua prima versione fu rilasciata per l’Atari ST nel 1990. Nel 1995, bigFORTH era stato portato sul 386, e l’anno successivo era disponibile su Windows NT, OS/2, e Linux.
Interfaccia grafica
A quel punto, Paysan iniziò a lavorare su MINOS. (Tecnicamente, è “MINOS”, ma normalmente ci si riferisce ad esso semplicemente come “MINOS”)
È un’interfaccia grafica per bigFORTH. Potrebbe essere più facile pensarla come “Visual bigFORTH” come Visual Basic, perché è più o meno quello che è. È stato creato inizialmente per il sistema X-Windows. Ma fu presto disponibile anche per Windows.
Lo sviluppo sia di bigFORTH che di MINOS sembra essersi fermato intorno al 2010. Tuttavia, sono entrambi facilmente disponibili e abbastanza utili (bigFORTH è conforme all’ANSI). Infatti, MINOS è molto divertente con cui giocare.
Risorse di bigFORTH
Se vuoi usare bigFORTH o anche sviluppare per esso, avrai tutti gli strumenti di cui hai bisogno:
- Codice sorgente: questo è il codice dell’ultimo rilascio ufficiale del 22 marzo 2010, versione 2.4.
- Pacchetto Debian: un pacchetto facilmente installabile per qualsiasi distribuzione Linux basata su Debian (ad esempio, Ubuntu, Mint). Si installa in /usr/local/bin, e include MINOS, anche se si chiama xbigforth.
- Windows Self-Installing Executable: lo stesso del pacchetto Debian, ma per Windows. MINOS si chiama addirittura xbigforth.exe.
- Documentazione (PDF): questo libro di quasi 300 pagine funge da tutorial e riferimento, scritto da JL Bezemer. Gran parte di esso è sul Forth generico ed è quello da cui è tratto “And So Forth…”.
- Homepage di Bernd Paysan: questa pagina ha un sacco di interessanti informazioni ed esempi relativi al Forth. Di particolare rilievo è il linguaggio di markup basato su Forth di Paysan.
- Repository di bigFORTH: la destinazione finale per tutte le tue necessità di bigFORTH.
Gforth
Gforth è l’implementazione GNU di Forth. Ha un pedigree illustre.
Il progetto Gforth fu iniziato nel 1992 dal creatore di bigFORTH Bernd Paysan e Anton Ertl, con sostanziali contributi di Jens Wilke.
Era una combinazione di bigFORTH e del molto più vecchio fig-FORTH (vedi sotto). Ma la sua storia è contorta, dato che bigFORTH proveniva da volksFORTH, che era basato su fig-FORTH.
Essendo un progetto GNU, una grande quantità di lavoro è stata fatta su di esso da quando è iniziato. Ora è completamente conforme all’ANSI e ha raggiunto tutti i suoi obiettivi originali. La versione più recente è la 0.7.3, con l’ultima voce (di Paysan) il 25 febbraio 2013.
In termini di implementazioni Forth libere, Gforth è la più usata. In parte è solo perché fa parte del progetto GNU e la sua disponibilità. Ma anche perché è potente e veloce.
Risorse Gforth
Gforth ha tutte le risorse di cui avete bisogno per farne qualsiasi uso:
- Codice sorgente: questa pagina fornisce il codice sorgente di Gforth dalla versione 0.2.1 fino all’attuale, 0.7.3.
- Pacchetti Debian: ci sono vari pacchetti disponibili per la distribuzione Debian Linux. Si noti che, a seconda del pacchetto scelto, potrebbe essere necessario installare prima uno o più altri pacchetti.
- Windows Self-Installing Executable: questa è una versione precedente (0.7.0) di Gforth, ma un modo veloce per iniziare.
- Documentazione (PDF): questo libro di 250 pagine si applica alla versione 0.7.0 di Gforth. È disponibile anche in formato HTML.
- Gforth Repository: praticamente tutto ciò che riguarda Gforth può essere trovato qui.
pbForth
pbForth non sembra essere più supportato, ma è un’implementazione così interessante di Forth che vale la pena controllare.
Come abbiamo discusso, Forth è sempre stato associato al controllo hardware. Quindi non è stato affatto sorprendente che un’implementazione Forth sia stata creata per il kit robotico LEGO MINDSTORMS – in particolare, il 16-bit RCX che è uscito nel 1998.
Sembra che non sia mai stato aggiornato per funzionare con la seconda generazione, la serie NXT, che è uscita nel 2006, né l’attuale MV3, che è uscito nel 2013.
Anche se non esiste un sito ufficiale per pbForth, è ancora possibile conoscerlo e anche usarlo. Tuttavia, potrebbe esserci una ripida curva di apprendimento, perché non ci sono molte informazioni. E chiaramente, avresti bisogno di un LEGO MINDSTORMS RCX (non sono così difficili da trovare usati).
L’NXT usa un processore completamente diverso (e a 32 bit), quindi pbForth non funzionerebbe certamente con esso. Tuttavia, potrebbe essere divertente. E se siete in grado di farlo, potreste plausibilmente portarlo sui kit di seconda e terza generazione.
Risorse pbForth
Quelle informazioni che sono disponibili su internet sono generalmente terse e rimandano sempre alla Home Page di pbForth, che non è più in funzione almeno dal 2010. È solo grazie all’Internet Archive che molte di queste sono disponibili.
- Storia della robotica LEGO: anche se non riguarda pbForth, fornisce una rapida panoramica dei prodotti LEGO MINDSTORMS.
- Introduzione a pbForth (PDF): questo tutorial di 30 pagine vi farà iniziare con il linguaggio.
- Codice sorgente di phForth: notate che pbForth è scritto in linguaggio assembly e Tcl, quindi dovrete avere questi strumenti a disposizione.
- GUI di Windows: questo file funziona, anche se fargli fare qualcosa potrebbe essere più complicato. Se volete pbForth per Linux o Mac, dovrete usare il codice sorgente.
- phForth Home Page Circa 2009: questa pagina fornisce link a un bel po’ di informazioni interessanti su pbForth, in particolare una mezza dozzina di script di esempio.
Altre implementazioni
- fig-FORTH: questa fu una delle prime implementazioni Forth, creata dal Forth Interest Group. È un’implementazione a 16 bit. È disponibile per alcuni meravigliosi vecchi computer come il Data General Eclipse e l’Alpha Micro, così come per computer basati su 8086 e 6502. Il problema è che non ci sono file eseguibili – solo codice in linguaggio assembly. E nella maggior parte dei casi, solo file PDF bitmap del codice. Il codice effettivo sembra disponibile solo per 8088/8086, PDP-11, e 6800. (Il 6800 è un processore a 8 bit, quindi apparentemente, c’era una versione a 8 bit di fig-FORTH.)
- SP-Forth: questa è un’implementazione Forth gratuita per Windows e Linux.
- 4tH: questa è un’implementazione Forth facile da usare che è disponibile per una vasta gamma di hardware (incluso il Raspberry Pi), e include una buona documentazione.
- SwiftForth™: questo è il compilatore Forth della società originale che ha portato Forth nel mondo. È un prodotto commerciale, ma ha un prezzo ragionevole.