Upload
others
View
14
Download
1
Embed Size (px)
Citation preview
OTVORENO RA^UNARSTVOPROGRAMSKI JEZICI I OTVORENOST
MARIO @AGAR
Otvoreno računarstvoProgramski jezici i otvorenost
Mario Žagar
Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje
Otvoreno računarstvo - Programski jezici i otvorenost4
Motivacija
o Terminira niz znakova null-znakomo očigledno????o mogućnost grješke???o redoslijed operatora???
o Što radi kôd u četvrtom retku (C)?
char dest[10]={'a','b,'c','d','\0'};char src[10]={'e','f,'g','\0'};memcpy(dest, src, strlen(src));*((char *)(dest+strlen(src)))=0;
Otvoreno računarstvo - Programski jezici i otvorenost5
Motivacija
o Što se dogodi u slučaju grješke (VBA)?
Private Sub NekiButton_Click()DoCmd.SetWarnings FalseOn Error GoTo NekiButtonClick_Err
Dim cmd As ADODB.Commandcmd.Execute...
NekiButtonClick_Exit:Exit Sub
NekiButtonClick_Err:Resume NekiButtonClick_Exit
End Sub
Otvoreno računarstvo - Programski jezici i otvorenost6
Motivacija
void f(void){ void* s; s = malloc(50); return;}
int main(void){ while (1) f(); return 0;}
o Što će se dogoditi s memorijom?
Otvoreno računarstvo - Programski jezici i otvorenost7
Dosadašnji primjeri – jesu li ...?o Neka od svojstava idealnog programskog jezika su:
o jednostavnosto jasnoćao apstraktnosto izražajnosto fleksibilnosto učinkovitost
Jesu li to svojstva dosadašnjih primjera????
Otvoreno računarstvo - Programski jezici i otvorenost8
Kratka povijest pokušaja rješenjao 1970-ih:
o Lisp dobiva garbage collectiono Virtualni stroj za Pascalov p-codeo B (Ken Thompson, Bell Labs), kasnije i
C (Dennis Ritchie, Bell Labs) (tzv. K&R)o 1971. UNIX u asembleru za PDP-11o 1973. UNIX u C-u
o nroff, troff - lijepi ispis teksta temeljen na oznakama
o 1979. g. C with classes (Bjarne Stroustrup, Bell Labs)o 1983.-1985. g. C++ (Bjarne Stroustrup, Bell Labs) o 1980-ih (sredinom) postoje:
o razredi, iznimke, nasljeđivanje, prikupljanje "smeća" (garbage collection), virtualni stroj i C/C++ sintaksa
Otvoreno računarstvo - Programski jezici i otvorenost9
Kratka povijest...o 1991. g. SUN, James Gosling
o Oak, kasnije Java, o prva javna inačica u svibnju 1995.
o 1996. g. Microsoft – akvizicijom do OmniVM (VM)o nastaje J++, o kasnije .NET i C#
o Koncepti postoje dugo vremena, tehnologije evoluiraju primjenom istih!
Otvoreno računarstvo - Programski jezici i otvorenost10
Strojni jezici i asemblerio U samim počecima programiranja
o programiranje u strojnom jezikuo svaka naredba = strojni kodo npr. 00000101
o Sljedeći korako asembler
o mnemonička reprezentacija strojnog kodao npr. 00000101 = DEC B (Zilog Z80)
Otvoreno računarstvo - Programski jezici i otvorenost11
Makro naredbeo Makro naredbe:
o nameću normu pisanja i korištenja procedurao sprječavaju ponavljanje kôda
o npr. "jump if greater than" makro (8051 assembler):%*DEFINE (JGT(VALUE, LABEL)) (CJNE A,#$VALUE+1, $+3 ;JGT JNC $LABEL)
o poziv – sadrži li akumulator ASCII kôd veći od "Z"?%JGT('Z', GREATER_THAN)
o prevodi se u:CJNE A,#5BH, $+3 ;JGTJNC GREATER_THAN
Otvoreno računarstvo - Programski jezici i otvorenost12
Viši programski jezicio Kodiranje u asembleru
o neefikasno, sporo, sklono grješkamao Rješenje
o viši programski jezicio Poplava programskih jezika 1960-ih
o preživjeli samo najpopularniji:o Algolo BASICo Cobolo FORTRANo Lispo itd.
Otvoreno računarstvo - Programski jezici i otvorenost13
Viši programski jezicio Moćnija računala
o potreba za moćnijim i izražajnijim programskim jezicimao Rješenje
o nadogradnja postojećih novim mogućnostima
o Zadržati kompatibilnost o npr. FORTRAN 2003 kompatibilan s prvim FORTRAN-om
iz 1956.!!!).o Rezultat
o dodatna kompleksnost jezikao Rješenje
o početi ispočetka!
Otvoreno računarstvo - Programski jezici i otvorenost14
Viši programski jezicio BCPL (1960) -> B (1970.)-> C (1972.)o C+1 = C++ (1985.)
o objektno orijentiran, fleksibilan, moćan, temelji se na sintaksi jezika C
o C/C++ namijenjen pisanju sistemske programske podrške (a NE aplikativne!):o efikasan o izravan pristup memorijio prilagođen ograničenim resursimao jednostavan prevoditeljo jezični konstrukti efikasno se preslikavaju u asemblero kombiniranje kôda u jeziku C i kôda u asembleru
Otvoreno računarstvo - Programski jezici i otvorenost15
Oako Sun, 1992., Star7
o prototip naprave za upravljanje kućnim uređajima
o 15,24 cm (6") LCD touchscreen, bežični radio 200 kbps, grafičko sučelje u 4 MB FLASH memorije
o SunOS + interpreter za novi jeziko Oak
o razredi (klase) stižu bežičnoo putem radio veze
Otvoreno računarstvo - Programski jezici i otvorenost16
Javao Star7 – namijenjen digitalnoj kabelskoj televiziji
o tržište nespremno za potpuno interaktivnu televiziju
o Novi smjer – WWW – mora biti o pouzdan, siguran, neovisan o arhitekturio osobine novog programskog jezika
o Preorijentacija projekta na World Wide Webo preglednik WebRunner (kasnije HotJava)
o preuzimanje s Weba razreda za izvršavanjeo Applet u jeziku Java
o prvi dinamički sadržaj unutar preglednika Weba
Otvoreno računarstvo - Programski jezici i otvorenost17
Javao Novi programski jezik bolje prilagođen WWW-u
o preglednik Weba uz prikazivanje statičnih slika i teksta, po prvi put može izvršavati aplikacije (pisane u jeziku Java)
o 1995. Netscape – podrška za jezik Java u preglednikuo 1996. Sun izdaje Java Development Kit (JDK)
o Jezik Java se razvija i rasteo ideja prenosivosti i skalabilnosti
o PicoJavao Java MEo Java SEo Java EEo realtime Java
Applet - Nyquistov teorem
Otvoreno računarstvo - Programski jezici i otvorenost18
Microsoft (u isto vrijeme)o ...sredinom 1990-ih:
o MS Windows 95 + MS Officeo najpopularniji OS i uredski paket na PC-ima
o Microsoft "ignorira" Internet o spajanje na Internet otkriva probleme sigurnosti unutar OS-a
o Windows API neprimjenjiv na malim uređajimao uređaji s Windows CE OS su spori i nekompatibilni s Windows
OS na PC-u
Otvoreno računarstvo - Programski jezici i otvorenost19
U međuvremenuo ...sredinom 1990-ih:
o pokreti za otvoreni kôd (open source) i slobodna programska podrška (free software) o potiču kooperativni razvoj programske podrškeo "prijetnja" komercijalnim aplikacijama
o razvojni alati za jezik Java (JDK) za Windows OSo omogućeno pisanje aplikacija u "elegantnom" jeziku s
ugrađenom podrškom za sigurnost, višenitnost i komunikaciju internetskim protokolima (TCP/IP, UDP, HTTP...)
Otvoreno računarstvo - Programski jezici i otvorenost20
Reakcija Microsoftao Reakcija na uspjeh jezika Java:
o Microsoft kupuje Colusa Software Inc (OmniVM)o nastaje J++
o 2002. g. izlazi nova arhitektura .NET i Visual Studio .NETo svi programski jezici izvode se na istom virtualnom strojuo novi programski jezik (C#)
o preuzeti najbolji koncepti jezika Javao C# – autor Anders Hejlsberg (Turbo Pascal, Borland
Delphi)
Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje
Otvoreno računarstvo - Programski jezici i otvorenost22
Definicijeo Prenosivost
o mogućnost izvršavanja istog programa na različitim platformama - operacijskim sustavima
o Skalabilnosto mogućnost pisanja aplikacija za različita računala (od
ugrađenih računala do poslužitelja) uporabom istovjetnog programskog sučelja
o mogućnost izvođenja iste aplikacije na različitim računalima (od ugrađenih do poslužitelja)
Otvoreno računarstvo - Programski jezici i otvorenost23
Prenosivosto Doba asemblera
o programski jezik je osobina procesora na kojem se izvodi (interna arhitektura, skup naredaba, ...)
o Normirani jezik Co prevodi se (compile) na različitim platformamao biblioteke funkcija (pristup mreži, korištenje nîti) često
nisu normiraneo Jezik Java
o donio platformsku neovisnost prevedenog kôda i pripadnih biblioteka (potpuna i zaokružena cjelina)
o Kako?o jezik Java ne prevodi se u strojni kôd ciljne platforme
Otvoreno računarstvo - Programski jezici i otvorenost24
PrenosivostStari pristup:
Novi pristup:
Program u višem
programskom jeziku
Strojni kodPrevoditelj
Prijelazni zapis
programa
Program u višem
programskom jeziku
Strojni kodPrevoditelj Virtualni stroj
Prevođenje Izvođenje
Otvoreno računarstvo - Programski jezici i otvorenost25
Stari pristup - primjer
C++ kod
Windows C++ prevoditelj
Unix C++ prevoditelj
Macintosh C++
prevoditelj
Strojni kod PC računala
Strojni kod Unix računala
Strojni kod Macintosh računala
PC računalo s Windowsima
Unix računalo
Macintosh računalo
Računalo prevodi izvorni
kod
Izvorni kod preveden u strojni kod
Računalo izvodi
strojni kod
Otvoreno računarstvo - Programski jezici i otvorenost26
Novi pristup - primjer
Java program
Java prevoditelj
Java bytecode
PC računalo s Windowsima
Unix računalo
Macintosh računalo
Virtualni stroj (JVM) na PC računala s
Windowsima
Virtualni stroj (JVM) na
UNIX računalu
Virtualni stroj (JVM) na
Macintosh računalu
Otvoreno računarstvo - Programski jezici i otvorenost27
Prevođenje i tumačenjeo Viši programski jezik se:
o prevodi u strojni kôd ilio tumači
o Tumačenje (interpretacija) je sporoo prevođenje programa u prijelazni (intermediate) zapis
o Prijelazni zapis se:o prevodi u strojni kôd ilio interpretira
o Prijelazni zapis omogućuje neovisnost o platformi
Otvoreno računarstvo - Programski jezici i otvorenost28
Prijelazni zapis programao Može se generirati:
o jednom (Java bytecode), o prije svakog izvođenja (Perl, Ruby) ili o prilikom svake promjene izvornog kôda prije izvođenja
(npr. skriptni jezici uz korištenje ubrzivača)
o Neovisan je o platformi na kojoj se izvodi
o Omogućuje jednostavnije dinamičko određivanjeo dosega (scoping) varijableo tipa (typing) varijable
Otvoreno računarstvo - Programski jezici i otvorenost29
Prijelazni zapis programao Prijelazni zapis je:
o uglavnom stogovno orijentirano objektano niže razine apstrakcije (od izvornog kôda)o prilagođen izvođenju unutar virtualnog stroja
o Javao Java bytecode
o Jezici .NET platformeo MSIL/CIL (Microsoft/Common Intermediate Language)
Otvoreno računarstvo - Programski jezici i otvorenost30
Java bytecode public class Zbroji{
public static void main(String[] args){
int a=42,b=24,c;c=a+b;
}}o Prevođenje Zbroji.java -> Zbroji.class
javac Zbroji.java
o Prevođenje u suprotnom smjeru (disassembler) Zbroji.class -> JVM bytecodejavap -c Zbroji
Otvoreno računarstvo - Programski jezici i otvorenost31
BytecodeCompiled from "Zbroji.java"public class hr.rasip.or.primjer.Zbroji extends java.lang.Object{...public static void main(java.lang.String[]); Code: 0: bipush 42 2: istore_1 3: bipush 24 5: istore_2 6: iload_1 7: iload_2 8: iadd 9: istore_3 10: return}
HEX:10 2A3C10 183D1B1C603EB1
Otvoreno računarstvo - Programski jezici i otvorenost32
MSIL/CILclass Zbroji{
static void Main(string[] args){
int a = 42, b = 24, c;c = a + b;}
}}o Prevođenje Zbroji.java -> Zbroji.class
csc Zbroji.cso Prevođenje u suprotnom smjeru
Zbroji.class -> MSILildasm Zbroji.exe
Otvoreno računarstvo - Programski jezici i otvorenost33
MSIL/CILo .method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // Code size 12 (0xc) .maxstack 2 .locals init ([0] int32 a,[1] int32 b, [2] int32 c) IL_0000: nop IL_0001: ldc.i4.s 42 IL_0003: stloc.0 IL_0004: ldc.i4.s 24 IL_0006: stloc.1 IL_0007: ldloc.0 IL_0008: ldloc.1 IL_0009: add IL_000a: stloc.2 IL_000b: ret} // end of method Zbroji::Main
Otvoreno računarstvo - Programski jezici i otvorenost34
Bytecode vs CILIL_0001: ldc.i4.s 42IL_0003: stloc.0IL_0004: ldc.i4.s 24IL_0006: stloc.1IL_0007: ldloc.0IL_0008: ldloc.1IL_0009: addIL_000a: stloc.2IL_000b: ret
0: bipush 422: istore_13: bipush 245: istore_26: iload_17: iload_28: iadd9: istore_310: return
Otvoreno računarstvo - Programski jezici i otvorenost35
Virtualni strojo Prijelazni zapis – kako do strojnog kôda?
o interpretacijomo dinamičkim prevođenjem (Just In Time -JIT)
o Programska podrška koja izvodi prijelazni zapis stvara privid izvođenja na stvarnom sklopovlju - program se izvršava unutar virtualnog stroja
Prijelazni zapis
programa
Program u višem
programskom jeziku
Strojni kodPrevoditelj Virtualni stroj
Prevođenje Izvođenje
Otvoreno računarstvo - Programski jezici i otvorenost36
Virtualni strojo Virtualni stroj upravlja:
o memorijom (objektima na hrpi - heapu)o garbage collection
o sinkronizacijom nîti (thread)o iznimkamao sigurnošću
Otvoreno računarstvo - Programski jezici i otvorenost37
CLR (Common Language Runtime)o Microsoftova referentna implementacija
virtualnog stroja platforme .NET o Uvijek prevodi prijelazni zapis (CIL) u strojni kôdo Implementacija specifikacije CLI (normirane po
ECMA-335 i ISO/IEC 23271)
Otvoreno računarstvo - Programski jezici i otvorenost38
CLR (Common Language Runtime)o CLI specifikacija određuje pravila koja programski
jezik mora zadovoljiti da bi ga implementacija sukladna specifikaciji CLI mogla prevesti i izvesti:o skup tipova i operacija (CTS – Common Type System)o metapodaci o strukturi programa, neovisni o jezikuo pravila za programski jezik
(CLS – Common Language Specification)o sustav izvođenja (VES – Virtual Execution System)
Otvoreno računarstvo - Programski jezici i otvorenost39
HotSpot VMo Sunova referentna implementacija virtualnog stroja
jezika Java (JVM)o Interpretira bytecode i po potrebi ga prevodi u
strojni kôdo Sunov virtualni stroj pronalazi dijelove programa
koji se često izvode (hot-spots), te ih prevodi u strojni kôd nakon određenog broja izvođenja
o Inačice JVMo klijentski (Client VM) – brzo pokretanje i minimalno
zauzeće memorijeo poslužiteljski (Server VM) – što brže izvođenje
Otvoreno računarstvo - Programski jezici i otvorenost40
public static void main(String[] args){ // Create an ITimer using the Factory class: final ITimer timer = TimerFactory.newTimer(); for (int repeat = 0; repeat < 25; ++repeat) { timer.start(); sum(100); timer.stop(); System.out.println(repeat+":\t"+ timer.getDuration()); timer.reset(); }}public static int sum(int n){ if (n <= 1) return 1; else return n + sum(n - 1);}
mjerenja trajanja izvođenja funkcije
rekurzivna funkcija
HotSpot VM
hotspot.jar
Otvoreno računarstvo - Programski jezici i otvorenost41
CLR (Common Language Runtime)
C# (.cs)
Jezik .NET platforme
VB.NET (.vb)MSIL/CIL
(.exe) Strojni kodCLR
C# prevoditelj
VB.NET prevoditelj
Prevoditelj
Prevođenje Izvođenje
Otvoreno računarstvo - Programski jezici i otvorenost42
HotSpot VM
Bytecode(.class)Java (.java) Strojni kod
Java prevoditelj
(javac) HotSpot VM
Prevođenje Izvođenje
Otvoreno računarstvo - Programski jezici i otvorenost43
Biblioteke osnovnih razredao Većina programskih jezika ima osnovnu biblioteku
(core library), koja obično uključuje:o osnovne strukture podatakao mehanizme ulaza i izlaza (zaslon, datoteka)o osnovne algoritme
o Moderni programski jezici žele postići prenosivosto ukloniti ovisnost o operacijskom sustavuo ukloniti ovisnost o postojećim bibliotekama funkcija
Otvoreno računarstvo - Programski jezici i otvorenost44
Biblioteke osnovnih razredao Dobro definiran i zaokružen skup osnovnih paketa,
biblioteka razreda, sučelja i tipova
o Temelj svake komponente, kontrole i aplikacije programske platforme
o Olakšavaju i ubrzavaju razvoj aplikacijao Standardne osnovne funkcionalnostio Gotove programske komponente
Otvoreno računarstvo - Programski jezici i otvorenost45
Biblioteke osnovnih razredao Usporediva funkcionalnost
o Java - Java Foundation Classes (JFC)o .NET - Base Class Library (BCL)
o Systemo System.IOo System.Neto System.Threadingo System.Collectionso System.Reflectiono System.Windows
o java.lango java.ioo java.net, javax.neto java.util.concurrento java.util.collectiono java.lang.reflecto javax.swing
Otvoreno računarstvo - Programski jezici i otvorenost46
Appletio Dinamički sadržaj na Webuo Aplikacija pisana u jeziku Java
o samostalni programo Applet pisan u jeziku Java
o namijenjen izvođenju unutar preglednika koji podržava JVM
o Applet:o dohvaća se protokolom HTTP preko mrežeo ograničen pristup resursima računalao ograničena mrežna komunikacijao nasljeđuje razred java.applet.Appleto životni vijek određen stranicom koja sadrži applet
AppletDemo.html
Otvoreno računarstvo - Programski jezici i otvorenost47
Javini appleti - Primjer(1/4)import java.applet.Applet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;
public class AppletDemo extends Applet{
int brojKvadratica, delay; public void init() { setForeground (Color.green);
brojKvadratica=Integer.parseInt(getParameter("BrojKvadratica"));
delay=Integer.parseInt(getParameter("Delay"));System.out.println("numK="+brojKvadratica+"
delay="+delay); } public void start() {} public void stop() {} public void destroy() {}
...
Otvoreno računarstvo - Programski jezici i otvorenost48
Javini appleti - Primjer(2/4)
... public void paint(Graphics g) { int a=10; int b=20; int h=30; int v=40; for (int i=1;i<brojKvadratica;i++){ g.drawRect(a+i,b+i,h+i,v+i); try{ Thread.sleep(delay); }catch(Exception e){} }
}}
Otvoreno računarstvo - Programski jezici i otvorenost49
Javini appleti - Primjer(3/4)AppletDemo.html<HTML> <BODY> <applet code="AppletDemo.class" width=1000 height=800> <PARAM NAME=BrojKvadratica VALUE="350"> <PARAM NAME=Delay VALUE="10"> </applet> <BODY></HTML>
Ime razreda
Parametri
Otvoreno računarstvo - Programski jezici i otvorenost50
Javini appleti - Primjer(4/4)
Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje
Otvoreno računarstvo - Programski jezici i otvorenost52
Svojstva idealnog programskog jezikao jednostavnosto uniformnosto ortogonalnosto jasnoćao sigurnosto modularnost
o apstrakcijao izražajnosto fleksibilnosto efikasnosto sličnost sintakse s
postojećim jezicima
o Idealan programski jezik dopušta programeru da se usredotoči na konkretan problem, a ne na "začkoljice" programskog jezika
Otvoreno računarstvo - Programski jezici i otvorenost53
Dinamičko upravljanje memorijomo Jezik C
o programer mora ručno zahtijevati, pratiti i oslobađati memorijski prostor
o upravljanje memorijom ugrađeno u prateću biblioteku funkcijao malloc() i free()
o Moderni jezicio automatsko upravljanje memorijom:
o objekti se alociraju na programskoj hrpi (heap)o novi objekt instancira se ključnom riječi (najčešće new)o dio virtualnog stroja - garbage collector
o uništava objekte koji se više ne koristeo ne postoje primitive za izravno upravljanje memorijom
Otvoreno računarstvo - Programski jezici i otvorenost54
Automatsko upravljanje memorijomo Ne mogu se dogoditi inače teško uočljive, česte
programerske pogrješke poput:o nedopuštenog pristupa memoriji (npr. pristup polju
izvan granica polja)o korištenja neinicijaliziranog pokazivača (tj. reference)o visećeg pokazivača/reference (dangling pointer)o curenja memorije (memory leak)o dvostrukog oslobađanja istog memorijskog prostora
o Takve pogrješke mogu dovesti do gubitka podataka ili nepredvidivog ponašanjao memoriji sustava ne pristupa se izravno ili uopće
Otvoreno računarstvo - Programski jezici i otvorenost55
Određivanje tipovao U jeziku C ili C++:
int a=5;float b=a;
Kruska *kruska;Jabuka *jabuka = (Jabuka *) kruska;
o Jezici sa slabom tipizacijom (weakly typed)o npr. C i C++o ne prijavljuju "grješke" poput promjene tipa varijable
o Jezici sa strogim određivanjem tipa (strongly typed)o npr. C#, Javao prijavljuju grješku prilikom prevođenja
Otvoreno računarstvo - Programski jezici i otvorenost56
Iznimkeo Cilj – omogućiti kontrolu nepredvidivih situacija:
o biti svjestan mogućnosti nastanka pogrješkeo pokušati oporavak od pogrješke o upozoriti korisnika opisnom porukom ako sve ostalo
propadne
o Iznimkeo objekti koji signaliziraju pogrješkuo razmjenjuju se među razredimao mehanizmi rukovanja iznimkama ugrađeni u sam jezik
Otvoreno računarstvo - Programski jezici i otvorenost57
File postavke = new File("postavke.cfg");try{ procitajPostavke(postavke);}catch (FileNotFoundException e){ //nema datoteke?}catch (EOFException e){ //procitan kraj datoteke}catch (ObjectStreamException e){ //datoteka je ostecena?}catch (IOException e){ // neka druga I/O grjeska} public void procitajPostavke(File datoteka)
throws IllegalArgumentException, FileNotFoundException, IOException { if (datoteka == null) { throw new IllegalArgumentException ("Nema datoteke s postavkama"); } ... InputStream in = new FileInputStream(filename); ...}
Iznimke
Otvoreno računarstvo - Programski jezici i otvorenost58
Nîti ili dretve - Threadso Nekad – POSIX nîti i semafori:int pthread_create(pthread_t *thread, const pthread_attr_t
*attr, void *(*start_routine)(void *), void *arg);int pthread_join( pthread_t cekana_dr, void **stanje);int semget(key_t key, int nsems, int flags);int semctl(int semid, int semnum, int cmd, union semun
arg);
o Danas – nîti i osnovni sinkronizacijski mehanizmi dio su programskog jezika:
public class HelloThread extends Thread { public void run() { System.out.println("Bok!"); } public static void main(String args[]) { (new HelloThread()).start(); }}
Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje
Otvoreno računarstvo - Programski jezici i otvorenost60
Otvorenost i programsko inženjerstvoo Normiranje – ANSI C ili C89, normiran po ANSI
X3.159-1989 :o svaki prevoditelj sukladan normi korektno će prevesti
programski kôd napisan po normi, na bilo kojoj platformio Biblioteka funkcija koja dolazi s izvornim kôdom bit
će lakša za primjenu od biblioteke koja se distribuira samo u binarnom obliku, zato jer:o programer shvaća što se događa "ispod"o dobro komentiran izvorni kôd najbolja je dokumentacijao manjkavosti biblioteke mogu se zaobići ili ispraviti
(ovisno o licenciji)
Otvoreno računarstvo - Programski jezici i otvorenost61
Jezik Java i normeo Platforma Java – de facto normao Pokušaj formalne normizacije Java platforme 1997.
(ISO) i 1999. (ECMA) o Sun povukao zahtjev oba puta
o Cilj normiranja – sačuvati kompatibilnost raznih implementacija (nakon prihvata norme, o tom se brine normizacijsko tijelo - ISO/ECMA)
o Sun u oba slučaja odlučio sâm kontrolirati daljnji razvoj platforme
Otvoreno računarstvo - Programski jezici i otvorenost62
Java i normeo Sun kontrolira Java platformu:
o zajedničkim donošenjem novih specifikacija kroz Java Community Process (JCP) – zainteresirane tvrtke, pojedinci i djelatnici Suna sudjeluju u definiranju i implementaciji novih dijelova Java platforme
o testiranjem (da bi neki proizvod bio sukladan, mora proći testiranje, svaki dio platforme definira svoj Technology Compatibility Kit - TCK).
o licenciranjem (Sun i dalje zadržava vlasništvo nad binarnim kôdom platforme)
Otvoreno računarstvo - Programski jezici i otvorenost63
Uvijek otvorena, sada i slobodnao Izvorni kod temeljnih Java biblioteka (BCL – Base
Class Library) oduvijek dio Java SDK-a (rt.jar), ali pod gledaj-i-ne-mijenjaj licencijom
o Specifikacije bytecodea i drugih dijelova JVM javno dostupne
o Krajem 2006., izvorni kod Java platforme objavljen pod GPLv2 licencijom, i too J2MEo J2SEo J2EE (dio)o javaco HotSpot
Otvoreno računarstvo - Programski jezici i otvorenost64
Platforma .NET i normeo Otvorene norme ECMA-335 i ISO/IEC 23271
definiraju CLI (Common Language Infrastructure):o skup tipova i operacija (CTS - Common Type System)o metapodatke o strukturi programa, neovisne o jezikuo pravila za programski jezik (CLS – Common Language
Specification)o sustav izvođenja (VES-Virtual Execution System) -
prevodi CIL u strojni kodo Norme omogućile izradu novih implementacija:
o Mono (GPL, Linux, Windowsi, Solaris, Mac OS X)o Portable.NET /DotGNU
Otvoreno računarstvo - Programski jezici i otvorenost65
Otvorenost i .NETo "Dijeljeni kôd" - shared source
o Microsoftova inicijativa nudi inačicu implementacije specifikacije CLI (Shared Source CLI) pod licencom koja omogućuje uvid u izvorni kôd
o polazna točka za ostale implementacije
Otvoreno računarstvo - Programski jezici i otvorenost
Pitanja?