Forth on epätavallinen kieli. Se on ensisijaisesti tulkki, ja siinä on komentorivikäyttöliittymä, jotta sitä voi käyttää reaaliajassa. Sillä on kuitenkin myös kyky ottaa koodisarjoja ja kääntää niitä. Se on siis jonkinlainen hybridi.
Sen takia Forthia käytetään yleisesti laitteistoissa, joissa ei ole perinteistä käyttöjärjestelmää. Sitä käytetään laajalti myös koneiden ohjaamiseen, ja sitä on käytetty myös avaruustutkimuksessa – jopa Philae-luotaimessa, joka laskeutui komeetta 67P/Churyumov-Gerasimenkolle.
Historia
Forthin kehitti Charles Moore vuodesta 1968 alkaen, kun hän teki grafiikkaohjelmointia Mohasco Industriesilla. Ensimmäinen täydellinen Forth-toteutus tuli kuitenkin vasta vuonna 1971, kun Moore loi itsenäisen järjestelmän 11-metrisen teleskoopin ohjaamiseen Yhdysvaltain kansallisessa radioastronomian observatoriossa (National Radio Astronomy Observatory, NRAO).
Forthin aikaisemmat versiot olivat herättäneet ohjelmointiyhteisön huomion. Mutta tässä vaiheessa siitä tuli erittäin suosittu tähtitieteen yhteisössä. Niinpä Moore perusti vuonna 1973 NRAO:n kollegojensa Elizabeth Ratherin ja Edward Conklinin kanssa FORTH, Inc:n.
Yhtiö porttasi ohjelman moniin eri järjestelmiin. Ja FORTH, Inc on edelleen tärkeä yritys, joka tarjoaa Forthiin liittyviä tuotteita ihmisille liike-elämässä, akateemisessa maailmassa ja julkishallinnossa.
Yleiskatsaus Forthiin
Forth-ohjelmointikielessä on useita ainutlaatuisia piirteitä. Käsittelemme tässä tärkeimmät.
Forthin ominaisuudet
Forth tarjoaa monia ainutlaatuisia ominaisuuksia:
- Interaktiivinen ohjelmointi
- Kielen käännettyjen laajennusten, niin sanottujen ”sanojen”
- Stackit ja käänteinen puolalainen merkintätapa
- Suora yhteys käyttäjän ja laitteiston välillä.
Reverse Polish Notation
Forth tekee matemaattisia laskutoimituksia käyttäen Reverse Polish Notationia. Tämä riippuu numeroiden tallentamisesta pinoon.
Harkitse laskutoimitusta: 2 + 3
. Forthissa tämä tehtäisiin sijoittamalla 2 pinoon, sitten sijoittamalla 3 pinoon ja sitten laskemalla ne yhteen. Tämä näyttäisi jotakuinkin tältä: 2 3 +
.
Näyttää hieman oudolta, mutta tietokoneen on helpompi jäsentää se, koska tietokoneet tekevät laskutoimitukset todellisuudessa näin. Ja kun siihen tottuu koodarina, siitä tulee aivan luonnollista.
Sulkeita ei myöskään tarvita. Tarkastellaan seuraavia kahta esimerkkiä. (Huomaa: backslash-merkki aloittaa kommentin.)
2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5
Ensimmäisessä esimerkissä pinoon työnnetään 2 ja sen jälkeen 3. 2 on siis pinossa toisena ja 3 ensimmäisenä. Operaattoria ”+” sovelletaan pinon kahteen ensimmäiseen alkioon. Tämä poistaa nämä kaksi elementtiä pinosta ja jättää pinon päälle 5 (2 + 3).
Sitten työnnetään 5 pinoon. Tämä asettaa 5:n pinon ensimmäiseen ja toiseen kohtaan. Lopuksi käytämme operaattoria ”*”, jolloin pinon yläosaan tulee 25 (5 * 5).
Tässä toisessa esimerkissä asetamme pinoon 2, 3 ja 5 niin, että 5 on pinon ensimmäisessä paikassa, 3 toisessa paikassa ja 2 kolmannessa paikassa. Sitten sovellamme ”*”-operaattoria pinon kahteen ylimpään alkioon (5 * 3), minkä tuloksena 15 asetetaan pinon yläosaan.
Tässä vaiheessa 15 on ensimmäisellä sijalla ja 2 on toisella sijalla. Kun +-operaattoria käytetään, jää 17 (15 + 2) pinon yläosaan.
Esimerkkiohjelma
Seuraava ohjelma on hyvin yksinkertainen, mutta se havainnollistaa paljon siitä, mitä kielessä tapahtuu.
: OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH
Ensimmäinen asia, joka tässä ohjelmassa tehdään, on määritellä funktio nimeltä OUTMATH
. Sitä seuraavat rivit ovat osa funktiota aina puolipisteeseen päättyvälle riville asti. Ensimmäinen rivi tulostaa tekstin: ”Laskemme nyt: (2 + 3) * 5”, ja sen jälkeen seuraa väliviiva.
Seuraavalla rivillä suoritetaan edellä käsittelemämme laskutoimitus, jonka tuloksena 25 sijoitetaan pinon yläosaan. Funktion viimeinen rivi tulostaa: ”Tämä on yhtä kuin: ”, jota seuraa pinon päällä oleva arvo (jota edustaa ”.”) ja rivinvaihto.
Sitten yksinkertaisesti ajetaan funktio. Kun ohjelma siis suoritetaan, se tulostaa:
We will now calculate: (2 + 3) * 5This equals: 25
Learning Forth
Useimmille ohjelmoijille tämä on uusi tapa ajatella. Mutta on yllättävää, miten luonnolliselta se tuntuu, kun sen kanssa alkaa työskennellä. Tässä on muutamia opetusohjelmia ja kirjoja, joiden avulla pääset työskentelemään kielen parissa.
Forthin opetusohjelmat
Verkossa on paljon opetusohjelmia. Koska Forth on outo muille kuin Forth-ohjelmoijille samaan aikaan, kun se on itsestäänselvyys nykyisille käyttäjille, monet opetusohjelmat kaunistelevat asioita, jotka voivat olla hämmentäviä aloittelijoille. Näissä opetusohjelmissa tätä ongelmaa ei ole.
- Helppo Forth: Tämä lyhyt E-kirja on erinomainen johdanto. Sen ainoa haittapuoli on, että siinä ei ole paljon esimerkkejä. Tutustu siis alla oleviin esimerkkeihin.
- A Beginner’s Guide to Forth: Tämä on toinen hyvä johdanto. Se on hieman teknisempi, mutta siinä on enemmän esimerkkejä.
- And So Forth…: Tämä on erittäin perusteellinen johdatus Forthiin – melkein yhtä hyvä kuin kirja.
Forth Books
Uuden kielen oppiminen on usein helpompaa hankkimalla kirja, joka vie sinut askel askeleelta läpi. Forthista on paljon hyviä kirjoja – erityisesti 1980-luvulta, jolloin Forth todella lähti lentoon. Tässä on kokoelma parhaista ja tärkeimmistä.
- Discover Forth: Learning and Programming the Forth Language (1982) Thom Hogan: Tämä on hyvä ja tiivis johdatus Forth-kieleen.
- Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) by Leo Brodie: tämä on klassikko ja hyvä tapa oppia Forth. Se on loppunut painosta, mutta käytettyjä kappaleita ei ole vaikea löytää pienellä rahalla. Se on myös verkossa ilmaiseksi. Edistyneempien Forth-ohjelmoijien kannattaa tutustua Brodien uudempaan teokseen Thinking Forth.
- Programming a Problem Oriented Language: Forth – How the Internals Work (2014) by Charles Moore: Tämä on Kindle-versio kirjasta, jonka Forthin luoja kirjoitti kauan sitten. Se tarjoaa edelleen teräviä oivalluksia kielestä, mutta ei ole paras valinta alkuun.
- Forth Programmer’s Handbook (2007) by Elizabeth Rather and Edward Conklin: Tämä on edistyneempi kirja Forthista, jonka ovat kirjoittaneet kaksi muuta Forthin pioneeria. Katso myös Ratherin kirja Forth Application Techniques (2006).
Other Resources
- Forth Interest Group: Tällä sivustolla on kaikenlaista mielenkiintoista tietoa, mukaan lukien vanhoja historiallisia dokumentteja. Valitettavasti sillä on myös paljon rikkinäisiä linkkejä. Mutta se on silti tutustumisen arvoinen.
- Linkkejä Forth-ohjelmiin: Tämä on hieno kokoelma oikeita esimerkkiohjelmia, kuten taulukkolaskentaohjelma ja Sudoku-palapelin ratkaisija.
- Forth Google Group: Tämä on erittäin aktiivinen ryhmä Forth-käyttäjiä, jotka kyselevät ja vastaavat kysymyksiin.
- Forth Subreddit: Tämä ei ole kauhean aktiivinen foorumi, mutta siellä on silti asiantuntevia ihmisiä.
Forth-toteutukset
Forthista on tehty vuosien varrella paljon toteutuksia. Forth Interest Groupilla on pitkä Forth Compilers Page. Joten jos sinulla sattuu olemaan autotallissasi PDP-11, voit hankkia siihen Forth-kääntäjän! Mutta nykyaikaisempia järjestelmiä varten tässä ovat yleisimmät vaihtoehdot.
bigFORTH
1980-luvun puolivälissä Dietrich Weineck, Georg Rehfeld ja Klaus Schleisiek kehittivät volksFORTHin 16-bittisille koneille, kuten 8086 IBM PC:lle ja 6502 Apple-, Commodore- ja Atari-koneille.
Lopulta he loivat 32-bittisen version (16-bittiseen väylään perustuvalle) 68000-pohjaiselle Atari ST:lle. Vaikka volksFORTH edistyi, projekti melko lailla kuoli (vaikka se myöhemmin käynnistettiinkin uudelleen).
Bernd Paysan oli kuitenkin sen verran kiinnostunut tästä volksFORTH-versiosta (jota kutsuttiin tuolloin turboFORTH:ksi), että hän teki siitä bigFORTH:n perustan.
Ensimmäinen versio julkaistiin Atari ST:lle vuonna 1990. Vuoteen 1995 mennessä bigFORTH oli siirretty 386:lle, ja seuraavana vuonna se oli saatavilla Windows NT:lle, OS/2:lle ja Linuxille.
Graafinen käyttöliittymä
Tällöin Paysan aloitti työn MINOSin parissa. (Teknisesti se on ”MINOS”, mutta tavallisesti siihen viitataan yksinkertaisesti nimellä ”MINOS”.)
Se on graafinen käyttöliittymä bigFORTHille. Saattaa olla helpointa ajatella sitä ”Visual bigFORTHina” kuten Visual Basicia, koska se on enemmän tai vähemmän sitä. Se luotiin ensin X-Windows-järjestelmää varten. Mutta se oli pian saatavilla myös Windowsille.
Kehitys sekä bigFORTHin että MINOSin osalta näyttää loppuneen vuoden 2010 tienoilla. Molemmat ovat kuitenkin helposti saatavilla ja varsin hyödyllisiä (bigFORTH on ANSI-yhteensopiva). Itse asiassa MINOSilla on hauskaa leikkiä.
bigFORTH-resurssit
Jos haluat käyttää bigFORTHia tai jopa kehittää sille, sinulla on kaikki tarvitsemasi työkalut:
- Lähdekoodi: Tämä on koodi viimeisimmästä virallisesta julkaisusta 22. maaliskuuta 2010, versio 2.4.
- Debian-paketti: helposti asennettava paketti mihin tahansa Debian-pohjaiseen Linux-jakeluun (esim. Ubuntu, Mint). Se asentuu osoitteeseen /usr/local/bin, ja sisältää MINOSin, vaikka sen nimi on xbigforth.
- Windows Self-Installing Executable: Sama kuin Debian-paketti, mutta Windowsille. MINOSin nimi on jopa xbigforth.exe.
- Dokumentaatio (PDF): Tämä lähes 300-sivuinen JL Bezemerin kirjoittama kirja toimii oppaana ja viitteenä. Suuri osa siitä käsittelee geneeristä Forthia ja siitä on otettu ”And So Forth…”.
- Bernd Paysanin kotisivu: Tällä sivulla on paljon mielenkiintoista Forthiin liittyvää tietoa ja esimerkkejä. Erityisen huomionarvoinen on Paysanin Forth-pohjainen merkintäkieli.
- bigFORTH Repository: perimmäinen kohde kaikkiin bigFORTH-tarpeisiisi.
Gforth
Gforth on GNU-toteutus Forthista. Sillä on arvostettu sukupuu.
Gforth-projektin aloittivat vuonna 1992 bigFORTH:n luoja Bernd Paysan ja Anton Ertl, ja Jens Wilke osallistui siihen merkittävästi.
Se oli yhdistelmä bigFORTH:sta ja paljon vanhemmasta fig-FORTH:sta (ks. alla). Sen historia on kuitenkin kieroutunut, sillä bigFORTH tuli volksFORTH:sta, joka perustui fig-FORTH:iin.
Ollessaan GNU-projekti, sen parissa on tehty paljon työtä sen alkamisesta lähtien. Se on nyt täysin ANSI-yhteensopiva ja on saavuttanut kaikki alkuperäiset tavoitteensa. Uusin versio on 0.7.3, ja viimeinen merkintä (Paysan) on 25. helmikuuta 2013.
Vapaista Forth-toteutuksista Gforth on yleisimmin käytetty. Osittain se johtuu vain siitä, että se on osa GNU-projektia ja sen saatavuudesta. Mutta se johtuu myös siitä, että se on tehokas ja nopea.
Gforthin resurssit
Gforthilla on kaikki resurssit, joita tarvitset, jotta voit käyttää sitä mihin tahansa:
- Lähdekoodi: Tällä sivulla on Gforthin lähdekoodi versiosta 0.2.1 aina nykyiseen, 0.7.3:een asti.
- Debian-paketit: Debian Linux -jakelulle on saatavana useita eri pakkauksia. Huomaa, että valitsemastasi paketista riippuen sinun on ehkä ensin asennettava yksi tai useampi muu paketti.
- Windows Self-Installing Executable: Tämä on aikaisempi (0.7.0) versio Gforthista, mutta nopea tapa päästä alkuun.
- Dokumentaatio (PDF): Tämä 250-sivuinen kirja koskee versiota 0.7.0 Gforthista. Se on saatavilla myös HTML-muodossa.
- Gforth Repository: Melkein kaikki Gforthiin liittyvä löytyy täältä.
pbForth
pbForthia ei näytä enää tuettavan, mutta se on niin mielenkiintoinen Forthin toteutus, että siihen kannattaa tutustua.
Kuten olemme keskustelleet, Forth on aina liittynyt laitteiston ohjaukseen. Niinpä ei ollut lainkaan yllättävää, että Forth-toteutus luotiin LEGO MINDSTORMS -robotiikkasarjaa varten – tarkemmin sanottuna 16-bittistä RCX:ää varten, joka ilmestyi vuonna 1998.
Se ei näytä koskaan päivitetyn toimimaan toisen sukupolven, NXT-sarjan, kanssa, joka ilmestyi vuonna 2006, eikä myöskään nykyistä MV3:aa varten, joka ilmestyi vuonna 2013.
Niinkin, että pbForthilla ei ole enää mitään virallista sivustoa, on siitä silti mahdollista tutustua siihen, ja sitä voi jopa käyttää. Oppimiskäyrä voi kuitenkin olla jyrkkä, koska tietoa ei ole kovin paljon. Ja selvästikin tarvitsisit LEGO MINDSTORMS RCX:n (niitä ei ole kovin vaikea löytää käytettynä).
NXT käyttää täysin erilaista (ja 32-bittistä) prosessoria, joten pbForth ei varmasti toimisi sen kanssa. Silti se voisi olla hauskaa. Ja jos jaksat, voisit mahdollisesti portata sen toisen ja kolmannen sukupolven sarjoihin.
pbForthin resurssit
Mitä tietoa normaalista internetistä löytyy, on yleensä niukkaa ja linkittää aina pbForthin kotisivulle, joka ei ole ollut toiminnassa ainakaan vuoden 2010 jälkeen. Vain Internet-arkiston ansiosta suuri osa on saatavilla.
- History of LEGO Robotics: vaikka ei koske pbForthia, se tarjoaa nopean yleiskatsauksen LEGO MINDSTORMS -tuotteisiin.
- Introduction to pbForth (PDF): Tämä 30-sivuinen opetusohjelma auttaa aloittamaan kielen käytön.
- phForthin lähdekoodi: Huomaa, että pbForth on kirjoitettu assembler-kielellä ja Tcl:llä, joten sinulla on oltava nämä työkalut käytettävissäsi.
- Windows GUI: Tämä tiedosto toimii, vaikka sen saaminen tekemään mitään voi olla monimutkaisempaa. Jos haluat pbForthin Linuxille tai Macille, sinun on käytettävä lähdekoodia.
- phForth Home Page Circa 2009: Tällä sivulla on linkkejä melko mielenkiintoiseen tietoon pbForthista, erityisesti puolen tusinaa esimerkkiskriptiä.
Muut toteutukset
- fig-FORTH: Tämä oli yksi varhaisimmista Forth-toteutuksista, ja sen loi Forth-intressiyhtymä. Se on 16-bittinen toteutus. Se on saatavilla ihanille vanhoille tietokoneille, kuten Data General Eclipse ja Alpha Micro, sekä 8086- ja 6502-pohjaisille tietokoneille. Ongelmana on se, että siinä ei ole suoritettavia tiedostoja – vain assembly-kielistä koodia. Ja useimmissa tapauksissa vain bittikartta-PDF-tiedostoja koodista. Varsinaista koodia näyttää olevan saatavilla vain 8088/8086-, PDP-11- ja 6800-järjestelmille. (6800 on 8-bittinen prosessori, joten ilmeisesti fig-FORTHista oli olemassa 8-bittinen versio.)
- SP-Forth: tämä on ilmainen Forth-toteutus Windowsille ja Linuxille.
- 4tH: tämä on helppokäyttöinen Forth-toteutus, joka on saatavana laajalle laitteistovalikoimalle (mukaan lukien Raspberry Pi), ja sisältää hyvän dokumentaation.
- SwiftForth™: tämä on Forth-kääntäjä alkuperäiseltä yritykseltä, joka toi Forthin maailmalle. Se on kaupallinen tuote, mutta kohtuuhintainen.