.. · universaalsed programmeerimiskeeled (ei sõltu protsessori käsustikust) e. kõrgtaseme keeled, saab liigitada paradigma alusel · keskkonnad tööks valmiskomponentidega, võimaldavad "liimida" valmiskomponendid tervikuks Keele muudab arvutile arusaadavaks eriline süsteemitarkvara hulka kuuluv programm - keele translaator: · Kompilaator - tõlgib kõrgtaseme keelest masinkoodi (või mingisse nn. vahekoodi, näit. Java baitkoodi). · Interpretaator - täidab programmi ilma masinkoodi moodustamata; tavaliselt interpreteeritakse vahekoodi, mitte programmi teksti. · JIT (Just In Time) kompilaator - teisendab vahekoodi masinkoodiks "vajadusel" (näit. optimiseerimise eesmärgil). Näiteks keele Java korral Programmi elutsükkel (IDE mõttes - small picture, mitte segi ajada elutsükliga tarkvaratootmises):
puustruktuuri põhiväärtuse ja alamväärtustega(’’vanem ja lapsed“), mis on ühendatud sõlmede kogumina. 6. nädal • Eksamiks: kompileerimine, interpreteerimine, parsimine, jit, vahekood, programmeerimiskeeled vs kirjelduskeeled, json, html, sql, keelte äratundmine (assembler, fortran, cobol, lisp, C, modula/pascal, python). Mis on data warehouse. Kompileerimine - tõlgib kõrgtaseme keelest masinkoodi (või mingisse nn. vahekoodi, näit. Java baitkoodi) - Kompilaator teeb neist assemblerikeelsed ajutised failid / võtab “source code”i ja tõlgendab selle masinale arusaadavaks koodiks. Masinkoodis programm nimega kompilaator teisendab keeles X programmi masinkoodfailiks Y. Seejärel täidetakse saadud masinkoodis programm Y. Näited: C, Fortran, Go. Interpreteerimine – masinkoodis programm nimega interpretaator loeb sisse X keeles faili,
Java on pealtvaadates sarnane C ja C++ keeltega, sest võttis nendelt üle suure osa põhikonstruktsioone, jättes samas kasutamata vahendid, milleta läbi saab ja mis kirjutamise keerulisemaks või veaohtlikumaks teevad. Tulemusena on Java C++ keelest lihtsam ja seega on Javat kergem õppida ja sellele translaatoreid kirjutada. · Programmi täitmine. Java-kood kompileeritakse vahekoodi, seda nimetatakse baitkoodiks, mida edaspidi kas täidetakse interpretaatoriga või kompileeritakse, C++ keeles oli aga esialgselt määratud, et programm kompileeritakse antud platvormi masinakeelde. See määrab keelte kasutamise alad: Java keelt ei kasutata seadmete draiverite ja madalatasemeliste süsteemsete utiliitide kirjutamiseks. Java mehhanism aga lubab isegi baitkoodi kasutada erinevatel platvormidel
pointer Eksam– Eksamobjekt Eksammis Eksamhoiab Eksammäluaadressi 5 Eksamiks: kompileerimine Eksam– EksamC, FORTRAN, Go interpreteerimine Eksam– programmi kood jooksutatakse otse masinkoodina ilma kompileerimata Py, php, Perl parsimine Eksam– Eksamsüntaksianalüüs – analüüsitakse arvutikeeles/andmestrukrtuurides (ehitatake süntaksipuu) esinevaid stringe vastavalt grammatikareeglitele jit Eksam– Eksaminterpretaator interpreerib vahekoodi Y, kuid kompileerib töö ajal osa Y-st masinkoodiks, mida seejärel täidab (nt Java, C#, Firefoxi JS) – Just-In-Time Eksamcompilation vahekood – nö pseudo-assembler, milleks teisendatakse interpreteerimisel kood, et rida-realt täita programmeerimiskeeled kirjelduskeeled Eksam– text lay - html, html lay - css, database query - sql, data representation - Eksamxml, Eksamjson, csv
..) Parser ehk süntaksianalüüs: süntaksipuu - Parser ehitab mällu süntaksipuu, mida siis edasi töödeldakse Kuidas keeles X kirjutatud programmi täidetakse? Kompileerimine: masinkoodis programm nimega kompilaator teisendab keeles X programmi masinkoodfailiks Y. Seejärel täidetakse saadud masinkoodis programm Y. Näited: C, Fortran, Go Interpreteerimine: masinkoodis programm nimega interpretaator loeb sisse X keeles faili, teisendab ta nö pseudo-assembleriks / vahekoodiks ja asub seda vahekoodi varianti rida-realt täitma. Näited: Python, PHP, Perl, vanemad Javascripti mootorid jne. NB! Programmi interpreteerimine on ca 10-200 korda aeglasem, kui kompileeritud koodi täitmine. Põhimõtteliselt saaks igas keeles kirjutatud programme nii interpreteeritult täita kui kompileerida. Praktikas eelistatakse vahel interpreteerimist, vahel kompileerimist. Programmeerimiskeelte kolm põhi-erinevusteemat: Süntaks (kuidas kirjutatakse näiteks if .. then .. else ühes või teises keeles)
Näited: Python, PHP, Perl, vanemad Javascripti mootorid jne. NB! Programmi interpreteerimine on ca 10-200 korda aeglasem, kui kompileeritud koodi täitmine. Põhimõtteliselt saaks igas keeles kirjutatud programme nii interpreteeritult täita kui kompileerida. Praktikas eelistatakse vahel interpreteerimist, vahel kompileerimist. Kompromissvariante: Kompilaator kompileerib X faili vahekoodiks Y, seejärel interpreteeritakse vahekoodi Y (Python, Java). Interpretaator interpreteerib vahekoodi Y, kuid kompileerib töö ajal osa Y-st masinkoodiks, mida seejärel täidab (Java ja Firefoxi Javascript) nn just-in-time compilation ehk JIT. Chrome V8 Javascript: kompileerib algul kogu programmi masinkoodiks kiire kompilaatoriga, seejärel kompileerib töö käigus selgunud kriitilised kohad aeglasema optimeeriva kompilaatoriga, mis annab kiiremini töötava tulemuse.
pole vahet, millises keeles programmeerid, sest kompileeritud kood on lõpuks ikkagi sama. Seega saab iga programmeerija valida endale just selle keele, mis kõige hingelähedasem. Järgmine tase on CLR e. Common Language Runtime (Mono puhul CLI virtual machine), mis pakub hallatud (turvalist) keskkonda programmeerimiseks. Selles hallatud keskkonnas on keskse kontrolli all klasside laadimise e. mälu hõivamine, mälu vabastamine (Garbage collector) ning vahekoodi kompilaator masinkoodiks. Lisaks pakub CLR programmi loomiseks vajalikke klasse. Lisaks klasside kasutamise võimalusele on paljud neist ka päritavad e. nendest on võimalik pärimise teel luua oma klasse. Kõrval asuvalt diagrammilt on näha, et raamistik lisab uue kihi programmi ja riistvara vahele, mis loomulikult ei mõju hästi programmi jõudlusele. Hea uudis on see, et Microsofti .NET raamistik integreerub üsna ilusti Windowsi sisse muutudes osaks Windowsist. Enamgi veel, kui võtta