Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i...

66
OTVORENO RA^UNARSTVO PROGRAMSKI JEZICI I OTVORENOST MARIO @AGAR

Transcript of Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i...

Page 1: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

OTVORENO RA^UNARSTVOPROGRAMSKI JEZICI I OTVORENOST

MARIO @AGAR

Page 2: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Otvoreno računarstvoProgramski jezici i otvorenost

Mario Žagar

Page 3: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje

Page 4: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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;

Page 5: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 6: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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?

Page 7: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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????

Page 8: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 9: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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!

Page 10: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 11: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 12: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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.

Page 13: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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!

Page 14: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 15: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 16: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 17: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 18: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 19: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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...)

Page 20: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 21: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje

Page 22: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 23: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 24: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 25: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 26: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 27: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 28: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 29: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 30: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 31: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 32: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 33: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 34: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 35: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 36: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 37: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 38: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 39: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 40: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 41: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 42: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Otvoreno računarstvo - Programski jezici i otvorenost42

HotSpot VM

Bytecode(.class)Java (.java) Strojni kod

Java prevoditelj

(javac) HotSpot VM

Prevođenje Izvođenje

Page 43: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 44: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 45: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 46: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 47: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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() {}

...

Page 48: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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){}  }

}}

Page 49: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 50: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Otvoreno računarstvo - Programski jezici i otvorenost50

Javini appleti - Primjer(4/4)

Page 51: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje

Page 52: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 53: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 54: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 55: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 56: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 57: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 58: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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();    }}

Page 59: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Programski jezici i otvorenosto Povijesto Prenosivost i skalabilnosto Smanjenje složenostio Normiranost i licenciranje

Page 60: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 61: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 62: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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)

Page 63: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 64: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 65: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

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

Page 66: Programski jezici i otvorenost - fer.hr · 17 Otvoreno računarstvo - Programski jezici i otvorenost Java o Novi programski jezik bolje prilagođen o preglednik Weba uz prikazivanje

Otvoreno računarstvo - Programski jezici i otvorenost

Pitanja?