Eteenpäin | |
---|---|
Semantiikka | välttämätöntä |
Kieliluokka | ohjelmointikieli , tulkittu ohjelmointikieli ja käännetty ohjelmointikieli |
Toteutustyyppi | tulkki/kääntäjä |
Esiintyi | 1971 |
Tekijä | Charles H. Moore |
Tyyppijärjestelmä | kirjoittamaton |
Tärkeimmät toteutukset | gForth , pForth, kForth, SP-Forth [1] , win32forth [2] |
Murteet | FORTH-79, FORTH-83, ANSI FORTH 1994, ColorForth , RetroForth . Forth 2012 standardi |
Vaikutettu | APL , Lisp |
vaikutti | PostScript , Factor ja muut konkatenatiiviset kielet |
Mediatiedostot Wikimedia Commonsissa |
Forth ( eng. Forth ) on yksi ensimmäisistä konkatenatiivisista ohjelmointikielistä , joissa ohjelmat kirjoitetaan lekseemijonona ("sanoja" Forthin kielen terminologiassa). Matemaattiset lausekkeet esitetään postfix -merkinnällä käytettäessä pinomerkintää . Tukee mekanismeja kielen semantiikan ja syntaksin metalaajennukseen mukautumaan haluttuun aihealueeseen. Forthin perustason syntaksi on yksinkertainen ja koostuu yhdestä säännöstä: "kaikki määritelmät erotetaan välilyönnillä". Neljännessä määritelmässä voi olla mikä tahansa merkkiyhdistelmä.
Useat ominaisuudet, kuten vuorovaikutus , joustavuus ja kehittämisen helppous, tekevät Forthista tehokkaan kielen soveltavaan tutkimukseen ja työkalujen rakentamiseen. Sulautetut ohjausjärjestelmät ovat ilmeisiä tämän kielen käyttökohteita . Yksinkertaisuudensa vuoksi kääntäjä ja usein myös Forth- kääntäjä on helposti toteutettavissa suurimmalle osalle mikro -ohjaimista , ja sitä käytetään myös ristiinohjelmointityökaluna . Sitä käytetään myös eri käyttöjärjestelmiä käyttävien tietokoneiden ohjelmoinnissa tai itsenäisenä käyttöympäristönä.
Forthin kielen loi Charles X. Moore 1960-luvun lopulla ja 1970-luvun alussa. Moore kutsui kieltään neljänneksi uskoen , että se olisi neljännen sukupolven tietokonekieli . Mutta koska hän työskenteli IBM 1130 , joka salli nimet koostuivat enintään viidestä isosta kirjaimesta, nimi muutettiin muotoon FORTH ( eng. forth - forward). Kuitenkin Mooren ensimmäiset kokeet luoda yksinkertainen tulkki, joka helpottaa tähtitieteellisten laitteiden ohjaamiseen tarkoitettujen ohjelmien kirjoittamista, juontavat juurensa 1950-luvun lopulta. [3]
Vuodesta 1971 Moore työskenteli National Radio Astronomy Observatoryssa osallistuen ohjelmien kehittämiseen radioteleskoopin vastaanottaman tiedon keräämiseksi ja käsittelemiseksi . Silloin ilmestyi ensimmäinen Forth-kielen toteutus. Tähän työhön osallistui myös Mooren yhteistyökumppani Elizabeth Rather , jota voidaan pitää maailman toiseksi linnoitusohjelmoijana .
American Astronomical Society hyväksyi äskettäin luodun kielen pääohjelmointikieleksi . Myöhemmin, vuonna 1973, Charles Moore ja Elizabeth Rather perustivat FORTH, Inc: n [4] , jonka aikana kieli siirrettiin monille alustoille seuraavan vuosikymmenen aikana.
1970-luvun lopulla kielen kehittämisestä kiinnostuneet ohjelmoijat muodostivat FORTH Interest Groupin (FIG). Tämä ryhmä kehitti FIG Forth -mallin konseptin, julkisesti saatavilla olevan forth-järjestelmän, joka voidaan helposti siirtää suosittuihin tietokonearkkitehtuureihin. Tätä neljättä viitejärjestelmää, FIG-FORTH, pidetään usein alkuperäisen kielen standardina.
Ajatus Forthin virallisesta standardoinnista syntyi alun perin International Association of Astronomers -järjestöstä ( English Astronomical Sciences, AST ). Toukokuussa 1977 Kitt Peak National Observatoryssa ( USA ) pidetyssä kokouksessa kehitettiin Forthin kielen sanasto , joka sai nimen AST.01.
Helmikuussa 1978 Utrechtissa otettiin käyttöön FORTH -77 -standardi , jonka tavoitteena oli mikrotietokoneiden käyttöönotto .
Lokakuussa 1979 Santa Catalina Islandilla ( Kalifornia ) pidetty kokous päättyi FORTH-79-standardin kehittämiseen, joka koskee kaikentyyppisiä tietokoneita.
Syksyllä 1983 pidettiin kokous seuraavan standardin kehittämiseksi, joka hyväksyttiin vuonna 1984 nimellä FORTH-83. Fort-83-standardi eroaa Fort-79-standardista joissakin yksityiskohdissa, mutta ei sisällöltään.
Vuonna 1988 SIGFORTH [5] -ryhmä perustettiin osaksi ACM :ää ; siellä oli myös vastaava venäläinen ACM-ryhmä (puheenjohtaja - prof. S. N. Baranov ( Pietari , SPIIRAS )). SIGFORTH on nyt olemassa osana SIGPLAN
Vuonna 1994 pitkien neuvottelujen jälkeen, joihin osallistui monia kiinnostuneita yrityksiä, hyväksyttiin ANSI - kielistandardi Forth. [6]
Nykyinen Forthin kielistandardi otettiin käyttöön vuonna 2012. [7]
Tunnettu esimerkki Fortin menestyksestä on sen käyttö syvänmeren laskeutumisajoneuvon ohjelmistossa, kun etsittiin Titanicia vuonna 1985 . Fortia käytettiin myös Shuttlen spektrografin ohjelmistossa, keinotekoisten Maan satelliittien ohjaamiseen tarkoitetuissa mikromoduuleissa, Riadin lentokentän ohjausjärjestelmässä , tietokonenäköjärjestelmissä , verianalyysin ja kardiologisen valvonnan automatisoinnissa, taskukääntäjissä.
Forthin murretta käytetään OpenBootissa , taustalla olevassa SPARC- ja PowerPC-prosessoreihin perustuvassa tietokoneohjelmistossa .
1980-luvun alussa John Warnock ja Chuck Geschke Adobe Systemsistä loivat PostScript-kielen [8] . Kielten samankaltaisuuksista huolimatta John Warnock totesi [9] , että Forth ei vaikuttanut PostScriptin luomiseen.
On prosessoreita ja ohjaimia, jotka tukevat kielen laskennallista mallia laitteistotasolla. Useita avoimen lähdekoodin toteutuksia Forthista on luotu eri laitteistoalustoille. Erilliset yritykset (joista on syytä mainita ensinnäkin Charles Mooren perustama FORTH, Inc ja brittiläinen MicroProcessor Engineering Ltd. [10] ) toimittavat kielen kaupallisia versioita erilaisilla ominaisuuksilla.
Kaksi 1980-luvulla luotua Electronic Artsin kotitietokonepeliä on kirjoitettu Forth: Worms? (1983) [11] ja Starflight (1986). [12] Canon Cat (1987) käytti Forthia järjestelmän ohjelmointikielenä .
EuroForth-konferensseja järjestetään vuosittain, mukaan lukien Venäjällä, Englannissa, Itävallassa, Saksassa, Espanjassa ja Tšekin tasavallassa (entinen Tšekkoslovakiassa). [13]
Forth-järjestelmän pääosa on linkitetty sanaluettelo tai sanakirja , josta sanaa kutsutaan nimellä suorittamaan tiettyjä toimintoja. Neljäs ohjelmointi koostuu uusien sanojen määrittämisestä sanakirjassa aiemmin määriteltyjen sanojen perusteella. Kun uudet sanat on koottu sanakirjaan, ne eivät poikkea muodoltaan sanakirjassa jo olevista sanoista. Sanan kuvausta sanakirjassa kutsutaan syötteeksi .
"Tyypillisen" Forth-sanakirjamerkinnän rakenne on:
Perinteisesti Forth-artikkelit voidaan jakaa kahteen luokkaan: matalan tason artikkelit ja neljännet artikkelit . Ensimmäisen tyypin artikkelit sisältävät koodikentässä osoittimen kohdeprosessorin koodeissa olevaan proseduuriin, joka suorittaa suoraan sanan semantiikan. Tällaisten artikkelien parametrikenttä sisältää proseduurille välitetyt parametrit tai itse sen koodin. Neljännet artikkelit sisältävät viitteitä muihin artikkeleihin parametrikentässä ja koodikenttä viittaa erityiseen toimintosarjaan, jota kutsutaan linkin tulkiksi . Käytännössä artikkelin rakenne riippuu toteutuksesta, mutta on pääsääntöisesti samanlainen kuin edellä käsitelty. Neljännen artikkelin parametrikentän sisällä käytettyä periaatetta kutsutaan säikeitetyksi koodiksi , ja linkkitulkkia kutsutaan virtuaaliseksi neljänneksi koneeksi .
Kieliopillisesti Forth- kääntäjän käsittelemä teksti on merkkijono ( eng. token ), jotka on erotettu välilyönneillä ja rivin loppumerkeillä. Syöttömerkkijonon kääntäjä valitsee seuraavan merkin ja etsii sen nykyisestä sanakirjasta, ja haku suoritetaan uudemmista sanoista vanhempiin. Jos sanaa ei löydy, merkki yritetään tulkita numeromerkinnäksi, joka onnistuessaan työnnetään pinon yläosaan. Jos merkki vastaa Forth-sanaa, Forth-järjestelmän käännöslipun nykyinen tila analysoidaan. Jos lippu tyhjennetään, sana suoritetaan - ohjaus siirretään löydetyn artikkelin koodikentän osoittimen mukaan . Jos lippu on asetettu, sana käännetään , eli osoitin sen koodikenttään liitetään parhaillaan luotuun artikkeliin. Jos numero on käännetty, se ponnahtaa pois pinosta ja käännetään kirjaimelliseksi koodiksi , jonka suorittaminen sanakirjamerkinnässä työntää numeron pinon yläosaan. Lisäksi sanat voivat sisältää välittömän lipun , jolloin ne suoritetaan aina.
Mekanismi parametrien siirtämiseksi sanojen välillä:
Kieli tarjoaa tavan työskennellä järjestelmämuistin kanssa lineaarisena alueena.
Järjestelmän pakollinen osa on myös paluupino. Saatavilla ohjelmallisesti ohjelman ohjausvirran muuttamiseksi.
Kaikki yllä oleva koskee Fort-käsitettä vain ensimmäisessä likiarvossa. Forth ei ole varsinaisesti ohjelmointikieli; pikemminkin se menee päällekkäin ohjelmointikielen käsitteen kanssa. Forth on enemmän virtuaalikone ja ForthOS-käyttöjärjestelmä. [neljätoista]
Forthin syntaksi ja semantiikka voidaan laajentaa mihin tahansa muuhun ohjelmointikieleen heti Forth-ohjelman tulkinnan (kääntämisen) aikana. Forthin käyttäminen metakielenä on kätevää, koska saatavilla on Forth-työkaluja, jotka tukevat niitä kieliä, jotka ovat jo Forth-järjestelmässä. Kaikki Forth-järjestelmän resurssit ovat käyttäjän käytettävissä ja ne esitetään sanakirjamerkintöjen muodossa. Pääsääntöisesti käyttäjän määrittämillä sanakirjamerkinnöillä on täsmälleen sama esitys Forth-järjestelmässä kuin kaikilla muilla sanakirjamerkinnöillä, jotka muodostavat koko Forth-järjestelmän.
Jonkinlaista säikeistä koodia käytetään käännetyn ohjelman koneesityksenä .
Alirutiinin koodia käytettäessä saadaan konekoodi, jossa verrattuna perinteisen ohjelmointikielen kääntäjän luomaan koodiin, jossa sekä muuttujat että paluuosoitteet alirutiineista sijoitetaan yhteen pinoon, ei ole "vedä" -toimintoja. ja pudota” aliohjelman parametreja. Paluupinona käytetään prosessorin pääpinoa, tietopino on järjestetty ohjelmiston avulla.
Käytettäessä muuta säiketettyä koodia kuin aliohjelmakoodia, vain konekoodista koostuvia Forth-määritelmiä kutsutaan primitiiveiksi . Tällaisessa kierteitetyssä koodissa he usein yrittävät käyttää pääprosessoripinoa tietopinona ja päästä käsiksi siinä olevaan dataan koneohjeiden popja push.
Yksi epäsuoran säikeitetyn koodin käytön ei-ilmeisistä eduista on, että kaikki natiivi koodi, eli primitiivit, kooditulkkikutsut ja muuttujat, voidaan sijoittaa yhteen koodisegmenttiin, jota ei voida muuttaa. Kaikki muu Forth-koodi sijaitsee datasegmentissä. Näitä segmenttejä voi olla monia, ja yhden segmenttinumeron kanssa on helpompi työskennellä kuin kahdella.
Neljännet järjestelmät voivat myös käyttää tavukoodia loogisena päätelmänä epäsuoran säikeitetyn koodin ja taitetun kierteitetyn koodin kehittämiselle osoitetaulukon kanssa. Tässä tapauksessa ohjelmakoodi (Forth) on tavusarja tai jonkin keksityn virtuaalisen prosessorin koodi. Tämän koodin suorittamiseksi on oltava 256 osoitteen taulukko (2-tavuinen, 4-tavuinen tai 8-tavuinen), jossa Forth-primitiivit tai kompleksiset määritelmät sijaitsevat.
Tämä vaihtoehto eroaa hyvin muista koodityypeistä ja ansaitsee erityistä huomiota.
Esimerkki .SIGN-sanan määritelmästä, joka tulostaa sopivan lauseen pinon yläosassa olevan numeron etumerkistä riippuen:
\ Tulosta numeron etumerkki : .SIGN ( n -- ) ?DUP 0=JOS ." NOLLA" MUU 0> JOS ." POSITIIVINEN NUMERO" MUUTA ." NEGATIIVINEN NUMERO" SIIN SITTEN ;Esimerkki todellisesta koodista, joka luo merkkijonovakion Forthissa hyväksytyssä muodossa (laskurilla):
\ Luo "vakio" merkkijonosta : S-VAKIO ( c-addr u "<välilyönnit>nimi" -- ) LUODA DUP, 0?DO DUP C@C,CHAR+ LOOP DROP 0 C, TEKEE> DUP CELL+ SWAP @ ;Tämä esimerkki luo sanan määritelmän namekäyttämällä sanaa CREATE. Kun sana nimi suoritetaan, pinoon sijoitetaan sen muistialueen osoittimen osoite, joka oli sanan käännöshetkellä. Jotta sitä voitaisiin jotenkin käyttää, siihen kirjoitetaan merkkijono ("käännetty"). Kun sana suoritetaan, sanan jälkeen määritetyt sanat suoritetaan DOES>.
Tässä esimerkissä on siis luotu uusi syntaktinen rakennelma. Samanlaisia ominaisuuksia tarjotaan harvoin muissa ohjelmointikielissä.
Uusien syntaktisten rakennelmien luomisen lisäksi yksi Forthin tehokkaimmista ominaisuuksista on kyky häiritä käännösprosessia välittömän suoritussanoilla (välittömät sanat).
Esimerkkejä tällaisista vakiosanoista:
[ - Vaihtaa väliaikaisesti suoritustilaan (itse asiassa usein vain kirjoittaa 0:n STATE-muuttujaan).
] — Vaihda takaisin käännöstilaan.
LITERAL - Kokoa pinon päällä oleva luku vakioksi. Se on myös välittömän täytäntöönpanon sana.
Esimerkkikoodi, jossa näitä sanoja käytetään:
\ Tietyn tiedon koko kilotavuina 16 VAKIO koko \ Tulosta raportti kilotavujen muuntamisesta tavuiksi :raportti(-) koko . ." kilotavut vastaavat " [ koko 1024 * ] LITERAL . "tavua" ;Yksi Forthin kiistan toistuvista teemoista on sen paikka "klassisten" imperatiivisten kielten joukossa. Forth-ohjelmilla on erittäin epätavallinen ulkoasu:
Mestari Yodan puheen salaisuus paljastui:
Old Fortin ohjelmoija oli vain hän.
Yodan puheen paljastettu salaisuus on:
Vain vanha Forth-ohjelmoija Yoda oli. [viisitoista]
Nämä ominaisuudet määrittävät Forthin kielen edut ja haitat:
Ehkä se, mikä todella haittaa Fortin kehitystä, on "raskas perintö", joka tuli pienitehoisista koneista, joita varten se alun perin luotiin. ANSI FORTH 94 -standardissa on esimerkiksi seuraavat ominaisuudet:
Monet näistä ominaisuuksista johtuvat siitä, että standardin hyväksymisajankohtana oli monia huonosti yhteensopivia Forth-järjestelmiä, jotka perustuivat kahteen osittain erilaiseen standardiin vuosilta 1979 ja 1983.
Ohjelmointikielet | |
---|---|
|