Monday, December 6th, 2010
Skriv en kommentar

zuse

I Tyskland fantes det en bygningsingeniør som fikk til de utroligste ting. På grunn av den politiske situasjonen og ikke minst Andre Verdenskrig var det ingen i Storbritania eller USA som visste om han, og Konrad Zuse jobbet med sine maskiner i en nesten total, intellektuell isolasjon fra 1935 til 1945.

Ført bygde Zuse en mekanisk kalkulator for å forenkle sitt eget arbeide. Dette var i 1935. Deretter gikk han i gang med å bygge sin første programmerbare maskin. Den ble drevet med håndsveiv,  bestod av rundt 30 tusen metalldeler, og kunne lese programmer fra et hullbånd (perforert 35mm film). Z1 som den het var ferdig i 1938, men fungerte ikke så bra på grunn av for lav presisjon i konstruksjonen.

Øvelse gjør derimot mester; Konrads største bragd kom nemlig et par år senere. Z3 ble fullført i 1941, og var verdens første fungerende, programmerbare, Turingkomplette datamaskin. Ja, du leste riktig, den første virkelige datamaskinen ble skapt i Nazi-tyskland under ander verdenskrig!

I løpet av 40-tallet designet Zuse også det vi må få kalle det aller første, høynivå programmeringsspråket. Plankalkül var forut for sin tid, og ble ikke implementert før etter Konrads død. Det influerte heller ikke de første programmeringsspråkene som ble implementert (såvidt vi vet), men det har en del likheter med dem likevel. Plankalkül har tilordning og variabler, subrutiner, betingelsesuttrykk, iterering (while), flyttallsaritmetikk, arrays, hierarkiske records, bolske tester, unntakshåndtering, og flere andre elementer som man forventer å finne i et fullverdig språk. Det var imperativt, typet, og inneholdt bl.a. også en GOTO kommando.

Her er et lite program som finner den største av tre verdier ved å kalle rutinen max:

P1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) => R0[:8.0]
max(V0[:8.0],V1[:8.0]) => Z1[:8.0]
max(Z1[:8.0],V2[:8.0]) => R0[:8.0]
END
P2 max (V0[:8.0],V1[:8.0]) => R0[:8.0]
V0[:8.0] => Z1[:8.0]
(Z1[:8.0] < V1[:8.0]) -> V1[:8.0] => Z1[:8.0]
Z1[:8.0] => R0[:8.0]
END

Plankalkül blir noe sånt som “formelt system for planlegging” på norsk. Se her for en presentasjon av den første implementasjonen av språket.

Kategorier: Julekalender.
RSS feed for kommentarene. Tilbaketråkk.

Skriv en kommentar

Tillatte tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Siste kommentarer

Torbjørn
PS: Takk til Børge Hansen, som delte SCARF-modellen med meg!...
Børge Hansen
Denne likte jeg veldig godt. Du skriver godt og har gode betraktninger  Keep it up – flere trenger å tørre å lære mer om ledelse – du l...
Tormod
Er egentlig ikke overrasket. F# sin fortè er programmererens produktivitet/kvalitet og anledning til parallell kjøring. Men kjøremotoren har ...
Stian
Ville også prøvd med et større problem (x100 eller x1000 f.eks). Når man snakker så små brøkdeler av et sekund som her så kan tiden for en ell...
Torbjørn
Har ikke sjekket - tar en titt i morgen hvis tid :)...
Einar W. Høst
Mhp tco: hva sier ILSpy?...
Torbjørn
Har ikke sett noe på PSeq før, men kjenner til den typen funksjoner fra blant annet Clojure. Og problemet med slike funksjoner i sammenhenger som de...
Håvard
Veldig bra sammenligning! Har du sett på ytelsen av PSeq.* fra powerpakken? Tipper den vil gi performancehit på små mengder, men kan kanskje resul...
Torbjørn
Jeg kom på en demonstrasjon-variant til jeg burde inkludere, nemlig bruk av list comprehension (en type computation expression (også kalt monads)). ...
Einar W. Høst
Interessant, det blir en trade-off mellom eleganse og fart på en måte. Den funksjonelle løsningen med vanlig filter er ren og pen, mens den imperat...
Creative Commons-lisens
Innholdet på denne bloggen er tilgjengelig under Creative Commons Navngivelse-Ikkekommersiell-DelPåSammeVilkår 3.0 Norge lisens.

Programmeringsbloggen
Kjempekjekt.com

© 2006-2013 Torbjørn Marø

Jeg har vært en profesjonell programmerer siden 1999, og dette er min blogg. Målet med bloggen er å stimulere meg selv og alle andre til kontinuerlig eksperimentering og læring.

Jeg forsøker å være allsidig, og programmerer blant annet i C#, Ruby, Erlang og Clojure.

Jeg praktiserer TDD og andre smidige utviklingspraksiser. Jeg er opptatt av kvalitet og ren kode.

Dette og ganske mye mer kan du lese om på denne bloggen!