Frem | |
---|---|
Semantik | bydende nødvendigt |
Sprog klasse | programmeringssprog , fortolket programmeringssprog og kompileret programmeringssprog |
Udførelsestype | tolk/kompilator |
Dukkede op i | 1971 |
Forfatter | Charles H. Moore |
Type system | uskrevet |
Større implementeringer | gForth , pForth, kForth, SP-Forth [1] , win32forth [2] |
Dialekter | FORTH-79, FORTH-83, ANSI FORTH 1994, ColorForth , RetroForth . Forth 2012 Standard |
Blev påvirket | APL , Lisp |
påvirket | PostScript , Factor og andre sammenhængende sprog |
Mediefiler på Wikimedia Commons |
Forth ( eng. Forth ) er et af de første sammenkædede programmeringssprog , hvor programmer er skrevet som en sekvens af leksemer ("ord" i terminologien i Forth-sproget). Matematiske udtryk er repræsenteret ved postfix- notation, når du bruger stak -notation. Understøtter mekanismer til meta-udvidelse af sprogets semantik og syntaks for at tilpasse sig det ønskede emneområde. Syntaksen på basisniveau i Forth er enkel og består af en enkelt regel: "alle definitioner er adskilt af mellemrum". Forth definitioner kan have enhver kombination af tegn.
En række egenskaber, nemlig interaktivitet , fleksibilitet og nem udvikling, gør Forth til et effektivt sprog til anvendt forskning og værktøjsopbygning. Indlejrede kontrolsystemer er oplagte anvendelsesområder for dette sprog . På grund af sin enkelhed er compileren , og ofte den Forth compiler , let implementeret for langt de fleste mikrocontrollere og bruges også som et krydsprogrammeringsværktøj . Det bruges også ved programmering af computere , der kører forskellige operativsystemer eller som et uafhængigt operativsystem.
The Forth-sproget blev skabt af Charles X. Moore i slutningen af 1960'erne og begyndelsen af 1970'erne. Moore kaldte sit sprog for fjerde , idet han mente, at det ville være fjerde generation af computersprog . Men da han arbejdede på en IBM 1130 , som tillod navne sammensat af højst fem store bogstaver, blev navnet konverteret til FORTH ( eng. frem - frem). Moores første eksperimenter med at skabe en simpel fortolker, der gør det lettere at skrive programmer til styring af astronomisk udstyr, går tilbage til slutningen af 1950'erne. [3]
Siden 1971 arbejdede Moore ved National Radio Astronomy Observatory , hvor han deltog i udviklingen af programmer til indsamling og behandling af data modtaget af radioteleskopet . Det var da den første implementering af Forth-sproget dukkede op. Moores samarbejdspartner Elizabeth Rather , som kan betragtes som verdens anden fortprogrammør, deltog også i dette arbejde .
Det nyoprettede sprog blev accepteret som det vigtigste programmeringssprog af American Astronomical Society . Senere, i 1973, grundlagde Charles Moore og Elizabeth Rather FORTH, Inc [4] , hvor sproget blev overført til mange platforme i løbet af det næste årti.
I slutningen af 1970'erne blev FORTH Interessegruppe (FIG) dannet af programmører, der var interesserede i at udvikle sproget. Denne gruppe udviklede konceptet FIG Forth Model, et offentligt tilgængeligt frem system, der nemt kan overføres til populære computerarkitekturer. Dette Forth referencesystem, FIG-FORTH, betragtes ofte som den originale sprogstandard.
Ideen om officiel standardisering af Forth stammer oprindeligt fra International Association of Astronomers ( English Astronomical Sciences, AST ). I maj 1977 blev der ved et møde på Kitt Peak National Observatory ( USA ) udviklet en ordliste over sproget Forth, betegnet som AST.01.
I februar 1978 blev FORTH-77-standarden vedtaget i Utrecht , rettet mod mikrocomputerimplementering .
I oktober 1979 sluttede et møde på Santa Catalina Island ( Californien ) med udviklingen af FORTH-79 standarden, som gælder for alle typer computere.
I efteråret 1983 blev der afholdt et møde for at udvikle den næste standard, godkendt i 1984 som FORTH-83. Fort-83-standarden adskiller sig fra Fort-79-standarden i nogle detaljer, men ikke i substansen.
I 1988 blev SIGFORTH [5] gruppen organiseret som en del af ACM ; der var også en tilsvarende russisk ACM-gruppe (formand - Prof. S. N. Baranov ( St. Petersborg , SPIIRAS )). SIGFORTH eksisterer nu som en del af den generelle SIGPLAN-
I 1994, efter en langvarig forhandling, der involverede mange interesserede firmaer, blev ANSI -sprogstandarden Forth vedtaget. [6]
Den nuværende Forth-sprogstandard blev vedtaget i 2012. [7]
Et velkendt eksempel på Forts succes er dets brug i softwaren til et dybhavsfartøj, når man søgte efter Titanic i 1985 . Fort blev også brugt i softwaren til spektrografen på rumfærgen , i mikromoduler til styring af kunstige jordsatellitter, til kontrolsystemet i Riyadh lufthavn , computersynssystemer , automatisering af blodanalyse og kardiologisk kontrol, lommeoversættere.
Den fjerde dialekt bruges i OpenBoot , den underliggende computersoftware baseret på SPARC- og PowerPC-processorer .
I begyndelsen af 1980'erne skabte John Warnock og Chuck Geschke fra Adobe Systems PostScript-sproget [8] . På trods af sprogens ligheder bemærkede John Warnock [9] at Forth ikke var en indflydelse på skabelsen af PostScript.
Der er processorer og controllere, der understøtter sprogets beregningsmodel på hardwareniveau. Mange open source- implementeringer af Forth er blevet skabt til forskellige hardwareplatforme. Separate firmaer (blandt hvilke det først og fremmest skal bemærkes, FORTH, Inc. grundlagt af Charles Moore og det britiske firma MicroProcessor Engineering Ltd. [10] ) leverer kommercielle versioner af sproget med forskellige muligheder.
To hjemmecomputerspil fra Electronic Arts skabt i 1980'erne blev skrevet i Forth: Worms? (1983) [11] og Starflight (1986). [12] Canon Cat (1987) brugte Forth som systemprogrammeringssprog .
EuroForth-konferencer afholdes årligt, herunder i Rusland, England, Østrig, Tyskland, Spanien, Tjekkiet (tidligere i Tjekkoslovakiet). [13]
Hoveddelen af Forth-systemet er en sammenkædet liste over ord , eller ordbog , hvorfra et ord kaldes ved navn for at udføre specifikke funktioner. Forth programmering består i at definere nye ord baseret på de ord, der tidligere er defineret i ordbogen. Når nye ord først er samlet i en ordbog, adskiller de sig ikke i form fra ord, der allerede er i ordbogen. Beskrivelsen af et ord i en ordbog kaldes en post .
Strukturen af en "typisk" Forth ordbogspost er:
Konventionelt kan Forth-artikler opdeles i to kategorier: artikler på lavt niveau og fjerde artikler . Artikler af den første type indeholder i kodefeltet en pointer til en procedure i målprocessorens koder, som direkte udfører ordets semantik. Parameterfeltet for sådanne artikler indeholder de parametre, der er overført til proceduren, eller selve dens kode. Fjerde artikler indeholder pointere til andre artikler i parameterfeltet, og kodefeltet peger på en speciel procedure kaldet en linkfortolker . I praksis afhænger artiklens struktur af implementeringen, men ligner som regel den, der er diskuteret ovenfor. Princippet, der bruges i parameterfeltet i en fjerde artikel, kaldes trådkode , og linkfortolkeren kaldes en virtuel videre maskine .
Grammatisk er teksten, der behandles af Forth- oversætteren , en sekvens af tokens ( eng. token ), adskilt af mellemrum og ende-på-linje-tegn. Indtastningsstrengoversætteren vælger det næste token og søger efter det i den aktuelle ordbog, og søgningen udføres fra nyere ord til ældre. Hvis ordet ikke findes, forsøges det at fortolke tokenet som en talindtastning, som, hvis det lykkes, skubbes op på toppen af stakken. Hvis tokenet matcher det Forth-ord, analyseres den aktuelle tilstand af Forth-systemets kompileringsflag . Hvis flaget slettes, udføres ordet - kontrol overføres i henhold til markøren i kodefeltet for den fundne artikel. Hvis flaget er sat, kompileres ordet , det vil sige, at en pointer til dets kodefelt tilføjes til den aktuelt oprettede artikel. Hvis et tal er blevet oversat, springes det ud af stakken og kompileres til en bogstavelig kode , hvis udførelse inde i en ordbogspost skubber nummeret til toppen af stakken. Derudover kan ord indeholde et øjeblikkeligt flag , i hvilket tilfælde de altid udføres.
Mekanisme til at overføre parametre mellem ord:
Sproget giver en måde at arbejde med systemhukommelse som en lineær region.
En obligatorisk komponent i systemet er også returstakken. Tilgængelig programmatisk for at ændre programmets kontrolflow.
Alt ovenstående gælder kun for konceptet Fort i den første tilnærmelse. Forth er ikke ligefrem et programmeringssprog; snarere overlapper det forestillingen om et programmeringssprog. Forth er mere en virtuel maskine og ForthOS-operativsystem. [fjorten]
Syntaksen og semantikken i Forth kan udvides til ethvert andet programmeringssprog lige på tidspunktet for fortolkningen (kompileringen) af et Forth-program. At bruge Forth som et metasprog er praktisk på grund af tilgængeligheden af Forth-værktøjer, der understøtter de sprog, der allerede er i Forth-systemet. Alle ressourcer i Forth-systemet er tilgængelige for brugeren og præsenteres i form af ordbogsposter. Som regel har brugerdefinerede ordbogsposter nøjagtig den samme repræsentation i Forth-systemet som alle andre ordbogsposter, der udgør hele Forth-systemet.
En eller anden form for trådet kode bruges som en maskinrepræsentation af et kompileret videre program .
Ved brug af subrutinekode opnås maskinkode, hvor der i sammenligning med koden genereret af compileren af et konventionelt programmeringssprog, hvor både variable og returadresser fra subrutiner er placeret på en enkelt stak, er der ingen operationer for "træk og drop" af subrutineparametre. Processorens hovedstack bruges som returstakken, datastakken er organiseret af software.
Når du bruger anden trådkode end subrutinekode, kaldes Forth-definitioner, der kun består af maskinkode, for primitiver . I sådan en trådet kode forsøger de ofte at bruge hovedprocessorstakken som en datastak, og adgang til de data der ligger på den i form af maskininstruktioner popog push.
En af de ikke så indlysende fordele ved at bruge indirekte trådet kode er, at al native kode, det vil sige primitiver, kodefortolkerkald og variabler, kan placeres i ét kodesegment, som ikke vil være tilgængeligt for ændringer. Al anden Forth-kode findes i datasegmentet. Der kan være mange af disse segmenter, og det er lettere at arbejde med et enkelt segmentnummer end med to.
Forth-systemer kan også bruge bytekode som en logisk konklusion på udviklingen af indirekte gevindkode og foldet gevindkode med en adressetabel. I dette tilfælde er programkoden (Forth) en sekvens af bytes eller koden for en opfundet virtuel processor. For at udføre denne kode skal der være en tabel med 256 adresser (2-byte, 4-byte eller 8-byte), hvor Forth-primitiver eller komplekse definitioner er placeret.
Denne mulighed er meget forskellig fra andre typer kode og fortjener særlig opmærksomhed.
Et eksempel på en .SIGN-orddefinition, der udskriver den passende sætning afhængigt af tegnet på tallet øverst i stakken:
\ Udskriv tegnet for et tal : .SIGN ( n -- ) ?DUP 0=HVIS ." NUL" ANDET 0>HVIS ." POSITIVT NUMMER" ANDET ." NEGATIVT TAL" SÅ DEREFTER ;Et eksempel på rigtig kode, der skaber en strengkonstant i den form, der accepteres i Forth (med en tæller):
\ Opret en "konstant" fra en streng : S-CONSTANT ( c-addr u "<mellemrum>navn" -- ) SKAB DUP , 0?DO DUP C@ C, CHAR+ LOOP DROP 0 C, GØR> DUP CELL+ SWAP @ ;Dette eksempel opretter en orddefinition nameved hjælp af ordet CREATE. Når ordnavnet udføres, vil adressen på markøren til hukommelsesområdet, der var på tidspunktet for kompileringen af ordet, blive placeret på stakken. For at det kan bruges på en eller anden måde, er der skrevet en streng der ("kompileret"). Når et ord udføres, udføres de ord, der er angivet efter ordet DOES>.
I dette eksempel er der således skabt en ny syntaktisk konstruktion. Lignende funktioner findes sjældent i andre programmeringssprog.
Ud over at skabe nye syntaktiske konstruktioner er en af Forths mest kraftfulde funktioner evnen til at forstyrre kompileringsprocessen med øjeblikkelige eksekveringsord (umiddelbare ord).
Eksempler på sådanne standardord:
[ - Midlertidigt at skifte til udførelsestilstand (skriver faktisk ofte bare 0 til STATE-variablen).
] — Skift tilbage til kompileringstilstand.
LITERAL - Kompiler tallet øverst på stakken som en konstant. Det er også et ord om øjeblikkelig udførelse.
Eksempel kode hvor disse ord bruges:
\ Nogle datastørrelser i kilobytes 16 KONSTANT størrelse \ Udskriv en rapport om konvertering af kilobytes til bytes :rapport(-) størrelse. ." kilobytes svarer til " [størrelse 1024*] LITERAL. "bytes" ;Et af de tilbagevendende temaer i Forths kontrovers er dens plads blandt de "klassiske" imperative sprog. Forth programmer har et ekstremt usædvanligt udseende:
Mester Yodas talehemmelighed afslørede: Den
gamle Fort-programmør var bare ham.
Mysteriet med Yodas tale afsløret er:
Bare en gammel Forth-programmør Yoda var. [femten]
Disse funktioner bestemmer fordele og ulemper ved Forth-sproget:
Måske er det, der virkelig hæmmer udviklingen af fortet, den "tunge arv", der kom fra de lavkapacitetsmaskiner, som det oprindeligt blev skabt til. ANSI FORTH 94-standarden har for eksempel følgende funktioner:
Mange af disse funktioner skyldes det faktum, at der på det tidspunkt, hvor standarden blev vedtaget, var mange dårligt kompatible Forth-systemer, der var baseret på to delvist forskellige standarder fra 1979 og 1983.
Programmeringssprog | |
---|---|
|