Vidare | |
---|---|
Semantik | nödvändigt |
Språkklass | programmeringsspråk , tolkat programmeringsspråk och kompilerat programmeringsspråk |
Utförandetyp | tolk/kompilator |
Framträdde i | 1971 |
Författare | Charles H. Moore |
Typ system | oskrivet |
Stora implementeringar | gForth , pForth, kForth, SP-Forth [1] , win32forth [2] |
Dialekter | FORTH-79, FORTH-83, ANSI FORTH 1994, ColorForth , RetroForth . Forth 2012 Standard |
Blivit påverkad | APL , Lisp |
påverkas | PostScript , Factor och andra sammanlänkade språk |
Mediafiler på Wikimedia Commons |
Forth ( eng. Forth ) är ett av de första konkatenativa programmeringsspråken , där program skrivs som en sekvens av lexem ("ord" i terminologin för det Forth språket). Matematiska uttryck representeras av postfix- notation när du använder stacknotation . Stöder mekanismer för meta-extension av språkets semantik och syntax för att anpassa sig till det önskade ämnesområdet. Basnivåsyntaxen i Forth är enkel och består av en enda regel: "alla definitioner är åtskilda av mellanslag". Forth definitioner kan ha vilken kombination av tecken som helst.
Ett antal egenskaper, nämligen interaktivitet , flexibilitet och enkel utveckling, gör Forth till ett effektivt språk för tillämpad forskning och verktygsbyggande. Inbyggda styrsystem är uppenbara användningsområden för detta språk . På grund av sin enkelhet är kompilatorn , och ofta den Forth- kompilatorn , lätt att implementera för de allra flesta mikrokontroller , och används också som ett korsprogrammeringsverktyg . Den används också vid programmering av datorer som kör olika operativsystem eller som en oberoende operativsystemmiljö.
Språket Forth skapades av Charles X. Moore i slutet av 1960-talet och början av 1970-talet. Moore kallade sitt språk för fjärde , och trodde att det skulle vara den fjärde generationens datorspråk . Men eftersom han arbetade på en IBM 1130 , som tillät namn sammansatta av högst fem versaler, konverterades namnet till FORTH ( eng. fram - framåt). Moores första experiment med att skapa en enkel tolk som gör det lättare att skriva program för att styra astronomisk utrustning går tillbaka till slutet av 1950-talet. [3]
Sedan 1971 arbetade Moore vid National Radio Astronomy Observatory och deltog i utvecklingen av program för att samla in och bearbeta data som tas emot av radioteleskopet . Det var då som den första implementeringen av Forth-språket dök upp. Moores samarbetspartner Elizabeth Rather , som kan anses vara världens andra fortprogrammerare, deltog också i detta arbete .
Det nyskapade språket accepterades som det huvudsakliga programmeringsspråket av American Astronomical Society . Senare, 1973, grundade Charles Moore och Elizabeth Rather FORTH, Inc [4] , under vilket språket portades till många plattformar under det följande decenniet.
I slutet av 1970-talet bildades FORTH Interest Group (FIG) av programmerare som var intresserade av att utveckla språket. Denna grupp utvecklade konceptet FIG Forth Model, ett allmänt tillgängligt system som enkelt kan porteras till populära datorarkitekturer. Detta Forth-referenssystem, FIG-FORTH, betraktas ofta som den ursprungliga språkstandarden.
Idén om officiell standardisering av Forth har ursprungligen sitt ursprung inom International Association of Astronomers ( English Astronomical Sciences, AST ). I maj 1977, vid ett möte vid Kitt Peak National Observatory ( USA ), utvecklades en ordlista för Forth-språket, betecknad som AST.01.
I februari 1978 antogs FORTH-77-standarden i Utrecht , som syftar till implementering av mikrodatorer .
I oktober 1979 avslutades ett möte på Santa Catalina Island ( Kalifornien ) med utvecklingen av FORTH-79-standarden, som gäller alla typer av datorer.
Hösten 1983 hölls ett möte för att utveckla nästa standard, godkänd 1984 som FORTH-83. Fort-83-standarden skiljer sig från Fort-79-standarden i vissa detaljer, men inte i sak.
1988 organiserades gruppen SIGFORTH [5] som en del av ACM ; det fanns också en motsvarande rysk ACM-grupp (ordförande - Prof. S. N. Baranov ( St. Petersburg , SPIIRAS )). SIGFORTH finns nu som en del av den allmänna SIGPLAN
1994 , efter en lång förhandling som involverade många intresserade företag, antogs ANSI- språkstandarden Forth. [6]
Den nuvarande språkstandarden Forth antogs 2012. [7]
Ett välkänt exempel på Forts framgång är dess användning i mjukvaran för ett fordon med djuphavsnedstigning, när de letade efter Titanic 1985 . Fort användes också i programvaran för spektrografen på skytteln , i mikromoduler för att kontrollera konstgjorda jordsatelliter, för kontrollsystemet på Riyadhs flygplats , datorseendesystem , automatisering av blodanalys och kardiologisk kontroll, ficköversättare.
Den fjärde dialekten används i OpenBoot , den underliggande datorprogramvaran baserad på SPARC- och PowerPC-processorer .
I början av 1980 -talet skapade John Warnock och Chuck Geschke från Adobe Systems PostScript-språket [8] . Trots likheterna mellan språken, noterade John Warnock [9] att Forth inte var ett inflytande på skapandet av PostScript.
Det finns processorer och kontroller som stöder beräkningsmodellen för språket på hårdvarunivå. Många open source -implementationer av Forth har skapats för olika hårdvaruplattformar. Separata företag (bland vilka det bör noteras, först och främst, FORTH, Inc grundat av Charles Moore och det brittiska företaget MicroProcessor Engineering Ltd. [10] ) tillhandahåller kommersiella versioner av språket med olika möjligheter.
Två hemdatorspel från Electronic Arts skapade på 1980-talet skrevs i Forth: Worms? (1983) [11] och Starflight (1986). [12] Canon Cat (1987) använde Forth som systemprogrammeringsspråk .
EuroForth-konferenser hålls årligen, inklusive i Ryssland, England, Österrike, Tyskland, Spanien, Tjeckien (tidigare i Tjeckoslovakien). [13]
Huvuddelen av Forth-systemet är en länkad lista med ord , eller ordbok , från vilken ett ord kallas vid namn för att utföra specifika funktioner. Fjärde programmeringen består av att definiera nya ord baserat på de ord som tidigare definierats i ordboken. När nya ord väl har sammanställts till en ordbok skiljer de sig inte i form från ord som redan finns i ordboken. Beskrivningen av ett ord i en ordbok kallas en post .
Strukturen för en "typisk" fjärde ordbokspost är:
Konventionellt kan Forth-artiklar delas in i två kategorier: lågnivåartiklar och fjärdeartiklar . Artiklar av den första typen innehåller i kodfältet en pekare till en procedur i koderna för målprocessorn som direkt utför ordets semantik. Parameterfältet för sådana artiklar innehåller parametrarna som skickas till proceduren, eller själva koden. Fjärde artiklarna innehåller pekare till andra artiklar i parameterfältet, och kodfältet pekar på en speciell procedur som kallas länktolkare . I praktiken beror artikelns struktur på implementeringen, men liknar som regel den som diskuterats ovan. Principen som används i parameterfältet för en fjärde artikel kallas trådad kod och länktolken kallas en virtuell framåt maskin .
Grammatiskt är texten som behandlas av Forth- översättaren en sekvens av tokens ( eng. token ), åtskilda av mellanslag och radsluttecken. Inmatningssträngsöversättaren väljer nästa token och söker efter den i den aktuella ordboken, och sökningen utförs från nyare ord till äldre. Om ordet inte hittas görs ett försök att tolka token som en nummerinmatning, som, om den lyckas, skjuts upp på toppen av stapeln. Om symbolen matchar det Forth ordet, analyseras det aktuella tillståndet för Forth-systemets kompileringsflagga . Om flaggan rensas, exekveras ordet - kontrollen överförs enligt pekaren i kodfältet för den hittade artikeln. Om flaggan är inställd kompileras ordet , det vill säga en pekare till dess kodfält läggs till den för närvarande skapade artikeln. Om ett nummer har översatts, skjuts det ur stapeln och kompileras till en bokstavlig kod , vars exekvering i en ordbokspost trycker upp numret överst i stapeln. Dessutom kan ord innehålla en omedelbar flagga , i vilket fall de alltid exekveras.
Mekanism för att överföra parametrar mellan ord:
Språket ger ett sätt att arbeta med systemminnet som en linjär region.
En obligatorisk komponent i systemet är också returstacken. Tillgänglig programmatiskt för att ändra programmets kontrollflöde.
Allt ovanstående gäller bara konceptet Fort i den första approximationen. Forth är inte precis ett programmeringsspråk; snarare överlappar det föreställningen om ett programmeringsspråk. Forth är mer en virtuell maskin och ForthOS operativsystem. [fjorton]
Forths syntax och semantik kan utökas till vilket annat programmeringsspråk som helst vid tidpunkten för tolkningen (kompileringen) av ett Forth-program. Att använda Forth som ett metaspråk är bekvämt på grund av tillgängligheten av Forth-verktyg som stöder de språk som redan finns i Forth-systemet. Alla resurser i Forth-systemet är tillgängliga för användaren och presenteras i form av ordboksposter. Som regel har användardefinierade ordboksposter exakt samma representation i Forth-systemet som alla andra ordboksposter som utgör hela Forth-systemet.
Någon form av gängad kod används som en maskinrepresentation av ett kompilerat program .
Vid användning av subrutinkod erhålls maskinkod, där det, i jämförelse med koden som genereras av kompilatorn av ett konventionellt programmeringsspråk, där både variabler och returadresser från subrutiner placeras på en enda stack, det inte finns några operationer för "dra och släpp" av subrutinparametrar. Processorns huvudstack används som returstack, datastacken organiseras av mjukvara.
När du använder annan trådad kod än subrutinkod kallas Forth definitioner som endast består av maskinkod för primitiver . I en sådan gängad kod försöker de ofta använda huvudprocessorstacken som en datastack, och få tillgång till data som ligger på den i form av maskininstruktioner popoch push.
En av de inte så uppenbara fördelarna med att använda indirekt gängad kod är att all inbyggd kod, det vill säga primitiver, kodtolkningsanrop och variabler, kan placeras i ett kodsegment som inte kommer att vara tillgängligt att ändra. All annan Forth-kod finns i datasegmentet. Det kan finnas många av dessa segment, och det är lättare att arbeta med ett enda segmentnummer än med två.
Fjärde system kan också använda bytekod som en logisk slutsats till utvecklingen av indirekt gängad kod och vikt gängad kod med en adresstabell. I detta fall är programkoden (Forth) en sekvens av bytes, eller koden för någon uppfunnen virtuell processor. För att exekvera den här koden måste det finnas en tabell med 256 adresser (2-byte, 4-byte eller 8-byte) där Forth-primitiver eller komplexa definitioner finns.
Det här alternativet skiljer sig mycket från andra typer av kod och förtjänar särskild uppmärksamhet.
Ett exempel på en .SIGN-ordsdefinition som skriver ut lämplig fras beroende på tecknet på siffran överst i stapeln:
\ Skriv ut tecknet för ett tal : .SIGN ( n -- ) ?DUP 0=OM ."NOLL" ANNAN 0>OM ." POSITIVT NUMMER" ANNAT ." NEGATIVT NUMMER" DÅ SEDAN ;Ett exempel på verklig kod som skapar en strängkonstant i den form som accepteras i Forth (med en räknare):
\ Skapa en "konstant" från en sträng : S-CONSTANT ( c-addr u "<mellanslag>namn" -- ) SKAPA DUP , 0?DO DUP C@ C, CHAR+ LOOP DROP 0 C, GÖR> DUP CELL+ SWAP @ ;Det här exemplet skapar en orddefinition namemed ordet CREATE. När ordnamnet exekveras kommer adressen för pekaren till minnesområdet som fanns vid tiden för kompileringen att placeras på stacken. För att den ska kunna användas på något sätt skrivs en sträng där ("kompilerad"). När ett ord exekveras exekveras orden som anges efter ordet DOES>.
I det här exemplet har alltså en ny syntaktisk konstruktion skapats. Liknande funktioner tillhandahålls sällan i andra programmeringsspråk.
Förutom att skapa nya syntaktiska konstruktioner är en av Forths mest kraftfulla funktioner möjligheten att störa kompileringsprocessen med omedelbara exekveringsord (omedelbara ord).
Exempel på sådana standardord:
[ - Byter tillfälligt till exekveringsläge (skriver faktiskt ofta bara 0 till STATE-variabeln).
] — Växla tillbaka till kompileringsläge.
LITERAL - Kompilera numret som för närvarande är överst i stacken som en konstant. Det är också ett ord om omedelbar avrättning.
Exempelkod där dessa ord används:
\ Viss datastorlek i kilobyte 16 KONSTANT storlek \ Skriv ut en rapport om konvertering av kilobyte till byte :Rapportera(-) storlek. ." kilobyte motsvarar " [storlek 1024*] LITERAL. ." bytes" ;Ett av de återkommande teman i Forths kontrovers är dess plats bland de "klassiska" imperativspråken. Forth program har ett extremt ovanligt utseende:
Mästare Yodas talhemlighet avslöjade:
Old Fort-programmerare var bara han.
Mysteriet med Yodas tal som avslöjades är:
Bara en gammal Forth-programmerare Yoda var. [femton]
Dessa funktioner avgör fördelarna och nackdelarna med Forth-språket:
Kanske det som verkligen hämmar utvecklingen av fortet är det "tunga arvet" som kom från de lågkapacitetsmaskiner som det ursprungligen skapades för. ANSI FORTH 94-standarden har till exempel följande egenskaper:
Många av dessa funktioner beror på det faktum att det vid den tidpunkt då standarden antogs fanns många dåligt kompatibla Forth-system som var baserade på två delvis olika standarder från 1979 och 1983.
Programmeringsspråk | |
---|---|
|