TDT4165: Programmeringsspråk
# Installasjon
## OS X
For å installere Oz på OS X, må du følge disse enkle steg.
### Noob-versjon
- Gå til <http://www.aquamacs.org/>
- Last ned Aquamacs for ```Mac OS X```
- Gå til <http://www.mozart-oz.org/download/view.cgi>
- Velg ```MacOS X Packages```
- Installer begge pakkene
- Åpne Aquamacs for så å avslutte det igjen
- Åpne Mozart og du er klar til å programmere Oz!
### Pro-versjon
> Notabene: Du kommer til å trenge tolkinga av språket også, så du trenger å gjennomføre noob-versjonen også
- Gå til <http://www.mozart-oz.org/download/view.cgi>
- Velg ```MacOS X Packages```
- Installer denne pakken
- Gå til Terminalen din og legg til i ```.bash_profile``` dette: ```PATH="/Applications/Mozart.app/Contents/Resources/bin:$PATH"```
- Lagre og skriv ```source .bash_profile``` i Terminalen
- Du har nå en Oz-kompilator ved hjelp av funksjonen ```ozc```
# Feilmeldinger
## OS-error
Denne feilen er testet på Mac OS X.
Noen ganger kan man være så uheldig å komme over en OS-error. Dette skjer ofte når man kjører et program som åpner tk.exe (du har altså brukt Browse i fortolkeren). Ikke avslutt tk.exe uten videre. Skulle du gjøre dette må du restarte hele programmet for å unngå denne feilen.
## Expression at Statement position
Denne feilen forekommer flere ganger. Stort sett er det fordi at du har flere if-setninger.
Bad:
if X then
X
end
if Y then
Y
end
X + Y
Good:
if X then
X
elseif Y then
Y
else
X + Y
end
# Syntaks, semantikk (og DSKL)
## Syntaks
Syntaks omfatter tillatt struktur i et språk, vanligvis ved bruk av grammatikk. Makrosyntaks omhandler hvordan en gruppe tokens kan settes sammen til et program. Mikrosyntaks omhandler hvordan tokens blir bygd opp.
## Semantikk
Hvordan elementene i syntaksen skal tolkes ved programutførelse.
## DSKL
Forkortelse for Deklarativt Sekvensielt Kernel Language, kjernespråket.
## Abstrakt maskin for DSKL:
Semantisk stakk: en stakk av semantiske utrykk(statements). Det øverste elementet er det neste som skal utføres.
Semantisk utrykk(statement): består av et utrykk(statement) og et miljø(environment) E.
Miljøet E er en mapping fra identifikatorer til variabler.
Single Assignement store: inneholder alle variabler som har blitt deklarert og verdiene deres (for bundne variabler).
## Syntaktisk sukker
Elementer i et programmeringsspråk som ikke har noen direkte funksjon/ikke tilføyer noe verdi til språket.
- For DSKL: (eksempel fra eksamen 2010):
- Tillate flere variabler å bli deklarert samtidig. Forklar syntaks og semantikk:
endre fra
til
The semantics is easily explained by translating into the kernel language:
local X0 X1 ... XN in <statement> end
is translated to
local X0 in
local X1 in
...
local XN in
<statement>
end
...
end
end
## Linguistisk abstraksjon
-for DSKL
Unntakshåndtering (exceptions)
Unntak endrer beregningsmodellen til DSKL, for unntak kan ikke utrykkes ved grunnleggende DSKL.
hvordan utvide DSKL for å støtte unntak:
syntaks:
<statement> ::= try <statement>1 catch <id>C then <statement>2 end
<statement> ::= raise <id>R end
Semantikk er forklart i henhold til den abstrakte maskinen:
Begge med miljøet E.
OBS! A semantic statement with catch ... is the same as the skip statement.
Ved semantiske utrykk med raise, pop det semantiske utrykk til catch... oppstår.
## Datastrukturer
declare
fun {Counter} C Increase Get in
{NewCell 0 C}
proc {Increase}
Old in
{Exchange C Old Old}
{Exchange C _ Old+1}
end
fun {Get}
Old in
{Exchange C Old Old}
Old
end
counter(increase:Increase get:Get)
end
# Deklarativitet
I følge læreboka er en deklarativ programenhet tilstandsløs, uavhengig og deterministisk.
samtidige program(concurrent programs) kan være deklarative. Oz dataflyt-variabler garanterer at variablene i en utførelse av programmet vil alltid bindes på samme måte.
## Observerbar deklarativitet:
2) Alle enkle bruk av en programenhet under oppsyn vil alltid gi samme output uavhengig av input.
# Funksjonell og høyere-ordens programmering
## Høyere-ordens programmering
Vil si å bruke funksjoner som første-klasses objekter/verdier.
## Prosedural abstraksjon
Gir en gruppe av uttrykk et navn som kan bli brukt for å utføre dem.
## Generisitet
Tar uttrykk ut av en prosedyre of bruker et argument for å kjøre vilkårlige argumenter i deres sted.
## Instantiering
Å returnere en mer spesifikk prosedyre (en prosedyre med færre argumenter).
## Innebygging (embedding)
Å lagre en prosedyre i en datastruktur.
## Tillukning(closure)
En tillukning er en prosedyreverdi som består av prosedyredefinisjoner og miljøet hvor den ble definert.
# Message-based Concurrecny
## Porter:
-Sending til porter:
For å sende en verdi til en port, bruk {Send Port value}. Når du sender noe til en port, blir strømmen som er assosiert med porten utvidet med verdien som ble sendt. Porten blir oppdatert til å bruke den nye, ubundne enden av strømmen.
- utvidelse av DSKL for å støtte porter:
Multiset av semantiske stakker: Hver semantisk stakk representerer en tråd. Multiset vil erstatte den enkle semantiske stakken.
Muterbar store: Inneholder alle par av tildelte porter og deres nåverende strøm-ende.
# Lat evaluering
Verdien evalueres ikke før det faktisk trengs. Det betyr at verdien må bli spesifisert i henhold til noe som blir evalutert (f.eks en funksjon). Funksjonen må bli kalt for å beregne verdien første gang den trengs. Etter dette forblir verdien kjent.
## Ivrig (eager) evaluering
Motstykket til lat evaluering.
_Eksempel fra 2010:
Gi et kodeeksempel som illustrerer forskjellen mellom de to:
fun {Foo} {Show foo} 1 end
fun lazy {Bar} {Show bar} 2 end
fun {Baz} {Show baz} 3 end
fun {Calc A B C}
A + B + C
end
{Show {Calc {Foo} {Bar} {Baz}}}
_Det vil vise:
foo
baz
bar
6
Som demonstrer at verdien fra Bar-kallet kun evalueres når det faktisk trengs i en beregning, og de to andre kallene blir evaluert før Calc blir kalt.
# Oppslagsverk
Her er noen gode ressurser du kanskje vil få bruk for:
- <http://www.eecs.ucf.edu/~leavens/COP4020Spring12/running_oz.shtml>
- <http://strasheela.sourceforge.net/strasheela/doc/Basics-1.html>