Koja su mane mašinski zavisnih programskih jezika? Programer mora da bude upoznat sa detaljima računara za koje piše program i mora da piše novu verziju za druge arhitekture. Koje su prednosti viših programskih jezika? Čine programiranje lakšim i udobnijim, sakrivaju detalje arhitekture od programera. Zašto postoji veliki broj programskih jezika? Iako su vrlo slični, različiti programski jezici su specijalizovani za rešavanje različitih problema. Čemu služe programskih prevodioci? Pretvaraju programski jezik višeg nivoa u mašinski kod. Šta meri TIOBE indeks? Popularnost programskih jezika koristeći razne faktore. Koja je osnovna razlika izmedu proceduralnog i deklarativnog programiranja? Proceduralni zahtevaju od programera da precizno opiše proceduru rešavanja problema, a deklarativni od programera zahtevaju da precizno opiše problem, dok se programski jezik bavi njegovim rešavanjem. Primeri jezika koji pripadaju proceduralnoj paradigmi. C, Pascal, Python, Java Primeri jezika koji pripadaju deklarativnoj paradigmi: Prolog, SQL Koje su četiri osnovne programske paradigme? Navesti osnovne karakteristike svake od njih. Imperativna - stanje programa se sadrži u promenljivama koje se transformišu naredbama
Funkcionalna - posmatraju programiranje kao proces izračunavanja matematičkih funkcija
Objektno-orijentisana - stanje se čuva u objektima i menja se pozivanjem njihovih metoda
Logička - oslanja se na matematičku logiku (metod rezolucije) Koja četiri značajna programska jezika su prva istorijski nastala? Kojim paragimama pripadaju ti jezici? Fortran - imperativni
Lisp - funkcionalni
Cobol - imperativni
Algol - imperativni Koje su osnovne karakteristike imperativne paradigme? Navesti bar četiri jezika koji pripadaju imperativnoj paradigmi. Stanje programa se sadrži u promenljivama koje se transformišu naredbama
Fortran, Cobol, Basic, C Koje su osnovne karakteristike funkcionalne paradigme? Navesti bar četiri jezika koji pripadaju funkcionalnoj paradigmi. Posmatraju programiranje kao proces izračunavanja matematičkih funkcija (lambda račun)
Lisp, Haskel, Erlang, Elixir Koje su osnovne karakteristike objektno-orijentisane paradigme? Navesti bar četiri jezika koji pripadaju objektno-orjentisanoj paradigmi. Program se sastoji iz objekata čije se stanje menja pozivanjem njihovih metoda.
C++, Java, C#, Objective C Koje su osnovne karakteristike logičke paradigme? Oslanja se na matematičku logiku (metod rezolucije). Koji jezik se koristi kao sinonim za logičko programiranje? Prolog Koje su osnovne karakteristike i ciljevi skript programiranja? Koristi se za pisanje kratkih, jednostavnih programa koji automatizuju zadatke ili upravljaju funkcijama većih softvera. Jednostavno se koriste. Koji poddomeni skript programiranja postoje? Postoje skript jezici koji se koriste u domenu veb programiranja, opšte namene, obradu teksta, komandni jezici i s specifičnim domenom. (matematika, statistika). Koji jezici podržavaju ovu paradigmu skript programiranja? Perl, Python, PHP, Javascript, Lua, Ruby, Bash, R i S Koje su osnovne karakteristike i ciljevi konkurentnog programiranja? Omogućava izvršavanje više zadataka u istom vremenskom intervalu. Pomaže u poboljšanju korišćenja dostupnih resursa i povećanju performansi. Kada je nastalo konkurentno programiranje i kako je dobilo na značaju? Razvijalo se od jezika Algol ali je steklo popularnost početkom 21. veka zbog veće dostupnosti mašina s više procesora. Koji jezici podržavaju ovu paradigmu konkurentnog programiranja? Skoro svi jezici opšte namene mogu da ga koriste, ali postoje specifično napravljeni jezici (Go, Rust, Kotlin). Koji funkcionalni programski jezici podržavaju konkurentno programiranje? Haskel, Erlang, Elixir Koje su osnovne karakteristike i domeni upotrebe komponentnog programiranja? Razvoj softvera korišćenjem nezavisnih, ponovo upotrebljivih komponenti. Domeni: biblioteke, moduli, mikroservisi. Kojoj osnovnoj paradigmi je komponentno programiranje najsličnije i zašto? Najsličnije objektno orijentisanoj jer je princip rada komponenti skriven i posledice otkrivene preko metoda komponenti. Koji jezici podržavaju komponentno programiranje? Svi moderni jezici Koje su osnovne karakteristike i ciljevi vizuelnog programiranja? (deklarativna paradigma) Koristi grafičko okruženje za kreiranje programa. Intuitivnije i pristupačnije za početnike, i može biti korisno i u nekim kompleksnim sistemima. Koja okruženja podržavaju paradigmu komponentnog programiranja? Scratch, Blockly, Node-RED, LabVIEW, Unreal Engine Blueprints. Koje su osnovne karakteristike i ciljevi generičkog programiranja?
Koji jezici podržavaju ovu paradigmu? Omogućava pisanje koda koji može da se koristi s različitim tipovima podataka. Uopšteno rešenje za probleme.
Svi moderni jezici (C++, Java, C#) Koje su osnovne karakteristike i domeni upotrebe paradigme upitnih jezika?
Koji jezici podržavaju ovu paradigmu? (deklarativna paradigma) Efikasna pretraga, manipulacija i upravljanje podacima u različitim vrstama baza podataka (relacione, in-memory, rdf, xml).
Jezici: SQL, SPARQL, XQuery Koje su osnovne karakteristike i domeni upotrebe paradigme programiranja оgraničenja?
Koji jezici podržavaju ovu paradigmu? (deklarativna paradigma) Programer detaljno opisuje uslove u sistemu za koji se traži rešenje.
Domeni: Optimizacija, rešavanje kombinatornih problema
Jezici: (svi imaju biblioteke) C, C++, Java, Python, C# Zašto jezici za obeležavanje teksta ne pripadaju programskim paradigmama? Koji su najbitniji jezici za obeležavanje teksta? Njima se definiše struktura nekog tekstualnog dokumenta, ne programa.
HTML, CSS, Latex, Markdown Navesti primer logičkog jezika, primer funkcionalnog programskoj jezika i primer objektno-orijentisanog programskog jezika. Prolog, Haskel, Java Kojoj grupi jezika pripada Lisp? funkcionalni jezik Kojoj grupi jezika pripada Prolog? logički jezik Kojoj grupi jezika pripada C++? imperativni, objektno orijentisani Kojoj grupi jezika pripada Haskell? funkcionalni Kojoj grupi jezika pripada C? imperativni Kojoj grupi jezika pripada Go? konkurentni Za veliki broj savremenih programskih jezika kažu da su muliparadigmatski (engl. multiparadigm). Šta to znači? Dopuštaju korišćenje više od jedne programske paradigme istovremeno. Na kojoj logičkoj metodi je zasnovan jezik Prolog? Predikatskoj logici. Na kojem formalizmu izračunavanja je zasnovan jezik Lisp? Lambda računu. U objektno-orijentisanoj paradigmi, šta čini jednu klasu? Polja (promenljive) i metode (funkcije koje manipulišu poljima) Šta definiše leksika, a šta sintaksa programskih jezika? Leksika se bavi opisivanjem osnovnih gradivnih elemenata jezika, a sintaksa načinima za kombinovanje tih osnovnih elemenata u ispravne jezičke konstrukcije. Navesti primer leksički ispravnog, ali sintaksički neispravnog dela programa. Primer leksički ispravnog, ali sintaksički neispravnog dela programa je onaj koji koristi samo dozvoljene tokene, ali ih kombinuje na način koji ne odgovara gramatici jezika.
C++: int = x 5; Šta definiše semantika programskih jezika? Pridružuje značenje sintaksički ispravnim rečenicama jezika. Navesti primer sintaksički ispravnog, ali semantički neispravnog dela programa. int x = 0;
int x = 5; Koja je razlika izmedu statičke i dinamičke semantike? Neki aspekti semantičke korektnosti programa se mogu proveriti tokom prevođenja programa (na primer, da su sve promenljive koje se koriste u izrazima definisane i da su odgovarajućeg tipa), dok se neki aspekti mogu proveriti tek u fazi izvršavanja programa (na primer, da ne dolazi do deljenja nulom). Na osnovu toga, razlikuju se statička i dinamička semantika. Čime se bavi pragmatika programskih jezika? Navesti primere. Govori o izražajnosti jezika i o odnosu različitih načina za iskazivanje istih stvari.
Odnosi se na praktičnu upotrebu jezika u stvarnim situacijama programiranja, tj. kako se jezik koristi u praksi za postizanje specifičnih ciljeva (efikasnost, čitljivost, održivost koda). Kako i zašto programeri koriste odredene elemente jezika u različitim kontekstima.
primer: while(true) ili for(;;) Šta je kompilator, a šta interpretator? Kompilatori su programski prevodioci kod kojih su faza prevođenja i faza izvršavanja programa razdvojene. Nakon analize izvornog koda programa višeg programskog jezika, kompilatori generišu izvršivi (uglavnom mašinski) kôd i dodatno ga optimizuju, a zatim čuvaju u vidu izvršivih (binarnih) datoteka.
Interpreteri su programski prevodioci kod kojih se faza prevodenja i faza izvršavanja programa preklapaju. Interpretatori analiziraju deo po deo (najčešće naredbu po naredbu) izvornog koda programa i odmah nakon analize vrše i njegovo izvršavanje. Rezultat prevođenja se ne smešta u izvršive datoteke, već je ponovo kreira prilikom svakog izvršavanja. Koje su osnovne prednosti, a koje su mane korišćenja kompilatora u odnosu na korišćenje interpretatora? Prednosti kompilatora: Jednom sačuvani mašinski kôd moguće je izvršavati neograničen broj puta, bez potrebe za ponovnim prevođenjem. Krajnjim korisnicima nije neophodno dostavljati izvorni kôd programa na višem programskom jeziku, već je dovoljno distribuirati izvršivi mašinski kôd. Prevođenjem se gubi svaka veza izmedu izvornog i izvršivog koda programa.
Mane kompilatora: Svaka (i najmanja) izmena u izvornom kodu programa zahteva ponovno prevođenje programa ili njegovih delova pri čemu samo prevođenje zahteva značajne, pre svega vremenske resurse. Ako se koristi kompilator, da li je za izvršavanje programa korisniku neophodno dostaviti izvorni kôd programa? Ne Ako se koristi interpretator, da li je za izvršavanje programa korisniku neophodno dostaviti izvorni kôd programa? Da U čemu je razlika izmedu interpretatora i kompilatora? Kod kompilatora su faza prevođenja i faza izvršavanja programa razdvojene, dok su kod intepretera spojene. Da li se, generalno, brže izvršava program koji se interpretira ili onaj koji je preveden kompilatorom? Zašto? Onaj koji je preveden kompilatorom zato što ne mora da se prevodi dok se izvršava. Na koji načine se interpretacija i kompilacija mogu kombinovati? Prevedemo jezik visokog nivoa u poluprevedeni kod (bytecode) koji se interpretira odvojeno za svaku platformu (Java, C#). Prvim implementiranim kompilatorom se smatra onaj napravljen za jezik Fortran. Kada je on nastao? Prvi interpreter za Fortran: 1953.
Prvi kompilator za Fortran: 1956. Navesti osnovne slojeve kompilatora. Prednji, srednji i zadnji. Čime se bavi prednji sloj kompilatora? Čita program zapisan programskim jezikom višeg nivoa, obrađuje i čuva u vidu nekog međukoda
• Leksički analizator
• Sintaksički analizator
• Semantički analizator
• Generator međukoda Čime se bavi srednji sloj kompilatora? Optimizuje međukod i priprema ga za prevođenje u ciljni jezik (uglavnom mašinski)
• Optimizator međukoda Čime se bavi zadnji sloj kompilatora? Prevodi internu reprezentaciju (međukod) u ciljni jezik
• Generator i optimizator ciljnog koda Zašto postoje slojevi kompilatora i koja je njihova uloga? Razlaganje kompilatora na slojeve omogućava kombinovanje različitih prednjih slojeva (koji omogućavaju prevođenje različitih programskih jezika na međukod) i različitih zadnjih slojeva (koji su prilagođeni različitim arhitekturama računara) sa jednim srednjim slojem, koji je i najkompleksniji sloj kompilatora. Navesti osnovne faze u prevođenju programskih jezika. Leksička analiza
Sintaksička analiza
Semantička analiza
Generisanje međukoda
Optimizacija međukoda
Generisanje i optimizacija ciljnog koda Koja faza kompilacije najviše utiče na efikasnost izvršivog programa? Optimizacija međukoda Šta je rezultat leksičke analize programa? Rezultat je niz leksičkih jedinica (tokena) Šta leksički analizator dobija kao svoj ulaz, a šta vraća kao rezultat svog rada? Ulaz: izvorni program kao niz karaktera
Izlaz: tokeni Šta je to leksička analiza i koji se poslovi vrše tokom nje? Proces izdvajanja tokena, osnovnih jezičkih elemenata, iz niza ulaznih karaktera (programa). Koji poslovi se vrše tokom leksičke analize? Tokenizacija (prepoznavanje tokena)
Eliminacija nepotrebnih elemenata (komentara, tabulatora, novih redova)
Formiranje izlazne sekvence tokena (svaki token ima pridodatu vrednost)
Popunjavanje tabele simbola
Prepoznavanje i prijava leksičkih grešaka Kako se zovu programi koji vrše leksičku analizu? Leksički analizatori ili lekseri U kom vidu se opisuju pravila koja se primenjuju u fazi leksičke analize? Regularni izrazi Koja analiza se u kompilaciji programa vrši nakon leksičke analize? Sintaksička analiza Šta je to sintaksička analiza? Sintaksička analiza, poznata i kao parsiranje, je proces organizovanja leksema izdvojenih u fazi leksičke analize u ispravnu jezičku konstrukciju. (provera gramatičkih pravila) Šta je zadatak sintaksičke analize programa? Provera da li je niz tokena dobijen iz leksičke analize, u skladu sa sintaksičkim pravilima programskog jezika, odnosno sa njegovom formalnom gramatikom. Šta sintaksički analizator dobija kao svoj ulaz, a šta vraća kao rezultat svog rada? Ulaz: Tokeni
Rezultat: Sintaksičko stablo Kako se zovu programi koji vrše sintaksičku analizu? Sintaksički analizatori ili parseri. U kom obliku se opisuju pravila koja se primenjuju u fazi sintaksičke analize? Konteksno-slobodne gramatike Da li su regularni jezici su obavezno i kontest-slobodni? da Da li su kontekstno-slobodni jezici su obavezno i regularni? ne Da li metajezik BNF ima istu izražajnost kao regularni jezici? ne Da li metajezik BNF ima istu izražajnost kao kontekstno-slobodni jezici? da Da li metajezik BNF ima istu izražajnost kao metajezik EBNF? ne Od čega dolazi skraćenica EBNF? Proširena Bakus-Naurova forma. Koji od sledećih metajezika je najizražajniji:
(a) kontekstno-slobodne gramatike;
(b) BNF;
(c) EBNF;
(d) svi navedeni metajezici imaju istu izražajnost. svi navedeni metajezici imaju istu izražajnost. Koji su osnovni ciljevi optimizacije međukoda? Dobijanje efikasnijeg i kvalitetnijeg ciljnog koda. Primeri optimizacija međukoda. Eliminacija mrtvog koda, propagacija konstantni, promena poretka naredbi, transformacija petlji (može i eliminacija). Koja je poslednja faza u kompilaciji i za šta je ona odgovorna? Generisanje koda. Završava pretvaranje programskog koda u mašinski. Ukoliko je raspoloživ kôd nekog programa na nekom višem programskom jeziku (na primer, na jeziku C), da li je moguće jednoznačno konstruisati odgovarajući mašinski kôd? Da. Ukoliko je raspoloživ mašinski kôd nekog programa, da li je moguće jednoznačno konstruisati odgovarajući kôd na jeziku C? Ne.