17
UNIVERZITET U NOVOM SADU TEHNIČKI FAKULTET „MIHAJLO PUPIN“ ZRENJANIN NASTAVNI PREDMET: Programski prevodioci PREDMETNI NASTAVNIK: Doc. dr Ljubica Kazi ŠK. 2020/21 13. ČAS – 21.5.2021. - PREDAVANJA TEMA: PrevoĎenje programskog koda sa jednog programskog jezika na drugi Elementi, tehnike i sistemi Interoperabilnost aplikacija Lingvistika i domensko znanje ontologije i ontološki jezici Linkeri i meĎuzavisnost modula, generisanje izvršne verzije programa PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG PROGRAMSKOG JEZIKA NA DRUGI OPŠTI ZADATAK PREVOĐENJA SA JEDNOG NA DRUGI PROGRAMSKI JEZIK [1] CILJEVI TRANSFORMACIJE IZVORNOG KODA IZ JEDNOG PROGRAMSKOG JEZIKA U DRUGI [4] Transformacija iz zastarelih tehnologija (legacy) u novije tehnologije Transformacija u okviru istog programskog jezika iz starije u noviju verziju programskog jezika UnapreĎenje performansi programa PROBLEMI PREVOĐENJA PROGRAMSKOG KODA SA JEDNOG NA DRUGI PROGRAMSKI JEZIK [4] PrevoĎenje naredbi iz jedne u drugu sintaksu ne smatra se velikim problemom. Problemi nastaju zbog: Semantičkih razlika - obrada oblasti važenja promenljivih je različita u raznim jezicima, neki jezici podržavaju statičke promenljive i funkcije, rad sa klasama drugi ne podržavaju, neki jezici imaju koncepte koji drugi programski jezici nemaju (npr. javascript's prototypes). Biblioteke - Postojanje velikog broja masivnih ugraĎenih biblioteka koje pružaju podršku mogućnostima programskog jezika zahteva da iste mogućnosti postoje u bibliotekama drugih programskih jezika ili se javlja potreba da se prevedu biblioteke Sličnost programskih jezika programski jezici izmeĎu kojih se vrši transformacija treba da budu iste vrste/kategorije/nivoa apstrakcije (npr. Pascal/C, C++/C, Java/Kotlin). Mogućnosti programskih jezika - neki programski jezici imaju odreĎene mogućnosti, dok drugi nemaju i zato je u odreĎenim situacijama prevoĎenje nemoguće ili limitirano. For example, you might be using a UWP class, which handles the writing of files outside the sandbox, but to lots of platforms, there is no such thing as a sandbox. The problem isn’t the code, it’s that without JavaFX, there is no such class as “VBox”. We can make something which is basically the same by using a WPF “StackPanel” which behaves roughly the same as a VBox in JavaFX, but our converter has no way of know that. Čitljivost ciljnog koda, mogućnost izvršavanja i mogućnost održavanja moguće je da se prilikom transformacija održi ista funkcionalnost i/ili sintaksna sličnost za početnim kodom, ali je ponekad čitljivost od strane programera, mogućnost izvršavanja i održavanja veoma limitirano i potrebno je da programeri izvrše potrebne korekcije. ZADACI PREVOĐENJA PROGRAMSKOG KODA SA JEDNOG NA DRUGI PROGRAMSKI JEZIK [4] 1. “Razumeti” funkcionalnost programskog koda i napisati prevedenu verziju na drugi jezik uz očuvanje iste funkcionalnosti 2. Ukoliko je moguće, za iste funkcionalne elemente, koristiti slične jezičke oblike u ciljnom izvornom kodu, koji odgovaraju jezičkim konstrukcijama početnog izvornog koda. Ukoliko nije moguće, koristiti najpogodnije jezičke oblike (npr. strukture podataka, ugraĎene funkcije iz pratećih biblioteka…)

PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

UNIVERZITET U NOVOM SADU TEHNIČKI FAKULTET „MIHAJLO PUPIN“ ZRENJANIN NASTAVNI PREDMET: Programski prevodioci PREDMETNI NASTAVNIK: Doc. dr Ljubica Kazi ŠK. 2020/21 13. ČAS – 21.5.2021. - PREDAVANJA TEMA:

PrevoĎenje programskog koda sa jednog programskog jezika na drugi Elementi, tehnike i sistemi Interoperabilnost aplikacija Lingvistika i domensko znanje – ontologije i ontološki jezici Linkeri i meĎuzavisnost modula, generisanje izvršne verzije programa

PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG PROGRAMSKOG JEZIKA NA DRUGI OPŠTI ZADATAK PREVOĐENJA SA JEDNOG NA DRUGI PROGRAMSKI JEZIK

[1] CILJEVI TRANSFORMACIJE IZVORNOG KODA IZ JEDNOG PROGRAMSKOG JEZIKA U DRUGI [4]

Transformacija iz zastarelih tehnologija (legacy) u novije tehnologije Transformacija u okviru istog programskog jezika iz starije u noviju verziju programskog jezika UnapreĎenje performansi programa

PROBLEMI PREVOĐENJA PROGRAMSKOG KODA SA JEDNOG NA DRUGI PROGRAMSKI JEZIK [4] PrevoĎenje naredbi iz jedne u drugu sintaksu ne smatra se velikim problemom. Problemi nastaju zbog:

Semantičkih razlika - obrada oblasti važenja promenljivih je različita u raznim jezicima, neki jezici podržavaju statičke promenljive i funkcije, rad sa klasama drugi ne podržavaju, neki jezici imaju koncepte koji drugi programski jezici nemaju (npr. javascript's prototypes).

Biblioteke - Postojanje velikog broja masivnih ugraĎenih biblioteka koje pružaju podršku mogućnostima programskog jezika zahteva da iste mogućnosti postoje u bibliotekama drugih programskih jezika ili se javlja potreba da se prevedu biblioteke

Sličnost programskih jezika – programski jezici izmeĎu kojih se vrši transformacija treba da budu iste vrste/kategorije/nivoa apstrakcije (npr. Pascal/C, C++/C, Java/Kotlin).

Mogućnosti programskih jezika - neki programski jezici imaju odreĎene mogućnosti, dok drugi nemaju i zato je u odreĎenim situacijama prevoĎenje nemoguće ili limitirano.

For example, you might be using a UWP class, which handles the writing of files outside the sandbox, but to lots of platforms, there is no such thing as a sandbox. The problem isn’t the code, it’s that without JavaFX, there is no such class as “VBox”. We can make something which is basically the same by using a WPF “StackPanel” which behaves roughly the same as a VBox in JavaFX, but our converter has no way of know that.

Čitljivost ciljnog koda, mogućnost izvršavanja i mogućnost održavanja – moguće je da se prilikom

transformacija održi ista funkcionalnost i/ili sintaksna sličnost za početnim kodom, ali je ponekad čitljivost od strane programera, mogućnost izvršavanja i održavanja veoma limitirano i potrebno je da programeri izvrše potrebne korekcije.

ZADACI PREVOĐENJA PROGRAMSKOG KODA SA JEDNOG NA DRUGI PROGRAMSKI JEZIK [4]

1. “Razumeti” funkcionalnost programskog koda i napisati prevedenu verziju na drugi jezik uz očuvanje iste funkcionalnosti

2. Ukoliko je moguće, za iste funkcionalne elemente, koristiti slične jezičke oblike u ciljnom izvornom kodu, koji odgovaraju jezičkim konstrukcijama početnog izvornog koda. Ukoliko nije moguće, koristiti najpogodnije jezičke oblike (npr. strukture podataka, ugraĎene funkcije iz pratećih biblioteka…)

Page 2: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

METODE PREVOĐENJA PROGRAMSKOG KODA SA JEDNOG NA DRUGI PROGRAMSKI JEZIK [4] Kompajliranje programskog koda sa višeg programskog jezika u asemblerski jezik i dekompajliranje u ciljni

programski jezik Primena alata za transformaciju iz izvornog koda jednog programskog jezika u drugi Primena metaprograma i metaprogramskih jezika, koji omogućavaju izvršavanje operacija transformacija

izvornog koda odreĎenim redosledom Manuelna korekcija generisanog koda nakon transformacije Uključiti vezu ka gotovim ugraĎenim bibliotekama u izvorni kod, ukoliko je potrebno.

ISTORIJAT – primer primene transkompajlera Mnogi programski jezici su razvijeni tako da koriste transkompajlera. PRIMER: rane verzije C++ kada nije postojao osnovni (native) kompajler, već su se programi napisani primenom C++ programskog jezika primenom transcompilera trasformisali u kod napisan na C programskom jeziku, a zatim kompajlirati primenom C kompajlera u binarni oblik. [3] ALATI ZA PREVOĐENJE SA JEDNOG NA DRUGI PROGRAMSKI JEZIK Alati koji vrše transformaciju programa nazivaju se Program Transformation Systems (PTS). DEKOMPAJLERI – transformišu izvršni oblik programa (npr. dll, exe) u izvorni kod. Primer: dotPeek .NET decompiler ([5])

Source-to-source translator (ili: transpiler, TRANSCOMPILER) je programski prevodilac koji uzima kao ulaz izvorni kod napisan na jednom programskom jeziku i transformiše ga u izvorni kod napisan na istom programskom jeziku (npr. u novijoj verziji sintakse) ili drugom programskom jeziku. Najčešće se realizuje izmeĎu programskih jezika koji su istog tipa, tj. istog nivoa apstrakcije. [2] Transkompajleri ne vrše transformaciju ulaznog izvornog koda, već ga prevode u izvorni kod drugog programskog jezika.

[8] PRIMERI SAVREMENIH TRANSKOMPAJLERA:

Alat TRANSCODER, firma FACEBOOK

Page 3: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

Alat DMS, firma SEMANTIC DESIGNS TransCoder – Facebook [6] [7] Karakteristike sistema (objavljeno 2020. godine):

Baziran na primeni metoda veštačke inteligencije, tj. primeni veštačkih neuronskih mreža, mašinskog učenja, odnosno „deep learning“

Smatra se potpuno samostalnim alatom koji vrši automatski monitoring procesa, tj. „entirely self-supervised neural transcompiler system that can make code migration”

Prevodi programski kod sa jezika visokog nivoa, kao što je C++, Java, Python 3. Zahteva minimalno moguće angažovanje ljudskog nadgledanja ili intervencija u procesu Proces počinje obučavanjem (pre-training) gde se mapiraju instrukcije u kodu koje su iste u izvornom i ciljnom

programskom jeziku. Primeri: naredbe “if”, “while”, matematički operatori…zajednički su u mnogim jezicima. Jedan od koraka je povratna translacija, gde se generisani kod vraća u oblik primenom početnog programskog

jezika. To omogućava generisanje paralelnih podataka koji se uporeĎuju sa početnim oblikom izvornog koda (originalnim kodom koji se transformiše). Detektuju se razlike, čime se upotpunjuje trening (“reinforce the training”).

Testiranje rada TransCoder-a je izvršeno nad više od 28*105 projekata (tj. open-source repozitorijuma), odnosno 852 funkcije u C++, Java, and Python.

Rezultati testiranja ukazuju na visok stepen tačnosti izvršenih transformacija: „When converting from C++ to Java, TransCoder achieved 74.8% accuracy in expected results. From Python to C++, the accuracy was 57.8%, while Java to C++, the accuracy is 91.6%.”

[6]

Page 4: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

[6]

DMS Software Reengineering Toolkit – Semantic Designs [9] Alat DMS se smatra komercijalnim PTS.

[9]

Page 5: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

Karakteristike DMS alata

Kada se primenjuje u svrhu translacije izvornog koda napisanog primenom jednog programskog jezika u drugi, potrebno je eksplicitno navesti izvorni I ciljni programski jeyik, kao i pravila translacije.

DMS provides a large set of robust, integrated facilities for building software analysis and modification tools, proven on dozens of real languages: Full UNICODE-based parser and lexer generation with automatic error recovery.

Accepts/generates files encoded in UTF-8 and UTF-16, 7 bit ASCII (ISO-646-US), 8 bit ASCII (ISO-8859-1 thru -16), EBCDIC (CP-37, CP-500), a number of Microsoft code pages (CP-1250 thru -1258), and Japanese Shift-JIS (CP-932 and JIS-0208). Standard support is included for reading multiple source files to enable INCLUDE file management and construct suitable preprocessors. The parser technology is based on GLR, and can handle any context-free language, even with ambiguities (much stronger than YACC/LALR). (See details here.)

Automatic construction of abstract (not concrete) syntax trees (non-value-carrying terminals and unit productions are suppressed; syntax-lists are converted into AST list nodes). Literal values (numbers, escaped strings) are converted to native, normalized binary values for fast internal manipulation. Source comments are captured and attached to AST nodes. (See details here.)

Pretty-printer generation converts ASTs back to nicely formatted legal source file form, according to a specified layout information, including source comments. In fidelity-printing mode, comments, spacing and lexical formatting information of unchanged code is preserved. (See details here.) Customizing allows generation of source code HTML form, or even as obfuscated source text. Trees may be output directly in XML format.

Multi-pass attribute-evaluator generation from grammar, to allow arbitrary analysis (including name/type analysis procedures) to be specified in terms of the concrete grammar provided. Attributes may be local or long-distance. (See details here.)

Sophisticated symbol-table support facilities for global, local, inherited, overloaded and other language-dependent name lookup and namespace management rules. This handles even the complexity of C++14. (See details here.)

Control-flow graph construction including traditional entry/exit/action/condition nodes, but also fork/join nodes to model parallelism and/or indeterminate order (e.g., C sequence points). There predefined analyzers for constructing (post) dominators, and inducing structured control-flow regions. Additional machinery can compute compilation-unit local and system/global call graphs.

Data flow analysis framework, to allow data-flow analysis problems to be posed and answered, including predefined analyzers for constructing use-def and def-use chains. (See sample control and data flow graphs)

Points-to analysis for computing local or global points-to data, tested on systems of 13+ million lines of code.

Symbolic Range Analysis computing range constraints on program variables in terms of other variables. This is useful to detecting array-access errors, determining which switch case is selected, ... in conjunction with other analyses.

Binary- (and Finite) Decision Diagrams are used to construct and combine symbolic boolean formulas (or formulas over exclusive sets of choices) efficiently. It is straightforward to convert an AST representing a boolean formula to a BDD, and vice-versa.

Multiple domains (notations/languages) can be represented at the same time. This enables processing or generating systems composed of parts from more than one domain (COBOL and JCL, C and Makefiles, etc.), and/or translation from one domain language to another.

Transforms and patterns can be written directly in surface-to-surface domain syntax form. Patterns can be matched against syntax trees and return bindings for parameter subtrees. Alternatively, procedural code can implement transforms, or refer to existing transforms and patterns to enable construction of very sophisticated transforms. (See details here.)

A full Associative/Commutative rewrite engine that operates on trees and DAGs, which can be used to apply sets of transforms.

A metaprogramming language, XCL, provides the ability to control the sequencing of the application of transforms and sets of transforms. (Future Release)

An algebraic specification subsystem can be used to specify arbitrary algebras (this is just a DMS domain!). The axioms can be treated as a set of rewrite rules. (This allows one to code arbitrary simplification procedures. (We have done simplification on boolean equations that are essentially 1 million terms in size; we have also modeled optimization of transistor [not gates!] circuits this way).

Page 6: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

ELEMENTI, TEHNIKE I SISTEMI IZVORNI KOD (Source code) – predstavlja skup naredbi napisanih na višem programskom jeziku od strane programera, uz primenu editora programskog koda ili razvojnih okruženja, a snimljen u okviru jednog ili više fajlova. [23] OBJEKTNI KOD (Object code, izvršni kod) – predstavlja rezultat rada kompajlera i sastoji se iz instrukcija koje su razumljive konkretnoj mašini, tj. procesoru, jer su napisane mašinskim, tj. binarnim kodom. [23] BAJT KOD (BYTE CODE, portable code, p-code) – predstavlja programski kod koji je nastao transformacijom iz izvornog koda u kod niskog nivoa, pogodan za korišćenje od strane interpretera, odnosno prvenstveno virtualne mašine. Može biti korišćen od strane virtualne mašine (npr. Java Virtual Machine JVM) ili dalje kompajliran do mašinskog koda. Popularni primer bajtkoda je Java bajtkod, nastao kompajliranjem, a spreman da se izvršava na JVM. Bajtkod je napisan meĎujezikom (Intermediate language). [24] PORTABILNOST KODA – mogućnost prenošenja koda na različite mašine i uspešno izvršavanje u različitim radnim okruženjima (sa različitim procesorima, operativnim sistemima i slično) JUST-IN-TIME (JIT) KOMPAJLIRANJE – dinamička transformacija naredbi bajtkoda u mašinski kod u toku izvršavanja programa (u toku runtime). Koristi tehnike interpretera i kompajlera, uz dinamičko linkovanje sa drugim modulima, adaptivnu optimizaciju procesa prevoĎenja, kao i optimizaciju performansi samog izvršnog oblika progama. [25] APSTRAKTNA MAŠINA – predstavlja model računarskog sistema (hardver ili softver), konstruisan tako da obezbedi mogućnost analize kako računarski sistem funkcioniše. Takvi modeli uključuju ulaz, izlaz i skup operacija koje se mogu izvršiti (taj skup mogućih operacija možemo izjednačiti sa pojmom procesor). Tjuringova mašina je jedan primer apstraktne mašine [26]

LOKALNI (Native) kompajler – kompajler koji generiše objektni kod (izvršni kod) za istu platformu na kojoj se izvršava. [28] CROSS kompajler – Kompajler koji generiše izvšni kod za platformu koja je različita od one na kojoj se kompajler izvršava. PRIMER: a compiler that running on Linux/x86 box is building a program which will run on a separate Arduino/ARM. EMULACIJA – proces imitiranja karakteristika i ponašanja konkretnog hardvera ili softvera, kroz korišćenje emulatora na drugoj mašini. Emulator je hardver ili softver (alat) koji omogućava da se na lokalnoj mašini (Host) sistem ponaša kao da ima osobine konkretnog sistema (koji iz odreĎenih razloga nije direktno na raspolaganju - Guest). Primer: emulacija izvršavanja aplikacije na android operativnim sistemom, dok se aplikacija realizuje i probno koristi lokalno.

JDK - Java Development Kit, JRE - Java Runtime Environment JVM - Java Virtual Machine.

JAVA VIRTUALNA MAŠINA (JVM) – program čija je namena da izvršava druge programe, napisane primenom java programskog jezika. Cilj JVM je da omogući da se java programi mogu izvršavati na bilokojem ureĎaju ili operativnom sistemu. [30]

[30]

Page 7: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

[30]

[30]

Page 8: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

TEHNIKA BUTSTREPOVANJA (bootstrapping)

[28] PRIMER:

[28]

Page 9: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

INTEROPERABILNOST APLIKACIJA Interoperabilnost se odnosi na sposobnost da dva ili više sistema, ili komponenti razmene informacije izmeĎu sebe i da nakon toga te iste informacije mogu da koriste. (IEEE, 1990) KARAKTERISTIKE INTEROPERABILNOSTI [10] Interoperabilnost ima sledeće karakteristike: Uključenost dva ili više entiteta (sistema, mreža, ureĎaja, aplikacija ili komponenti). Sposobnost za interakciju (npr. zajednički rad, meĎusobna komunikacija, razmena podataka, informacija i znanja, pružanje i prihvatanje servisa-usluga). Sakrivanje implementacionih detalja - Korisnici treba da imaju malo ili nimalo znanja o jedinstvenim karakteristikama entiteta koji rade zajedno. Smisao je u postizanju nekog cilja (efikasan zajednički rad, funkcionalno povezivanje različitih aplikacija, razmena i korišćenje informacija i usluga). Kompatibilnost i standardi - Kako bi se minimizovale transformacije koje se zahtevaju kod razmene podataka, interoperabilnost zahteva kompatibilnost izmeĎu sistema koji razmenjuju podatke (baziranu na standardima). Na taj način se obezbeĎuju preduslovi za interpretaciju prenetih podataka. [10, 11]. NIVOI I SLOJEVI INTEROPERABILNOSTI Interoperabilnost postoji na 3 nivoa: Interoperabilnost poslovnih sistema, Interoperabilnost aplikacija, i Interoperabilnost podataka [10, 12]. Slojevi interoperabilnosti su: 1. Tehnički sloj. Tehnička interoperabilnost brine o tehnologiji, standardima, bezbednosti i pouzdanosti, strategijama koje se koriste za povezivanje računarskih sistema. Ulogu obuhvatanja tehničkih aspekata povezivanja informacionih sistema ima tehnička interoperabilnost, kao što su specifikacije interfejsa, usluge povezivanja, itd. Od infrastrukture i standardizovanih protokola koji su unapred definisani zavisi komunikaciona interoperabilnost, i može biti ostvarena primenom OSI (Open System Interconnection) modela. Razmenu sadržaja izmeĎu različitih sistema ili softverskih komponenti nezavisno od jezika u kome su implementirane obezbeĎuje sintaksna interoperabilnost [8]. 2. Semantički sloj. Semantička interoperabilnost se fokusira na sadržaj i poslovni kontekst transferisanih informacija. Sposobnost različitih sistema u procesu koje razmenjuju informacije i tumačenje njihovih značenja je semantička interoperabilnost. 3. Organizacioni sloj - Organizaciona interoperabilnost brine o operacionalnoj i organizacionalnoj strukturi učestvujućih sistema [10, 13]. Poslovna usklaĎenost izmeĎu sistema je organizaciona interoperabilnost. Efikasno povezivanje procesa u sistemu omogućava organizaciona interoperabilnost. 4. Procesni sloj – zasniva se na primeni tehnika uspostavljanja veza izmeĎu informacionih sistema primenom veb servisa. NEKI OD NAČINA RAZMENE PODATAKA IZMEĐU APLIKACIJA NAPISANIH RAZLIČITIM PROGRAMSKIM JEZICIMA [14]

Deljeni fajlovi na disku (XML, JSON, MS Excel, txt...). Deljeni podaci se nalaze u zajedničkoj bazi podataka, kojoj sve aplikacije pristupaju Kreiranjem i primenom servisa – servis kao maper (integriše module), servis kao usluga (ono što je potrebno

od podataka drugim aplikacijama - dostavlja servis, kojem se pristupa putem URL...), Primena mikroservisa kao implementacija manjeg dela funkcionalnosti koji se integrišu u zajedničku celinu

Page 10: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

[15]

Primer poziva veb servisa ASPX, napisanog C# programskim jezikom, u okviru aplikacije napisane PHP programskim jezikom Smisao veb servisa je mogućnost udaljenog korišćenja njegovih usluga, a realizovani su na standardni način tako da im se može pristupiti čak i iz aplikacija koje nisu napisane istim programskim jezikom.

Izvršavanje softverskih servisa (a posebno veb servisa) rezultuje specijalnim zapisima (sa standardom propisanom strukturom) koji služe za razmenu podataka, npr. XML, JSON. Na mestu poziva servisa dobija se sadržaj – podaci kao rezultat realizovane usluge od strane servisa u formi specifičnih zapisa. Primer:

Veb servis – izvorni kod

Pokrenut veb servis u localhost random okruženju

Page 11: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

Rezultat izvršavanja veb servisa

Page 12: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

LINGVISTIKA I DOMENSKO ZNANJE – ONTOLOGIJE I ONTOLOŠKI JEZICI Domen predstavlja specifičnu predmetnu oblast znanja. Često se u savremenim istraživanjima i tehničkim realizacijama, javlja potreba za predstavljanjem znanja o domenskoj oblasti nad kojom se vrši procesiranje. „Ontologije se definišu na različite načine u zavisnosti od naučne oblasti u kojoj se koriste. [16] U računarskom inženjerstvu ontologija se odnosi na predstavljanje znanja. U oblasti informacionih sistema postoji problem postojanja različitih klasa podataka koje imaju svoje termine kojima se predstavljaju informacije. Кada se takve informacije nalaze na jednom mestu zajedno, terminološke i konceptualne različitosti se mogu prevazići upotrebom odgovarajućih ontologija. [16] Ontologija se definiše kao skup termina koji se koriste da bi se opisao domen, tj. oblast znanja. Ontologije koriste ljudi, baze podataka i softverske aplikacije koje dele informacije iz odreĎenog domena.. Najpopularniju definiciju ontologije je dao Gruber [Gruber, 1995] kao „formalnu, eksplicitnu specifikaciju deljene konceptualizacije. Pojam formalna se odnosi na činjenicu da ontologija treba da je razumljiva, tj. čitljiva za mašine. Eksplicitna znači da su eksplicitno definisani svi koncepti i ograničenja koja se koriste. Deljena ukazuje na to da ontologija treba da predstavi znanje prihvaćeno od strane zajednice u kojoj se uvodi i koristi. Кonceptualizacija se odnosi na apstraktan model fenomena iz stvarnog sveta koji se dobija identifikovanjem relevantnih koncepata ovih fenomena [El-Ghalayini et al., 2005].“ [16] Ontološki zapisi se koriste za [17]:

predstavljanje znanja u nekom domenu, razmenu podataka (tj. domenskog znanja) izmeĎu aplikacija. Definisani su standardi za oblik ontoloških zapisa

(gramatike ontoloških jezika), kako bi bili prepoznatljivi i kako bi se mogla realizovati usaglašenost raznorodnih aplikacija.

Najčešće korišćeni ontološki jezici [17]:

OWL – web ontology language, RDF - Resource Description Framework.

KRATAK ISTORIJAT NASTANKA I PRIMENE ONTOLOGIJA

[19]

Page 13: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

PRIMER ONTOLOŠKOG ZAPISA PREDSTAVLJENOG GRAFOM

[18] PRIMER RDF ZAPISA

[18]

Page 14: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

Skraćeni oblik RDF zapisa:

Primer OWL zapisa:

Page 15: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

LINKERI I MEĐUZAVISNOST MODULA, GENERISANJE IZVRŠNE VERZIJE PROGRAMA Izvršivi modul (assembly) – predstavljaju fundamentalnu jedinicu postavljanja aplikacije u radno okruženje (deployment), ali se koristi i prilikom praćenja verzija softvera, ponovnog korišćenja i slično. Predstavlja kolekciju klasa i drugih resursa koji se izgraĎuju da bi radili zajedno i čine logičku jedinicu funkcionalnosti. [21] Posebna vrsta izvršivih modula predstavljaju deljene biblioteke (shared objects), koji se mogu koristiti od strane više programa. Korišćenje deljenih biblioteka se realizuje njihovim dinamičkim povezivanjem sa osnovnom aplikacijom u toku izvršavanja progama. Deljene biblioteke su izdvojene korisne funkcije koje se mogu koristiti u okviru većeg broja aplikacija [22] PRIMER: U .NET okruženju, izvršivi modul može biti u obliku EXE ili DLL fajla i oni čine osnovu .NET aplikacija. U .NET mogu se kreirati izvršivi moduli na osnovu jednog ili više fajlova izvornog koda, organizovanih u posebne celine, module (projekte) izvornog koda. Kreirani izvršivi moduli mogu se u .NET koristiti u okviru više programa, pa je moguće te izvršive module postaviti u Global Assembly Cache. Izvršivi moduli se učitavaju u memoriju samo ako su potrebni. Da bi se mogao koristiti, izvršivi modul je potrebno referencirati (povezati od strane čoveka, za primenu u aplikaciji). Izvršivi moduli mogu biti:

Statički – nalaze se na disku i odatle se pokreću Dinamički – izvršavaju se direktno iz memorije i nisu snimljeni na disk pre izvršavanja.

Linkeri su softverski alati koji mogu biti nezavisni ili uključeni u rad razvojnog okruženja, a imaju za cilj da povežu sve relevantne izvršive module programa u jedinstvenu celovitu izvršivu verziju programa. [20] Postoji više metoda rada linkera: 1. Kreiranje jedinstvenog izvršivog fajla spajanjem sadržaja svih modula 2. Kreiranje posebnog fajla u kom se nalazi spisak svih modula potrebnih za integrisani rada celovitog programa 3. Kreiranje posebnog fajla uz svaki izvršivi modul tako da se u njemu nalazi evidencija svih zavisnosti koje taj izvršivi

modul ima prema drugim izvršivim modulima (u .NET to je manifest fajl). Manifest fajl sadrži identitet izvršivog modula (naziv, verzija), tabelu sa evidencijom drugih fajlova koji čine celinu izvršive verzije, listu referenci, tj. listu zavisnosti (od kojih fajlova zavisi osnovni fajl (čiji je prateći fajl manifest).

PRIMER:

The .NET Framework SDK comes with a useful tool called the Assembly Linker (al.exe). This tool can take any number of modules and files, and link them together into a single assembly. Unlike the traditional “object file linkers” with which many developers are familiar from their C and C++ experiences, the Assembly Linker does not actually create a single new file with each module or resource embedded inside it. Instead, it creates a new .NET module that contains an assembly manifest referencing all of the modules for the assembly.

[20] Linker izvršivih modula (Assembly Linker) u .NET ima ulogu da generiše manifest fajl za svaki izvršivi modul, čime se prikazuje zavisnost izvršivog modula u odnosu na jedan ili više fajlova, modula ili resursnih fajlova . Navedeni alat je automatski intaliran u okviru Visual Studio . NET.

Page 16: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

LITERATURA [1] Dr Miroslav Hajdukoviћ, mr Zorica Suvajdžin: „Programski prevodioci – Praktični uvod u programske prevodioce s ciljem predstavljanja tipičnih problema i načina njihovog rešavanja“ FTN, Novi Sad, 2004. [2] Lluis Alonso Jane: Design and implementation of a C to Rust transcompiler, Facultat de Matematiques i Informatica, Universitat de Barcelona, 2018, http://diposit.ub.edu/dspace/bitstream/2445/122786/3/memoria.pdf [3] htps://www.computerhope.com/jargon/t/transcompiler.htm#:~:text=A%20transcompiler%2C%20also%20called%20a,version%20of%20the%20same%20language. [4] https://www.quora.com/How-do-you-write-a-program-to-transform-from-one-programming-language-to-another [5] https://www.jetbrains.com/decompiler/ [6] https://ai.facebook.com/blog/deep-learning-to-translate-between-programming-languages/ [7] https://content.techgig.com/facebook-develops-ai-tool-to-convert-code-from-one-programming-language-to-another/articleshow/76303019.cms [8] https://en.wikipedia.org/wiki/Source-to-source_compiler [9] http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html [10] Siniša Mihajlović: Interoperabilnost distribuiranih poslovnih veb aplikacija, master rad, mentor Ljubica Kazi, Tehnički fakultet „Mihajlo Pupin“, Zrenjanin, 2018. [11] J. Z. Milojković, Interoperabilnost u elektronskom poslovanju statističkih sistema, FON, Beograd 2012. [12] S. Nešković, N. Aničić, S. Babarogić, Materijal u elektronskoj formi za predmet Modelovanje poslovnih procesa, Fakultet organizacionih nauka, Beograd, januar 2009. [13] D. Pilipović, Interoperabilnost pri modelovanju preduzeća – seminarski rad, Fakultet organizacionih nauka, Beograd, 2008. [14] https://www.quora.com/How-do-you-write-a-program-to-transform-from-one-programming-language-to-another [15] Lj.Kazi: Razvoj adaptibilnog distribuiranog informacionog sistema za podršku upravljanju realizacijom softverskih projekata, Doktorska disertacija, Tehnički fakultet „Mihajlo Pupin“ Zrenjanin, 2016. [16] Кази З: „Онтолошки заснована анализа семантичке коректности модела података применом система аутоматског резоновања“, Докторска дисертација, Универзитет у Новом Саду, Технички факултет „Михајло Пупин“, Зрењанин, 2014. [17] https://www.sciencedirect.com/topics/computer-science/ontology-language#:~:text=One%20of%20the%20most%20prominent,instances%20in%20the%20real%20world. [18] https://www.stardog.com/tutorials/data-model/ [19] https://www.uio.no/studier/emner/matnat/ifi/INF5120/v07/undervisningsmateriale/F12-RDF-OWL-ST-3.pdf [20] https://www.oreilly.com/library/view/programming-in-the/0201770180/0201770180_ch05lev1sec5.html#:~:text=This%20tool%20can%20take%20any,language%20or%20non%2DC%23%20environments. [21] https://docs.microsoft.com/en-us/dotnet/standard/assembly/ [22] Linker and Libraries Guide, Sun Microsystems, 2004. [23] https://www.washington.edu/research/glossary/source-code-and-object-code/ [24] https://techterms.com/definition/bytecode# [25] https://www.theserverside.com/definition/just-in-time-compiler-JIT [26] https://mathworld.wolfram.com/AbstractMachine.html [27] https://www.javatpoint.com/emulation-vs-virtualization# [28] https://www.geeksforgeeks.org/difference-between-native-compiler-and-cross-compiler/

[29] Živko Tošić, Milena Stanković, Suzana Stojković: PROGRAMSKI PREVODIOCI, Elektronski fakultet Niš, 2017. [30] https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html

Page 17: PREVOĐENJE PROGRAMSKOG KODA SA JEDNOG …

ORJENTACIONA PITANJA ZA ZAVRŠNI ISPITNI TEST

1. Opšti zadatak programskih prevodilaca i potrebne aktivnosti. 2. Ciljevi transformacije izvornog koda iz jednog programskog jezika u drugi. 3. Problemi prevoĎenja izvornog koda iz jednog programskog jezika u drugi. 4. Zadaci prevoĎenja izvornog koda iz jednog programskog jezika u drugi. 5. Metode prevoĎenja izvornog koda iz jednog programskog jezika u drugi. 6. Navesti istorijski primer primene transkompajlera u okviru dizajna programskih jezika i prevodilaca. 7. Definicija dekompajlera. 8. Definicija transkompajlera. 9. Primeri savremenih transkompajlera. 10. Definicija izvornog koda. 11. Definicija objektnog koda. 12. Definicija bajt koda. 13. Definicija portabilnosti koda. 14. Objasniti “Just in time” kompajliranje. 15. Objasniti apstraktnu mašinu. 16. Definicija native kompajlera. 17. Definicija cross kompajlera. 18. Razlika izmeĎu native i cross kompajlera. 19. Definicija emulacije. 20. Definicija emulatora. 21. Objasniti skraćenice JDK, JRE, JVM. 22. Definicija Java Virtualne mašine. 23. Objasniti principe i proces funkcionisanja Java Virtualne mašine. 24. Objasniti tehniku butstrepovanja. 25. Objasniti T dijagram u okviru tehnike butstrepovanja. 26. Navesti primer primene tehnike butstrepovanja. 27. Definicija interoperabilnosti. 28. Karakteristike interoperabilnosti. 29. Nivoi interoperabilnosti. 30. Slojevi interoperabilnosti. 31. Objasniti načine razmene podataka izmeĎu aplikacija napisanih različitim programskim jezicima. 32. Objasniti kako se razmenjuju podaci primenom softverskih servisa. 33. Objasniti pojam domena. 34. Definicija i namena ontologije. 35. Navesti najčešće korišćene ontološke jezike. 36. Definicija izvršivog modula. 37. Definicija i uloga deljenih biblioteka. 38. Objasniti kako se koriste deljene biblioteke u procesu linkovanja. 39. Vrste izvršivih modula. 40. Definicija linkera. 41. Objasniti metode rada linkera. 42. Uloga manifest fajla u .NET. 43. Uloga Assembly linkera u .NET.