Redigerer
Forth (programmeringsspråk)
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
{{infoboks programmeringsspråk}} '''Forth''' er et [[programmeringsspråk]] og utviklingsmiljø utviklet av Charles Moore på slutten av 1960-tallet / begynnelsen av 1970-tallet. Språket er sentrert rundt bruken av en [[stack (datatype)|stack]], og er kanskje mest kjent for sin postfiks-notasjon – også kalt [[omvendt polsk notasjon]]. Forth bruker en blanding av kompilering og sanntidstolkning, og er i stand til å kompilere seg selv til en ny kompilator (såkalt metakompilering). Den grunnleggende enheten som kan utføres eller kjøres i et Forth-system er et '''ord'''. Ord er organisert i ordlister (dictionaries), og man kan enkelt lage nye ord ved hjelp av eksisterende ord. Ord skilles med mellomrom, noe som gjør tolkning av språket enkelt. Programmeringsspråket ble tatt opp som en [[ANSI]] standard i 1994, og kalles i den varianten for '''ANS Forth'''.<ref>{{Kilde www |url=http://forth.sourceforge.net/standard/dpans/ |tittel=DPANS'94 |besøksdato=2008-05-22}}</ref> Det har imidlertid vært tidligere defacto standarder i form av '''FORTH-79'''<ref>{{Kilde www |url=http://www.dartmouth.edu/~lmaurer/forth/Forth-79.pdf |tittel=The Forth-79 Standard |besøksdato=2008-05-21 |format=PDF |url-status=død |arkivurl=https://web.archive.org/web/20080724043117/http://www.dartmouth.edu/~lmaurer/forth/Forth-79.pdf |arkivdato=2008-07-24 }}</ref> og '''FORTH-83'''<ref>{{Kilde www |url=http://forth.sourceforge.net/standard/fst83/ |tittel=The Forth-83 Standard |besøksdato=2008-05-21}}</ref>, satt ned av Forth Interest Group (FIG) i hhv. 1979 og 1983. Det er også et initiativ på gang for å oppgradere den aldrende ANS Forth standarden, i form av '''Forth 200x'''.<ref>{{Kilde www|url=http://www.forth200x.org/forth200x.html|tittel=Forth 200x|besøksdato=2008-05-23}}</ref> ==[[Hello world]] eksempel== Under er [[Hello world]] implementert i Forth: : hello ( -- ) CR ." Hello World!" ; Dette definerer et nytt ord '''hello''', som vil skrive ut et linjeskift (CR – carriage return) etterfulgt av teksten «Hello World!» når det kjøres. hello Hello World! ok Parentesene regnes som kommentarer og viser en vanlig konvensjon for å angi hvilken innvirkning det definerte ordet vil ha på stacken når det kjøres. I dette tilfelle vil ikke stacken endres, noe vi angir med en parentes hvor kun skillet mellom før og etter kjøring er listet opp. Forth skriver ut « ok» etterfulgt av linjeskift når den er klar til å motta en ny kommando. ==Kjøremiljø== Kjøremiljøet til et Forthsystem er svært enkelt. En kommandolinje hvor hvert ord som skrives inn tolkes som et Forth-ord. I ''Hello World''-eksemplet ovenfor er ''':''' (kolon) et ord som i Forth betyr «definér et nytt ord.» Det nye ordet kan kalles som en rutine i andre språk, og navnet er det neste ordet på linjen. Det neste ordet som blir tolket er '''(''' (parentes) som betyr «ignorer alt som kommer etter inntil vi finner en sluttparentes eller input slutter.» Altså en måte å lage kommentarer på. De resterende ordene utgjør selve rutinen, og ''';''' (semikolon) avslutter definisjonen. Forth er i utgangspunktet et [[Scriptspråk|tolket språk]], men har også en ''kompileringssemantikk'' som brukes i definisjonen av nye ord. Ord som kun har definert en kompileringssemantikk kan kun brukes i definisjonen av nye ord, mens andre ord kan utføres direkte ved å skrive ordet på kommandolinjen. ===Stacken=== Forth er sentrert rundt en stack. De fleste ord manipulerer denne på en eller annen måte. Stacken kan litt forenklet visualiseres som en stabel, hvor man til enhver tid kun ser det øverste elementet i stabelen. Som en stabel av tallerkner hvor hver tallerken er påskrevet et tall. Noen av de mest primitive operatorene definert av Forth er: ; dup : Lag en kopi av det øverste elementet i stacken og legg det øverst. ; swap : Bytt om rekkefølgen på de to øverste elementene i stacken. ; rot : Hent det tredje elementet nede i stacken og legg det øverst. ; . : (punktum, benevnes '''dot''') Henter det øverste elementet fra stacken og skriver det ut til terminalen. Det nest øverste elementet blir liggende øverst. Tall er i seg selv ord som legger sin egen verdi øverst på stacken. Operatorer som +,-,*,/ er definert som Forth-ord som henter to verdier fra stacken, og legger resultatet av operasjonen øverst. Under er noen eksempler på bruk av stacken: <pre> 4 dup </pre> Her legges verdien 4 på stacken, og dupliseres. Stacken vil nå inneholde to elementer, begge med verdien fire. <pre> 4 5 swap </pre> Her legges verdien 4 på stacken etterfulgt av verdien 5. 5 ligger nå øverst på stacken og 4 nederst. '''swap''' bytter om på de to, så 4 ligger øverst og 5 ligger nederst. <pre> 4 5 – . </pre> Trekker 5 fra 4 og skriver ut resultatet (-1). <pre> 4 5 swap – . </pre> Trekker 4 fra 5 og skriver ut resultatet (1). ===Ord og ordlister=== I Forth definerer man nye ord ved ordet ''':''' (kolon). Nedenfor definerer vi et nytt ord som kvadrerer tallet øverst på stacken: <pre> : square dup * ; </pre> Det nye ordet «square» vil hver gang det kalles utføre operasjonen «dup *», som vil si å duplisere det øverste elementet i stacken, multiplisere de to og legge resultatet tilbake øverst på stacken. Resultatet vil bli at det øverste elementet i stacken har blitt kvadrert. Legg forøvrig merke til mellomrommene mellom «:» og «square» og mellom uttrykket og «;». Både «:» og «;» er egne ord i Forth. «square» er nå definert som et fullverdig ord på linje med alle andre ord som er definert i Forth. Vi kan bruke dette videre til å lage et ord som opphøyer verdien av det øverste elementet på stacken i tredje potens: <pre> : cube dup square * ; </pre> En kjøring av disse ordene vil f.eks. kunne se slik ut: <pre> 4 square . 16 ok 5 cube . 125 ok </pre> Forth skriver ut resultatet og «ok» på samme linje idet vi trykker enter-tasten. (Noen versjoner vil skrive svaret på neste linje i stedet.) Både ord som er ferdigdefinerte fra Forth sin side, og ord du definerer selv lagres i en ordliste. Samme ord kan lagres flere ganger. Den nye definisjonen av ordet vil da gjelde for all bruk etter det er definert, men vil ikke endre definisjonen til andre ord som bruker den gamle definisjonen. Man kan glemme definisjonen av et ord ved å bruke ordet '''forget'''. Forget vil få Forth til å glemme det ordet du ber den om ''i tillegg til alle ord som er definert etter dette''. Forth kan operere med flere ordlister, og kan veksle mellom dem. ===Interpreter=== Forth er et utviklingsmiljø like mye som et programmeringsspråk. Miljøet er ganske enkelt en kommandolinje som tolker det som blir skrevet på den som Forth-ord. Interpreteren er i seg selv et Forth ord, og kan benyttes i interaktive Forth-programmer. Å utvikle programmer i Forth består tradisjonelt for en stor del av å lage nye ord, og teste dem nesten øyeblikkelig på kommandolinjen. Dette gir en veldig interaktiv utviklingsmodell, og oppfordrer til utvikling i små inkrementelle skritt. == Se også == * [[Programvareutvikling]] * [[Liste over programmeringsspråk]] ==Referanser== <references/> ==Eksterne lenker== * {{Offisielt nettsted}} * [http://www.forth.org/ FIG (Forth Interest Group)] * [http://www.forth.com/resources/evolution/index.html The Evolution of Forth] * [http://directory.fsf.org/project/gforth gforth (GNU Forth interpreter)] * [https://web.archive.org/web/20080516063056/http://retroforth.org/ RetroForth] * [http://bigforth.sourceforge.net/ BigFORTH] * [http://solidcoding.blogspot.com/2008/12/wforth-javascript-forth-interpreter.html wForth] En Forth skrevet i [[javascript]] hvor du kan prøve ut enkle Forth operasjoner direkte. {{programmeringsspråk}} {{Autoritetsdata}} [[Kategori:Programmeringsspråk]]
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Maler som brukes på denne siden:
Mal:Autoritetsdata
(
rediger
)
Mal:Bilde fra Wikidata
(
rediger
)
Mal:Hlist/styles.css
(
rediger
)
Mal:ISOtilNorskdato
(
rediger
)
Mal:Infoboks/styles.css
(
rediger
)
Mal:Infoboks bilde
(
rediger
)
Mal:Infoboks dobbeltrad
(
rediger
)
Mal:Infoboks overskrift
(
rediger
)
Mal:Infoboks programmeringsspråk
(
rediger
)
Mal:Infoboks rad
(
rediger
)
Mal:Infoboks slutt
(
rediger
)
Mal:Infoboks start
(
rediger
)
Mal:Kilde www
(
rediger
)
Mal:Navboks
(
rediger
)
Mal:Offisielle lenker
(
rediger
)
Mal:Offisielt nettsted
(
rediger
)
Mal:Programmeringsspråk
(
rediger
)
Modul:Arguments
(
rediger
)
Modul:Citation/CS1
(
rediger
)
Modul:Citation/CS1/COinS
(
rediger
)
Modul:Citation/CS1/Configuration
(
rediger
)
Modul:Citation/CS1/Date validation
(
rediger
)
Modul:Citation/CS1/Identifiers
(
rediger
)
Modul:Citation/CS1/Utilities
(
rediger
)
Modul:Citation/CS1/Whitelist
(
rediger
)
Modul:External links
(
rediger
)
Modul:External links/conf
(
rediger
)
Modul:External links/conf/Autoritetsdata
(
rediger
)
Modul:External links/conf/Offisielle lenker
(
rediger
)
Modul:Genitiv
(
rediger
)
Modul:ISOtilNorskdato
(
rediger
)
Modul:Navbar
(
rediger
)
Modul:Navbar/configuration
(
rediger
)
Modul:Navboks
(
rediger
)
Modul:Navbox/configuration
(
rediger
)
Modul:Navbox/styles.css
(
rediger
)
Modul:Reference score
(
rediger
)
Modul:Reference score/conf
(
rediger
)
Modul:Reference score/i18n
(
rediger
)
Modul:String
(
rediger
)
Modul:Wikidata2
(
rediger
)
Modul:WikidataBilde
(
rediger
)
Modul:WikidataDato
(
rediger
)
Denne siden er medlem av 2 skjulte kategorier:
Kategori:Artikler med offisielle lenker og uten kobling til Wikidata
Kategori:Artikler uten offisielle lenker fra Wikidata
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon