Mõnede programmeerimiskeelte lühiiseloomustus

Programmeerimiskeelte populaarsus

Fortran - esimene (tuntud) programmeerimiskeel; väga lihtsa süntaksi ja semantikaga; loodi ennekõike programmeerimise (arvutuste) lihtsustamiseks esimese tööstuslikult (müügiks) valmistatud programmeeritud arvuti IBM 701 (esialgse nimega "Defence Calculator") kasutamise lihtsustamiseks, programmi koodis sai kasutadavate märkide (characters) arv oli 48 (perfokaardid!). Sel ajal ei osanud keegi näha vajadust massiliste arvutuste jaoks; IBM president Thomas Watson oli ennustanud varem: "Ma arvan, et kogu maailmas on vaja umbes viit arvutit". Ka arvutit IBM 701 valmistati üldse vaid 19; nende peamine tellija/kasutaja oli USA armee, kes pidi Korea sõja jaoks oluliselt parandama sõjatehnikat. Esimesed kasutajad olid ka USA ilmaennustusteenistus (Weather Bureau), lennukivalmistajad ja General Electrics - vaid neil suurfirmadel oli vaja palju arvutada. Kuid peagi

Uue arvuti demonstreerimisel 1952 a suvel Poughkeepsie-s olid kõik kasutajad hämmastunud selle kiirusest (ca 14000 matemaatilist operatsiooni sekundis), kuid see selle aja kohta ennenägematu arvutuskiirus (ja maksumus - arvuti ühe kuu üür oli 19000 USD) tekitas kohe probleemi: kuidas sellist masinat effektiivselt kasutada, s.t. nii, et see kogu aeg arvutaks? Ilmseks takstuseks oli selleagne masinkoodides programmeerimine - seda suutsid teha vaid arvutit hästi tundvad programmeerimisspetsialistid, kuid ka nende programmeerimiskiirus oli selle uue arvuti jaoks liiga aeglane - iga arvuti jaoks oleks olnud vaja tuhandeid programmeerijaid, et arvutit pidevalt töös hoida.

Noor IBM insener John Backus tüdines "lähivõitlusest arvutiga" ("hand-to-hand combat with computer") ja esitas 1953 a lõpul oma ülemusele saadetud lühikeses kirjas ettepaneku, et tal lubataks otsida "paremat programmeerimisviisi" ("better way of programming"). Ülemus lubas; projekti esialgne nimi oli "Speedcoding" (kiirkodeerimine). Alles hiljem said osalised aru, et (üks) olulisematest probleemidest oli võimaldada programmeerijal kirjutada aritmeetilisi avaldisi nii, nagu seda teeb inimene/matemaatik: c = sqrt(x*x+y*y) (valem täisnurkse kolmurga hüpotenuusi c arvutamiseks), selle asemel et sundida tedda ühekaupa saatma kaatetite a,b väärtusi kuhugi fikseeritud mälupesadesse ja siis hakata sealt neid ühe operatsiooni kaupa käsitlema ja projekti/programmi nimeks sai FORTRAN (FORmula TRANslator). Kui see "valemite arvutamine" (formula translation, s.t. nende automaatne tõlkimine masinkoodi käskudeks) oli realiseeritud, oli lihtne lisada imperatiivsete programmeerimiskeelte loogilist taset - "if-then-(else)", tsüklid jne (piisab "if-then-else realiseerimisest - kõiki tsükleid saab realiseerida juba selle abil).

IBM soosis kogu projekti. Projekti lõpetamine venis aastast aastasse ja see kasvas, see hõlmas lõpuks kümmet samas toas töötavat väga entusiastlikku andekat noort programmeerijat. Nad olid väga erineva taustaga - krüptograaf, kristallograaf, maletaja jne ja töötasid sageli öösiti - öösel oli lihtsam saada väärtuslikku masinaaega programmide silumiseks - kuid see on innukate programmerijate tööstiil kõikjal. Ka Tallinna Tehnikaülikooli (siis TPI - Tallinna Polütehniline Instituut) arvutuskeskuses põlesid tuled kogu öö, kui siin tehti translaatorite tegemise süsteemi ELMA ja selle abil uusi keeli, sageli tuli öösel kell neli hakata kiiresti kogu oma seisu magnet/perfo lintidel salvestada, sest järgmine kasutaja (näit prof Tammet, kes ). Vaatamata sellele ei pidanud Backus kogu projekti jooksul isegi koostama selle jaoks mingit eelarvet, s.t. mitte mingit "eel"-ennustust tulevastest kuludest. Programmide suurust hinnatakse mõnikord mees-kuudes või mees-aastates (programmeerijate arv korda programeerimiseks kulunud kuude või aastate arv); esimese Fortran-translaatori suuruseks tuli 18 mees-aastat.

Aastal 1957 esitles Backus lõpuks kõrgtaseme programmeerimiskeelt FORTRAN 1957; mitmete paranduste ja täienduste järel sai sellest 1966 aastal USA standard. Fortran lihtsustas oluliselt programmeerimist ja võimaldas ka mitteprogrammeerijatel (matemaatikutel, inseneridel) hakata oma arvutusskeeme ise programmeerima, ilma elukutselise programmeerija vahenduseta (umbes nagu tekstitöötlus tegi mittevajalikuks masinkirjutaja elukutse). Sellel ajal nimetati translaateeritud keele kasutamist programmeerimise automatiseerimiseks (automated programming) ja enamus programmeerijatest ei uskunud idee kasutuskõlblikkust - arvutiga koostatud (transleeritud) programme peeti liiga aeglasteks ja palju mälu nõudvateks. Kuid väga põhjalike optimiseerimiste kasutamise tõttu koodi genereerimisel Fortrani translaatoris oli uus tehnoloogia kiire, Fortran-is kirjutatud programmid töötasid peaaegu sama kiiresti kui masinkoodispetsialistide käsitsi masinkoodis kirjutatud programmid. Fortran-programmide koostamiseks kulus kümme korda vähem aega ja sellega said hakkama ka masinkoodi mitte tundvad erialaspetsialistid. Tänu kiirusele ja lihtsusele on Fortran seniajani jäänud kõige kasutatavamaks programmeerimiskeeleks massilist arvutamist nõudvate probleemide lahendamisel: ilmaennustamisel, keerukate tehnoloogiliste protsesside numbrilisel modelleerimisel jne; sellistest programmides umbes 95% on kirjutatud ja kirjutatakse Fortranis..

Fortran pani kaudselt aluse ka Microsoft-i tulevikule. Bill Gates oli juba kõrgkoolis olles Fortranis programmeerinud; muuseas koostas ta Fortran-is oma kooli jaoks tunniplaani, mis paigutas ta ainsa poisina õpperühma, kuhu sattusid koos temaga ka kõik kenamad tüdrukud... . Microsoft-i esimene kaubanduslik produkt oli Basic-u interpretaator ja järgmine - Fortrani translaator selleaegse väikearvutite operatsioonisüsteemi CP/M jaoks. Translaatori hea kvaliteet ja korralik dokumentatsioon tegid Microsoft-i kiiresti tuntuks kvaliteetse tarkvaratootjana, sellepärast IBM telliski oma uue personaalarvuti IBM PC operatsioonisüsteemi Microsoft-ilt ja sellest algas Microsofti vallutusretk PC operatsioonisüsteemide alal.

Fortran-i arengust ettekujutuse saamiseks on järgnevas Fibonacci arvude rea programm algul Fortran 77 süntaksiga - peaaegu sama, nagu oli ka "originaal-Fortranil":
- kasutatakse vaid suurtähti;
- käsud algavad alles kuuendast positsioonist, iga käsk eri real, esimeses positsioonis kirjutatakse vaid kommentaarimärk C, tsükli lõpumärgend 10 jms;
- muutujad, mis algavad tähtedega I, J, K, L, N, M loetakse automaatselt 32-bitilisteks täisarvudeks (kuid muutuja tüüpi saab ka deklareerida).

Palju vigu põhjustas esimese Fortran-i tsüklikäsu süntaks: kui käsus jäi ära koma pärast tsükli alguse märgendit, s.t. käsk anti kujul

DO 10 J=2, 60
siis tõlgendas translaator selle omistamiseks
DO10J=2,60
(ja veateadet ei tulnud), sest tühikud polnud eraldajad, neid lihtsalt ignoreeriti!
C (Fortran77, read algavad 6-st positsioonist!)
PROGRAM FIBONACCI
I1=1
I2=1
DO 10, J=2, 60
I = I2
I2 = I2 + I1
I1 = I
WRITE (*,*) J,'-S FIBONACCI ARV ON ', I2
10 CONTINUE
END

Fortran 95 süntaksiga on sama programm juba täiesti kaasaegse väljanägemisega:

program Fibonacci
I1=1; I2=1
do j=2, 50
I = I2
I2 = I2 + I1
I1 = I
write (*,*) j,'-s Fibonacci arv on ', I2
end do
end program Fibonacci

Mõlemad programmid transleeruvad Gnu Fortran-translaatoriga g95 ja nad väljastavad korrektselt Fibonacci rea liikmed kuni 45-nda liikmeni (siis tekib ületäitumine, kuna tavalised täisarvud on 32-bitised).

Cobol (COmmon Bussines-Oriented Language) - ka üks esimesi programmeerimiskeeli (1959), selle "emaks" oli naisprogrammeerija, USA laevastiku IT-tehnoloogia arendaja admiral Grace Murray Hopper; Hopper leiutas ka sõna "translaator". Gobol oli esimene majandusinformatsiooni käsitlemiseks koostatud programmeerimiskeel. Kuna (peamised) kasutajad oli ja on raamatupidajad (s.t. mitte programmeerimisspetsialistid), püüab Gobol olla võimalikult lähedane loomulikule keelele: et muutuja tähendus/semantika oleks arusaadav, kasutatakse pikka nimega (kuni 31 sümbolit; Cobol-i muutujanimedes hakati esimesena kasutama allkriipsu mitmesõnaliste terminite ühendamiseks üheks muutujanimeks), omistamiskäsu süntaks ei ole mitte lakooniline

C = Z - A
vaid
COMPUTE C = Z - A

kuid võib kasutada veel pikemat, loojate idee järgi raamatupidajatele ( keele kasutajad) arusaadavamat vormi:

SUBTRACT A FROM Z GIVING C

Ka tulemuse väljastamine ekraanile sarnaneb väga loomuliku keele väljendile: DISPLAY 'THE TOTAL IS: ', WS-TOTAL ; paljudes hilisemates keeltes väljendatakse sama asja palju vähemarusaadavalt : printf("THE TOTAL IS: %d\n", WS-TOTAL). "Lobiseva" stiili tõttu (Cobol-i programmid on märksa pikemad kui näiteks krüptilises C-s koostatud programmid) on Cobol-i programmid (peaaegu) isedokumenteerivad, s.t. nad on kergestiloetavad ja arusaadavad peaaegu ilma lisaselgitusi - üks põhjusi, miks Cobol on seniajani oma arhailisele stiilile vaatamata laialdaselt kasutusel; mõned ülevaated hindavad, et Cobol-it kasutavate programmeerijate arv on praegugi (2005) umbes võrdne Java-t kasutavate programmeerijate arvuga (http://www.informationweek.com/story/showArticle.jhtml?articleID=9400262).

Programm Cobol-is koosneb neljast osast:
IDENTIFICATION DIVISION. - kohustuslik, siin antakse programmile nimi, esitatakse programmeerija jne;
ENVIRONMENT DIVISION. - milliseid teisi programme vajatakse;
DATA DIVISION. - andmevahetus - kust loetakse, kuhu kirjutatakse andmeid, muutujate tüüpide määramine, algväärtustamine jne;
PROCEDURE DIVISION. - mida tuleb teha; protseduur on jagatud paragrahvideks PARA-A., STOP-PARA. - need toimivad märgenditena.

Kõik read lõpevad Cobol-is punktiga. Andmetüüpe on kolm: numbrid, tähed ja alfanumbriline (kas täht või number); muutujaid käsitletakse märgijadadena ja deklaratsioonis PIC (lühend sõnast PICTURE - pilt) määratakse, millisel kohal jadas on (kümnendsüsteemi) number (numberid tähistab 9), millisel kohal täht (tähistab A) ja kus võib olla nii täht kui ka number (alfanumbriline, tähis V), seega deklaratsiooniga PIC 99VVV9999 kirjeldatud muutuja väärtus võib näiteks olla 13nov2005; sulgudes märgitakse kordus, s.t. 9(6) tähistab jada 999999 (kuuekohaline kümnendsüsteemi arv); algväärtus antakse sõnaga VALUE. Kuna nii Cobol kui ka Fortran sündisid perfokaartide ajastul, on neis väga oluline sümbolite paigutus real - esimesed kuus positsiooni peavad olema tühjad (siia võib Cobol-i translaator kirjutada reanumbri), seitsmendas positsioonis (Cobol-is) näidatakse kommentaar ja eelmise rea jätkumine (näit pika stringi korral) jne. Järgnevas on Fibonacci arve väljastav programm Cobol-is.

        IDENTIFICATION DIVISION.
PROGRAM-ID. FIBONACCI.

ENVIRONMENT DIVISION.
DATA DIVISION.

WORKING-STORAGE SECTION.
77 F PIC 9(18).
77 F1 PIC 9(18) VALUE 1.
77 F2 PIC 9(18) VALUE 1.
77 I PIC 9(4) VALUE 1.

PROCEDURE DIVISION.
PARA-A.

COMPUTE F = F1 + F2.
MOVE F2 TO F1.
MOVE F TO F2.
DISPLAY I "-s Fibonacci arv on " F.
ADD 1 TO I.
IF I = 40
GO TO STOP-PARA
ELSE
GO TO PARA-A.

STOP-PARA.
STOP RUN.

Meil on Cobol peaaegu tundmatu, sest Cobol-is kirjutati ennekõike raamatupidamis- ja infosüsteeme suurarvutitele (mainframes) ja nende import oli endise sotsialistliku süsteemi maadesse keelatud; kuigivõrd tekkis meil Cobolis kirjutatud süsteeme alles pärast 1990-ndaid. Kuigi kaasajal peetakse Coboil-it sageli arhailisena, on kasvõi Cobol-is koostatud süsteemide maht piisav selle keele elushoidmiseks veel paljudeks aastateks, sest kõige selle ümber/uuestiprogrammeerimine oleks väga kallis. Ja ka see keel areneb - on olemas objekt-orienteeritud, paralleeltööga, graafika kasutamisega jne Cobol-i versioone; kohe (2005) on oodata 64-bitilist Cobol-i versiooni Microsoft-i .net-ümbruse jaoks (http://www.netcobol.com/news/prelease/pr20050425.htm).
Ja Cobol-i "sügavatest juurtest" - kui Kalifornia kuberner Arnold Schwarzenegger (Covernator!) tahtis rahapuudusel 2008 a suvel ametnike palgad kinni kuuks külmutada, siis teatas IT-osakond, et see on võimatu - nad ei suuda oma Cobol-is kirjutatud raamatupidamissüsteemi sellist muudatust sisse viia isegi aastaga.

Pascal - sweitsi arvutiteadlase Niklaus Wirth-i poolt 1970 aastal loodud prantsuse filosoofi ja matemaatiku Blaise Pascal auks nimetatud programmeerimiskeel. Keele on Algol-i järglane (puhas imperatiivne keel) ja selle loomisel oli eesmärgiks programmeerimise õpetamiseks sobiva suhteliselt lihtsa keele loomine, mis toetaks struktuurprogrammeerimist - programmeerimisstiili, kus programm koosneb loogiliselt organiseeritud plokkidest ja kusagil pole tarvis kasutada "go to"-siirdeid; "go to"- muudavad programmi teksi raskestimõistetavaks ja nende kasutamine toob kaasa palju vigu.

Wirth-i programmeerimistehnoloogia-alased publikatsioonid, ennekõike 1971 a avaldatud artikkel "Program Development by Stepwise Refinement" (http://www.acm.org/classics/dec95/) ja 1975 a ilmunud raamat "Algorithms + Data Structures = Programs" on praeguseni programmeerimise õpetamisel kasutatavad klassikalised tekstid; ka programmeerimiskeel Pascal oli ja on praeguseni laialdaselt kasutusel programmeerimise õpetamisel (ka Tallinna Tehnikaülikoolis). Pascal oli väga populaarne firma Apple arvutites, Apple Lisa ja Macintosh-i operatsioonisüsteemid oli kirjutatud peamiselt Pascal-is. Kuna Wirth lõi Pascali ennekõike õpetamiseks, oli keele süntaks koostatud nii, et programmi saaks transleerida teksti ühekordse läbivaatamisega (jooksvalt) ja puudus võimalus programmi osade eraldi transleerimiseks. Viimane omadus on väga tülikas suurte süsteemide loomisel, sellepärast kritiseeris C-keele looja Brian Kernighan oma 1981.a. ilmunud artiklis "Why Pascal Is Not My Favorite Programming Language" (http://www.lysator.liu.se/c/bwk-on-pascal.html) Pascal-i, väites et see kõlbab vaid programmeerimise õpetamiseks, kuid mitte "tõsiseks" programmeerimiseks. Kaasaegsetes Pascali versioonides ja Wirth-i poolt hiljem loodud keeltes Modula, Modula-2 ja Oberon on Pascalis kritiseeritud puudused kõrvaldatud ja Pascal-i versioon Component Pascal kuulub ka Microsoft-i .net translaatorite süsteemi.

Pascal-ist ettekujutuse saamiseks on järgnevas esitatud eespoolvaadeldud "kahe arvu akna" nihutamisel põhinev Pascal-is kirjutatud programm esimese neljakümne Fibonacci arvu arvutamiseks:

PROGRAM Fibonacci(input,output);
VAR
fo : INTEGER;
f1 : INTEGER;
f : INTEGER;
n : INTEGER;
i : INTEGER;
BEGIN
f0 := 1;
f1 := 1;
i := 1;
n := 40;
WHILE i < 40 DO
BEGIN
i := i + 1;
f := f0 + f1;
WRITELN(i : 2, ' ', -s Fibonacci arv on , f : 10);
f0 := f1;
f1 := f ;
END
END.

Wirth on vist (seni) suurim programmeerimiskeelte looja ja programmeerimistehnoloogia arendaja. Oma saavutuste eest programmeerimiskeelte loomisel ja programmeerimistehnoloogia arendamisel sai Wirth 1984.a kõrgeima programmeerimisteooria ja -tehnoloogia-alase autasu Turing Award (mõnikord nimetatakse seda ka programmeerimisteaduse "Nobeli auhinnaks"). Turing Award (inglise matemaatiku ja loogiku Allan Turing-u auks ) on ACM (Association for Computing Machinery, 1947.a loodud informatsioonitehnoloogia arendamiseks USA-s loodud organisatsioon) poolt 1966-st aastast alates igal aastal antav 100000 USD suurune autasu väljapaistavate saavutuste eest informatsioonitöötlemise teooria arendamisel (Fortran-i looja John Backus sai selle 1977.a., APL-keele looja Kenneth E. Iverson - 1979.a, UNIX-operatsioonisüsteemi ja C-programmeerimiskeele loojad Ken Thompson ja Dennis M. Ritchie 1983.a, esimeste objekt-orienteeritud programmeerimiskeelte Simula ja Simula-67 loojad Ole-Johan Dahl ja Kristen Nygaard said selle aastal 2001, Smalltalk-i looja Alan Kay - aastal 2003). Wright-ile Turing Award andmise põhjus oli just tema töö programmeerimiskeelte loojana: "For developing a sequence of innovative computer languages, EULER, ALGOL-W, MODULA and PASCAL. PASCAL has become pedagogically significant and has provided a foundation for future computer language, systems, and architectural research."

ABC - interaktiivne keel, mis loodi peamiselt Basic-u asendamiseks programmeerimise õpetamisel: struktureeritud (erinevalt Basic-u algversioonidest), kerge õppida jne; aja jooksul (praegune versioon on 4) on lisatud piisavalt kõrgtaseme omadusi, nii et sellega on (tavaliselt väga lühidalt ja arusaadavalt) võimalik hakata kiiresti lahendama üsna keerukaid ülesandeid. See keel oli mudeliks praegu väga populaarse programmeerimiskeele Python loomisel.

Keeles ABC on vaid 5 andmetüüpi:

- numbrid (ükskõik kui suured/pikad, s.t. numbrite esitamise formaat pole piiratud mingi baitide arvuga, nagu enamuses programmeerimiskeeltest; aritmeetika on nii täpne, kui seda lubab arvuti mälu);
- tekstid (stringid) - pikkus on samuti piiratud vaid arvutimäluga;
- nimistud (järjestatud), elemendid võivad olla (läbisegi) mistahes tüüpi (ka nimistud);
- ühendid (compounds) - sarnanevad kirjetele (records), kuid ilma väljanimedeta;
- tabelid (assotsiatiivsed vektorid) - paarid "võti-väärtus", s.t. võtmele (key - argument, ükskõik millist tüüpi) seatakse vastavusse väärtus.

Järgnevas on väike näide ABC-keele interaktiivsest sessioonist; >>> on ABC viip (prompt) ja \ järel on reakommentaar. Algul luuakse telefoniraamat (tabel paaridest "Nimi-telefoninumber"), seejärel tehakse mõned päringud ja inverteeritakse telefoniraamat, s.t. esitatakse paaridena "telefoninumber-Nimi"). ABC ei kasuta blokkide märkimiseks sulge (C-s: {...}), bloki algamisel lõpetatakse rida kooloniga ':' ja interaktiivne editor algab järgnevad read taandega, s.t. taane (tabulatsioon) märgib alamosa; lõpetamiseks tuleb anda "Enter"; sama (märksa vähem "süntaktilist müra" kasutav alamosade märkimisviisi) kasutatakse ka programmeerimiskeeles Python. Keele reserveeritud sõnad on suurtähtedega, muutujad - väiketähtedes.

PUT {} IN telefon \muutuja telefon initsialiseerimine
PUT 56222201 IN telefon["Renzer"] \[...] näitavad, et telefon on tabel ja [...] vahel olev osa on ühe rea võti (key), s.t. argument
PUT 6569078 IN telefon["Jaak"]
Teeme päringu:
>>>WRITE telefon["Renzer"]
56222201
Küsime kogu telefoniraamatut; vastusest on näha, et tabel on järjestatud esimese argumendi, võtme (key) järgi :
>>>WRITE telefon
{["Jaak"]: 6569078; ["Renzer"]: 5622201}

Tabeli esimese argumendi annab võtmesõna keys; kasutame seda veidi ilusamini formateeritud telefoniraamatu saamiseks. Reserveeritud sõna FOR sisestamisel "taipab" ABC ise, et järgneb (tavaliste keelte) blokk - rea lõppu lisatakse bloki algust tähistav koolon ":" ja kõik järgnevad (s.t. blokki kuuluvad, siin vaid üks rida) read sisestatakse taandega; sümbol / viib uuele reale (sama kui "\n" C-s) :

>>> FOR nimi IN keys telefon:
WRITE nimi, ":", telefon[nimi] / Jaak: 6569078
Renzer: 5622201

Kuna ABC automaatselt salvestab kogu interaktiivse sessiooni ajal sisestatud info nn töölaual (workspace), pole tarvis midagi kirjutada faili, näiteks järgmise sessiooni ajal on tabel (muutuja) telefon taas kasutatav, seda pole tarvis uuesti defineerida. Kuid seda võib modifitseerida (lisada/eemaldada paare "nimi-telefoninumber"). Ka uute funktsioonide defineerimisel (definitsiooni süntaks algab: HOW TO ... ) muutuvad need automaatselt töölaua osaks, s.t. kasutajal on lihtne laiendada keelt oma funktsioonidega.

Python. See keele ABC järglane, hollandi programmeerija Guido van Rossum-i poolt 1990 loodud programmeerimiskeel (sai nime tuntud inglise teleseriaali "Monty Python's Flying Circus" järgi) on praegu (2005) internetiprogrammeerimises (portaalid, e-kaubandus, otsingumootorid jne) vist kõige enam kasutatav keel, selles on programmeeritud (näiteks) Google Maps ja Google GMail, populaarne failivahetussüsteem BitTorrent, internetiportaalid Zope, Solipsis, seiklusmängude portaal OpenRGB jne; seda kasutatakse paljudes mängudes (Civilization, Battlefield 2, Vampire jt) skriptikeelena, 3D-programmi Blender (vabavara) mängumootori keelena jne.

Python toetab väga paljusid programmeerimisstiile, teda võib kasutada kui tavalist imperatiivset (skripti)keelt, kuid ka kui objekt-orienteeritud, funktsionaalse programmeerimise keelt jne. Kuna keel algselt kavandati tuntud cgi-skriptikeelte PERL ja PHP asendajaks, on selles väga palju mitmesuguseid nimistute ja stringioperatsioone; ABC eeskujul on olemas ka assotsiatiivsed tabelid. Nimistusse võib panna erinevat tüüpi elemente ja nimistu indeksite käsitlemine on väga loomulik, näiteks -1 on nimistu eelviimase elemendi indeks, i:j tähistab vahemikku i-ndast j-nda elemendini; i: - vahemikku i-ndast elemendist viimaseni (kui i > nimistu pikkus, siis ei tule viga, vaid vastuseks saadakse tühi nimistu), :i tähistab alamlõiku algusest i-ndani jne (esimene indeks on 0); järgnevas on mõned Python-i interpretaatoris sooritatud operatsioonid (>>> on Python-i viip, s.t. selle järel on kasutaja sisend, ilma viibata algavad read on Python-i vastus):

>>> yks = 1
>>> a = [yks, "kaks", 'kolm', 4, 5]
>>> a[2:4]
['kolm', 4]
>>> a[-2]
4
>>> a[:3]
[1, 'kaks', 'kolm']
>>> a[4:]
[5]
>>> a[6:]
[]
>>> a[:]
[1, 'kaks', 'kolm', 4, 5]

Keele süntaks on väga lihtne, sellepärast on ta muutunud väga populaarseks programmeerimise õpetamisel; ABC eeskujul ei kasutata bloki tähistamiseks sulge, vaid reataanet (bloki algamist näitab koolon : rea lõpus), korraga võib sooritada mitu omistamist jne; järgnevas on näitena Pythoni programm, mis arvutab esimesed nelikümmend Fibonacci arvu:

f0, f1, i = 1, 1, 1
while i<40 :
f0,f1 = f1,(f0+f1)
i +=1
print i,'-s Fibonacci arv on ', f1

Kui see programm on salvestatud (näiteks) failis fibo.py, saame käivitamisel python fibo.py Fibonacci arvude tulba:

2 -s Fibonacci arv on  2
3 -s Fibonacci arv on 3
4 -s Fibonacci arv on 5
5 -s Fibonacci arv on 8
...
39 -s Fibonacci arv on 102334155
40 -s Fibonacci arv on 165580141

Forth. Nagu paljud edukad keeled, on ka Forth ühe-mehe-leiutis: Forth arenes välja (siis veel üliõpilase) Charles Moore programmidest, mida ta koostas Smithsoni astrofüüsikaobservatooriumis 1950-ndate aastate lõpul. Suure kamba ja käraga tehtud keeled kipuvad olema "jõulupuud", s.t. sinna on külge riputatud kõik, mis (tegijatest) kellelegi meeldis, kuid kasutajad peavad tavaliselt selliseid keeli liiga komplitseerituteks ja eelistavad lihtsamaid - sellised "jõulupuud" olid/on näiteks PL/1 ("Programming Language 1" - s.t. pärast seda pole mingit muud programmeerimiskeelt enam tarvis!), Ada; ka mitmeid praegu suurte firmade poolt propageeritavaid "suuri" keeli näib ähvardavat "jõulupuu" status. Kuid väga askeetlik Forth elab seniajani hästi ja selle translaator kuulub ka Microsoft-i .net programmeerimissüsteemi.

Kui Moore 1970-ndate algul avaldas keele, tahtis ta selle nimega osutada, et see on keel neljanda (fourth) põlvkonna arvutitele, kuid kasutatud arvuti IBM 1130 operatsioonisüsteemis oli failinime pikkus maksimaalselt viis tähte ja nii sai süsteemi nimeks FORTH (hiljem hakati nimes kasutama ka väiketähti). IBM 1130 oli juba graafilise monitoriga arvuti ja Moore esitas oma uue keele abil sellel animeeritud kolmemõõtmelisi kujutisi (IBM 1130 süsteemitarkvara suutis esitada vaid staatilisi kahemõõtmelisi kujutisi), koostas videomängu, maleprogrammi jne.

Forth on magasini kasutamisel põhinev laiendatav keel, seega selle põhiidee on sarnane protsessorite masinkoodiga - ka protsessorites sooritatakse arvutused magasinis. Magasini kasutamise lihtsustamiseks esitatakse aritmeetilised (ka muud) funktsioonid nn "tagurpidi poola kujul" (poola matemaatiku Jan Lukasiewicz-i järgi, kes esimesena taipas, et sellise kirjaviisi puhul pole tarvis sulge kasutada). Selles kirjaviisis esitatakse algul funktsiooni argumendid ja siis funktsioon ( Forth-i eraldaja on tühik). Forth-i magasinioperatsioone selgitatakse tavaliselt kujul (enne -- pärast), kus enne on magasini muutuv osa enne teisendust (tipus olev element on paremal) ja pärast on magasini tipp teisenduse järel, s.t. näiteks kui magasinis enne olid kolm arvu 1 2 3 (s.t. magasini tipus on 3), siis operatsiooni + sisestamise järel magasin oleks 1 5 , s.t. + asendab tipus olnud arvud nende summaga.

Tavaline kirjaviis Forth-is: Magasini muutus:
2+3 2 3 + (n 2 3 + -- n 5 )
(2+4)/2 2 4 + 2 / (n 2 4 + 2 / -- n 3 )
2*2 + 3*3 2 2 * 3 3 * + (n 2 2 * 3 3 * + -- n 13 )
Kommentaare kujul (enne -- pärast) võib Forth-i programmi kirjutada kõikjale.

Kuna ka protsessor sooritab tegelikult arvutused magasinis (v.t. eespool esinenud HLA assembler-i näiteid), on Forthi kood väga hästi täidetav, jäävad ära paljud RAM-protsessori vahelised andmete edasi-tagasi saatmised (nn. "von Neumann-i pudelikael") ja sellepärast on Forth isegi C-st veidi kiirem. "Tavaliste" keeltega (C, Java) võrreldes on Forth-i üks olulisi erinevusi ka selle laiendatavus. Programmi koostamine on uute Forth-i sõnade (funktsioonide) defineerimine ja äsjadefineeritud sõna võib kohe kasutada uute sõnade defineerimisel, seega Forth-i programmi koostades luuakse tegelikult probleemi lahendamiseks selle jaoks sobiv keel. Kuigi Forth on interpretaator, kuulub tavaliselt kõigisse Forth-i realisatsioonide hulka ka kompilaator, mis kompileerib sõna assemblerkeelde, seega programmi effektiivsuse jaoks olulised sõnad võib kiirema töö huvides kompileerida. Kuid võib luua ka selliseid sõnu, mis ise moodustavad programmi töö ajal uusi sõnu. Sellised sõnad võimaldavad realiseerida objekt-orienteeritud stiilis objekte oma andmestruktuuride ja funktsioonid (meetoditega). Forth-i puuduseks on harjumatu süntaks ja kui programm pole korralikult kommenteeritud, on sellest hiljem väga raske aru saada.

Näitena Forth-i stiilist on Fibonacci arve väljastav programm. See on realiseeritud taas tsüklina, kus ühel sammul programmi arvutav osa teisendab Forth-i magasini tipus olevad kaks järjestikust Fibonacci arvu kaheks järgmiseks Fibonacci arvuks, seega Fibonacci arve arvutav programmilõik sooritab teisenduse (a b -- b a+b) . Sellise teisenduse sooritavad Forth-i süsteemi kuuluvad sõnad rot ( a b -- b a b) ja + (a b -- a+b). Defineerime uue sõna, mis sooritab selle teisenduse; uue sõna definitsioon algab kooloniga : ja lõpeb semikooloniga ; (ka nende sisestamisel ei tohi unustada Forth-i eraldajat - tühik!) :

: fib rot + ;

Nüüd defineerime tsükli, mis asendab magasini tipus oleva täisarvu n n-da Fibonacci numbriga. Magasini tipu väljastab ekraanile Forth-i sõna . ; väljastamine ka kustutab väljastatud arvu, seega selle säilitamiseks peab selle enne dubleerima sõnaga dup . Forth-i tsükli süntaks on

n i do ... loop

ja selle semantika on : alates tsükliloendaja väärtusest i soorita do ... loop vahel olev osa, iga kord tsükliloendajat i ühe võrra suurendades; lõpeta, kui i = n-1. Kui näiteks defineerida sõna

: tsykkel 0 do i . loop ;

siis sisestades 10 tsykkel ja vajutades "Enter", ilmub ekraanile arvude rida 0 1 2 3 4 5 6 7 8 9 - sõna tsykkel sisestab arvu 0, seega tsükli do i . loop käivitamisel on magasini tipus tsükli rajad 10 0 ja tsükkel täidetakse 10 korda; tsükli kehas pannakse tsükliloendaja i magasini tippu ja väljastatakse.

Sõna fib tuleb samuti käivitada tsüklis. Programmi käivitamisel on magasini tipus tsükli ülemine raja n (mitmenda Fibonacci arvuni tuleb jõuda), kuid enne tsükli käivitamist peab magasini sisestama kaks esimest Fibonacci arvu 0 1; magasini tipus olnud arvu n "tõstab neist üle" Forth-i sõna rot (n n1 n2 -- n1 n2 n), seega defineerime uue sõna, mis kirjutab ise tsükli alaraja 1 , käivitab tsüklis arvutaja fib ja seejärel trükib ekraanile indksi i ja äsja arvutatud Fibonacci arvu; ." on Forth-i primitiiv teksti trükkimiseks (nagu kõigi Forth-i primitiivide trükkimisel, peab ka pärast seda olema tühik!) ja cr on reavahetus:

: fibo 0 1 rot 1 do fib i . ." -s Fibonacci arv on " dup . cr loop ;

Kui nüüd sisestada 40 fibo ja vajutada "Enter", ilmub ekraanile Fibonacci arvude tulp:

2 -s Fibonacci arv on 2
3 -s Fibonacci arv on 3
4 -s Fibonacci arv on 5
5 -s Fibonacci arv on 8
...
39 -s Fibonacci arv on 102334155
40 -s Fibonacci arv on 165580141

Ruby - keel, mida selle autor Yukihiro "Matz" Matsumoto iseloomustas nii: "a language more powerful than Perl, and more object-oriented than Python". Praegu on Ruby Jaapanis juba populaarsem kui Python, ja selle populaarsus kasvab väga kiiresti ka mujal.

Iga programmeerija unistuseks on leiutada töövahendeid, mis lihtsustaks ja kergendaks programmeerimist ( "tools to make our lives easier, for tools to help us do our jobs better"). Ruby loomisel jälgis Matsumoto just programmeerija, inimese vajadusi:

"Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves."

Nime Ruby võib tõlgendada viitena, et see keel on väga populaarse serveritel CGI-skriptide kirjutamisel kasutatava skriptikeele Perl järglane: Pearl (pärl) on juunis sündinute õnnekivi, Ruby (rubiin) - juulis sündinute õnnekivi ja Ruby ongi paljus Perl-i järglane. Loomulikult ei ole programmeerijate idee ideaalsest programmeerimiskeelest ühesugune. Keele valikut mõjutavad väga paljud tegurid: programmeeritav ülesanne, programmeerija iseloom, haridus/koolitus (milliseid keeli ta üldse tunneb? - lapsele, kes just avastas haamri, näivad kõik asjad olevat naelad...) jne. Kuid programmeerija ülesanne on alati lahendada probleem, mitte maadelda translaatoritega. Ja kuna programeerijad on inimesed, peaks programmeerimiskeelte areng toimuma loomulike keelte suunas, mitte jälgima arvuti mälupesa pikkust (täht kodeeritakse baidiga, seega näiteks eesti täpitähti ei saa otse kasutada) või programmeerimiskeeltes kunagi kasutusele võetud konstruktsioone ("Kõik tunnevad C-d, sellepärast tegime Java keele ja Java süntaksi C-keele eeskujul!" - Java autorite õigustus Java keeruka süntaksi õigustamiseks). Arvutid arenevad kiiresti, kunagised "nipitamised" mälu kokkuhoiuks või programmi veidi kiiremaks muutmiseks pole tänapäeval enam eriti olulised. Arvutiresursside väga vaba kasutamise (laamendamise) eeskuju annab Microsoft - iga järgmine Windows-i versioon on vajab uut, suuremat ja võimsamat arvutit, sest vanasse see enam ei mahu. Programmeerijad on lisanud populaarsetele arenguseadustele (Moore seadus - arvuti tähtsamad omadused kahekordistuvad umbes 18 kuu jooksul, s.t. teie koduarvuti muutub pooleteise aastaga kaks korda viletsamaks) veel ühe, raudvara/tarkvara arengutendentse kajastava seaduse: "Andy annab ja Bill võtab..." ("Andy giveth and Bill taketh away"). Andrew Steven Grove on Intel-i presindent, kelle juhtimisel Intel-i toodang on seni jälginud Moore seadust, s.t. sama hinnaga arvuti on pooleteise aasta pärast kaks korda parem; Bill Gates on Microsofti tarkvara peaprogrammist; Microsofti tarkvara nimetatakse sageli paksvaraks (fatware) - ebaloomulikult suured programmid, mille järgmine versioon kunagi ei mahu olemasolevasse arvutisse, selle kasutamiseks peab ostma uue arvuti (nii on juhtunud kõigi Windows-i uute versioonidega), seega tõesti - Andy annab ja Bill võtab.

Tabavalt on programmeerimiskeele soovitavad omadused kokku võetud programmeerimiskeele Ruby õpiku/manuaali sissejuhatuses "Programming Ruby.The Pragmatic Programmer's Guide", D. Thomas, A. Hunt (vt. http://www.rubycentral.com/book/index.html) :

... we like dynamic languages that adapt to us, without arbitrary, rigid rules
... we need clarity so we can communicate using our code
... we value conciseness and the ability to express a requirement in code accurately and efficiently. ... The less code we write, the less that can go wrong.
... we want to be as productive as possible, so we want our code to run the first time; time spent in the debugger is time stolen from the development clock. It also helps if we can try out code as we edit it; if you have to wait for a 2-hour make cycle, you may as well be using punch cards and submitting your work for batch compilation.
... we want a language that works at a high level of abstraction. The higher level the language, the less time we spend translating our requirements into code.

Ruby süntaksist ettekujutuse saamiseks on järgnevas esimese neljakümne Fibonacci arvu arvutamise programm Ruby-s:

def Fibonacci()
f0 = f1 = i = 1
n = 40
while (i < n)
i = i + 1
f = f0 + f1
print i,"-s Fibonacci arv on ",f,"\n"
f0 = f1
f1 = f
end
end

Fibonacci()
Smalltalk

SqueakSmalltalk on keel, mis vist on mõjutanud programmeerimiskeelte arengut kõige rohkem. Kui see 1970-lõpus ilmus, toimus programmeerimine enamasti veel käsurealt, täielikult puudusid programmeerimisümbrused (IDE - Integrated Development Environment) ja programmieditorid. Kuid Smalltalk-il oli akendega editeerimisümbrus, erinevate fontidega editor, graafiline siluja (debugger) ja üles-hüppavad (pop-up) hiiremenüüd - sellest kasutajaümbrusest said ideesid algul Macintosh-i ja hiljem Windows-i operatsioonisüsteemid; Smalltalk-is kasutati hiirt peaaegu kümme aastat varem kui PC-de kasutajad isegi nägid sellist. Ja kogu Smalltalk-i ideoloogia erines kõigi eelnevate programmeerimiskeelte ideoloogiast - see oli esimene objekt-orienteeritud programmeerimiskeel.

Smalltalk põhineb sõnumitel - objektile saadetakse sõnum ja objekt käivitab samanimelise meetodi; sõnumi süntaks on

vastuvõtja meetod argument

Kommentaarid on jutumärkides (stringieraldajad on apostroofid '...'), koolon : märgib, et järgneb veel argumente; avaldised (käsud) lõpevad punktiga:

cd play.   "objektile cd saadetakse sõnum play ja see käivitab oma meetodi play"
cd playfromTrack: 2 to: 4.

Selline süntaks imiteerib loomuliku keele lihtlauset: objekt on alus, sõnum/meetod - verb ja argumendid - sihitis või täiend. Kuid Smalltalk-i süntaks on üsna harjumatu tavaliste imperatiivsete keelte kasutajatele: sin(0.7) asemel tuleb öelda 0.7 sin (objektile 0.7 saadetakse sõnum sin), omistamine a[i]=3 kirjutatakse kujul a at: i put: 3., , blokk ümbritsetakse mitte figuursulgudega (nagu C-s), vaid kandiliste sulgudega jne. Mõnikord näib süntaks ebaloogilisena: whileDo tsüklis peaks vastuvõtja olema täidetav blokk ja argument - tõeväärtus, kuid tegelikult on vastupidi (vt. allpool olevat näidet). Ranget tüübikontrolli ei ole, kuid kõik muutujad tuleb enne kasutamist deklareerida ja lokaalsete muutujate f1, f2, f deklaratsioon esitatakse kujul | f1 f2 f3 | (globaalsed muutujad algavad suurtähega).

Kuid Smalltalk-il on peale ajaloolise aupaiste (esimene objekt-orienteeritud keel) ka ustav kasutajaskond ja praegu tegeleb see Smalltalk-i autori Alan Kay poolt loodud uue, multimeedia-Smalltalk-i Squeak arendamisega; Squek-is on nii kahe- kui ka kolmemõõtmeline graafika, head heli (mitmehäälne midi ja helifontide kasutamine) ja videokäsitlemise (Flash) võimalused jne - Kay põhitöövahend on Apple Macintosh, mille multimeedia-omadused on alati olnud Windows-ist samm ees. Squeak on vaba tarkvara ja vabalt mahalaaditav. Järgnevas on Fibonacci arvude programm Squeak-i süntaksiga; kuna Squeak-is on lubatud suvalise täpsusega täisarvud, siis on järgnevas lastud esitada Fibonacci arve kuni kahesajandani (võiks veel rohkem, kuid siis ei mahuks tulemused enam reale):

| f f1 f2| "deklareerime muutujad"
f1 := 1.
f2 := 1.
i := 1.
[i < 200]
whileTrue: "kuni eelmine blokk on tõene, täidame järgneva"
[
f := f1+f2.
f1 := f2.
f2 := f.
i := i+1.
Transcript show: i asString, '-s Fibonacci arv on ',f asString; cr.
].
^ f. "väljastame tulemuse"
- tulemuseks saame täpselt samasuguse tabeli nagu eelnevates näidetes, kuid proovige "tavalistes" programmeerimiskeeltes (C-s või Java-s) jõuda nii suurte arvudeni, ilma et esitamistäpsus langeks (järguga esituse korral on täpsus väiksem):
...
197-s Fibonacci arv on 107168651819712326877926895128666735145224
198-s Fibonacci arv on 173402521172797813159685037284371942044301
199-s Fibonacci arv on 280571172992510140037611932413038677189525
200-s Fibonacci arv on 453973694165307953197296969697410619233826

speakerManArvude väljastamiskäsk näib veidi keeruline; käsk Transcript show näitab tulemuse eraldi aknas, kuid kui see asendada käsuga Speaker manWithHead say, hüppab välja mehike, kes räägib tulemuse häälega (loomulikult inglise keeles) - Squeak on multimeediakeel ja selle loojate üks eesmärke oli teha programmeerimine lõbusamaks, nii et see oleks paremini kasutatav laste õpetamisel.

Smalltalk-80 oli ka esimene süsteem, kus transleerimise esimene etapp lõppes baitkoodiga (vahekeel), mida erinevates ümbrustes (operatsioonisüsteem+protsessor) täideti selle ümbruse jaoks loodud virtuaalmasinas; baitkood on sama kõigi ümbruste jaoks. Squeak loojad läksid veel kaugemale - peaaegu kogu Squeak on kirjutatud Squeak-is! See sai võimalikuks, kui loodi (väike) Smalltalk noolC translaator; kuna Smalltalk-i virtuaalmasin on kirjutatud Smalltalk-is, siis võimaldab see transleerida virtaalmasina Smalltalk-koodi C-keelseks programmiks, mis transleeritakse iga ümbruse jaoks selle virtuaalmasinaks ja seejärel sai võimalikuks Squeak-i programmeerimine Smalltalk-is, s.t. Squeak-is enese keelt kasutades!

AliceAlice. Ka see Carnegie-Mellon-i ülikoolis loodud vabalt mahalaaditav süsteem on mõeldud ennekõike programmeerimise õpetamiseks multimeedia abil. Selleks on süsteemis olemas palju kolmemõõtmelisi animeeritud objekte, heli- ja kaameraeffekte jne. Ka see on objekt-orienteeritud süsteem, kuid kasutab lihtsasti arusaadavat süntaksit, mis meenutab (veidi) Java-keele süntaksit (oluline erinevus on mitmesõnaliste tühikuga võtmesõnade kasutamine!). Süsteemis on palju kolmemõõtmelisi objekte (näiteks kolmemõõtmeline iluuisutaja IceSkater), millel on oma meetodid (näiteks set pose); meetoditel on argumendid (duration, style); keele juhtimiskonstruktsioonide süntaks erineb tavalisest, näiteks blokk (C-s figuursulgudega) algab sõnadega Do together ja tsükkel: Do in order ja blokki kestvus näidatakse reataandega (nagu Python-is, Alice editoris näidatakse blokid värvidega); kõik see võimaldab väga lihtsalt käivitada mitmesuguseid animatsioone, mänge jne, näiteks võib kasutaja kõrvaloleva iluuisutaja allolevate käskudega ilusaid piruette tegema panna:

Iceskater
Iceskater set pose IceSkater.pose duration = 1 second style= begin gently
Do together
IceSkater.Abs.Chest set pose IceSkater.Abs.Chest.pose2
duration=1 second style=begin gently
IceSkater set pose IceSkater.pose3
duration=1 second style = begin gently
Do in order
Wait 0.25 seconds
Iceskater turn right 2.25 revolutions
duration= 1.5 seconds style=gently asSeenBy=Camera
IceSkater.Abs.Chest set pose IceSkater.Abs.Chest.pose
duration=1 second style=gently
IceSkater set pose IceSkater.pose
duration=1 second style = gently

Ei ole olemas üht, "parimat" programmeerimiskeelt, samuti nagu ei ole "parimat" loomulikku keelt - nii eesti, läti kui ka inglise keelel on oma kasutajaskond, kes ei ole nõus sellest keelest loobuma. Erinevate kasutusalade (süsteemiprogrammeerimine, interaktiivsete mängude programmeerimine, arvutivõrkude arendamine jne) jaoks on tarvis erinevate omadustega töövahendeid, s.t. programmeerimiskeeli. Kaasajal iseloomustab tarkvarategemist Internetiprogrammeerimise (e-kaubandus, portaalid, semantiline WWW jne) suur osakaal ja üldine püüe lihtsustada programmeerimiskeeli, tuua neid lähemale loomulikele keeltele. Sellepärast arvavad paljud, et hea, kasutajale lihtne ja arusaadav programmeerimiskeel peab olema dünaamiline, s.t. staatiliste, fikseeritud tüüpideta, mis ise püüab teha kõikvõimalikud tüübiteisendused, seega näiteks järgnevate ridade täitmine ei peaks kaasa tooma veateateid:

muutuja_kuus = 2 + "4"; //string!
muutuja_neli = two * 2;

Sellised omistamised toimivad vaid juhul, kui translaator peab kõige tähtsamaks objekti konteksti - kus see esineb ja mida sellega tahetakse teha. Kuna string "4" ja sõna two mõlemad esinevad aritmeetilises avaldises (koos "tõeliste" numbritega), omistamiskäsu paremal pool, on kõige tõenäolisem, et need peaks tähistama arve, millega saab arvutada.

Loomulikule keelele lähenemise tendentsi võib märgata paljudes programmeerimiskeeltes ja -formaatides. Näiteks visuaalse informatsiooni (piltide, video) editorid lubavad värvide koodide asemel kasutada ka nimesid; kui HTML "tundis" algselt vaid värvinimesid aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow, siis kaasaja browserid tunnevad juba 128 värvinime, s.t. kõiki seitsme bitiga kodeeritavaid värvusi (Internet Explorer 6.02 kõiki siiski ei tunne).

See on üldine programmeerimiskeelte loomulikele keeltele lähenemise tendents, s.t. sõna/väljendi/lekseemi tähenduse määramisel on kõige olulisem selle ümbrus ja selle väljendas tabavalt Dave Thomas Ruby-keeles muutujate/objektide kasutamist iseloomustades: "If it walks like a duck, and talks like a duck, then it might as well be a duck" - kui see kõnnib nagu part ja prääksub nagu part , siis see võib väga hästi ollagi part ( see fraas on ka Python-1 manualis).



Veidrad keeli

Programmeerijad on (üldiselt)intelligentsed inimesed ja nad on välja mõelnud ka palju veidraid/lõbusaid keeli.

Järgnev on keeles Brainfuck kirjutatud selle keele translaator C-ks:

+++[>+++++<-]>>+<[>>++++>++>+++++>+++++>+>>+<++[++<]>---]

>++++.>>>.+++++.>------.<--.+++++++++.>+.+.<<<<---.[>]<<.<<<.-------.>++++.
<+++++.+.>-----.>+.<++++.>>++.>-----.

<<<-----.+++++.-------.<--.<<<.>>>.<<+.>------.-..--.+++.-----<++.<--[>+<-]
>>>>>--.--.<++++.>>-.<<<.>>>--.>.

<<<<-----.>----.++++++++.----<+.+++++++++>>--.+.++<<<<.[>]<.>>

,[>>+++[<+++++++>-]<[<[-[-<]]>>[>]<-]<[<+++++>-[<+++>-[<-->-[<+++>-
[<++++[>[->>]<[>>]<<-]>[<+++>-[<--->-[<++++>-[<+++[>[-[-[-[->>]]]]<[>>]<<-]
>[<+>-[<->-[<++>-[<[-]>-]]]]]]]]]]]]]

<[
-[-[>+<-]>]
<[<<<<.>+++.+.+++.-------.>---.++.<.>-.++<<<<.[>]>>>>>>>>>]
<[[<]>++.--[>]>>>>>>>>]
<[<<++..-->>>>>>]
<[<<..>>>>>]
<[<<..-.+>>>>]
<[<<++..---.+>>>]
<[<<<.>>.>>>>>]
<[<<<<-----.+++++>.----.+++.+>---.<<<-.[>]>]
<[<<<<.-----.>++++.<++.+++>----.>---.<<<.-[>]]
<[<<<<<----.>>.<<.+++++.>>>+.++>.>>]
<.>
]>
,]

<<<<<.<+.>++++.<----.>>---.<<<-.>>>+.>.>.[<]>++.[>]<.
>[Translates brainfuck to C. Assumes no-change-on-EOF or EOF->0.
Generated C does no-change-on-EOF, and uses unistd.h read and write calls.
Daniel B Cristofani (cristofdathevanetdotcom)
http://www.hevanet.com/cristofd/brainfuck/]



Järgnev keeles Befunge kirjutatud programm trükib välja esimese salmi laulust "99 Bottles of Beer":
 9::*\2*+00p0v"."0<
>310p0"," >"llaw eht no "v >#v_ ^
^_210p0"--:" v ,
: v " of beer" < :
- >"selttob"00g.^ < <
1 >00g1-#^_$" elttob erom enO" ^
>00g#^_$" selttob erom oN" ^
^_110p0",dnuora ti ssap ,nwod eno ekaT"^
^:-1_010p00g1-00pvv:-1g01_@#g00,*25<
^ <

Ülesandeid:
1.

Küsimused, probleemid: © Jaak Henno