ML (programski jezik) — разлика између измена

С Википедије, слободне енциклопедије
Садржај обрисан Садржај додат
Нема описа измене
Нема описа измене
Ред 1: Ред 1:
{{МАТФДПЈ2016}}
{{МАТФДПЈ2016}}
'''ML''' (eng. ''MetaLanguage'') je [[programski jezik]] koji je razvio [[Robin Milner]] 1970-ih godina na [[Univerzitet u Edinburgu|Univerzitetu u Edinburgu]].
'''-{ML}-''' (eng. ''MetaLanguage'') je [[programski jezik]] koji je razvio [[-{Robin Milner}-]] 1970-ih godina na [[Univerzitet u Edinburgu|Univerzitetu u Edinburgu]].
Njegova sintaksa je inspirisana [[ISWIM]]-om (ISWIM je apstraktni programski jezik smišljen od strane P.J.Landin; akronim predstavlja „If You See What I Mean“).
Njegova sintaksa je inspirisana [[-{ISWIM}-]]-om (-{ISWIM}- je apstraktni programski jezik smišljen od strane -{P.J.Landin}-; akronim predstavlja -{„If You See What I Mean“}-).
Pripada [[Функционално програмирање|funkcionalnoj]] i [[Императивно програмирање|imperativnoj]] programskoj [[programska paradigma|paradigmi]].
Pripada [[Функционално програмирање|funkcionalnoj]] i [[Императивно програмирање|imperativnoj]] programskoj [[programska paradigma|paradigmi]].




==Pregled jezika==
==Pregled jezika==
* strogo tipiziran programski jezik - u osnovi ML jezika je [[lambda račun]] kojem je dodata stroga tipizacija. Strogi sistem tipova pruža mogućnost za optimizaciju, tako da se uskoro pojavljuje kompilator jezika.
* strogo tipiziran programski jezik - u osnovi -{ML}- jezika je [[lambda račun]] kojem je dodata stroga tipizacija. Strogi sistem tipova pruža mogućnost za optimizaciju, tako da se uskoro pojavljuje kompilator jezika.
* [[poziv po vrednosti]] (eng. ''call-by-value'') - funkciji se prosleđuju vrednosti promenljivih, koje se koriste u telu funkcije (rezultat rada funkcije zavisi od tih vrednosti), ali one same ne mogu biti promenjene
* [[poziv po vrednosti]] (eng. ''-{call-by-value}-'') - funkciji se prosleđuju vrednosti promenljivih, koje se koriste u telu funkcije (rezultat rada funkcije zavisi od tih vrednosti), ali one same ne mogu biti promenjene
* funkcije višeg reda - uzima jednu ili više funkcija kao argumente (procesni parametri) i vraća funkciju kao rezultat. U lambda računu sve funkcije su višeg reda.
* funkcije višeg reda - uzima jednu ili više funkcija kao argumente (procesni parametri) i vraća funkciju kao rezultat. U lambda računu sve funkcije su višeg reda.
* automatsko upravljanje memorijom - osnovna forma automatskog upravljanja memorijom je [[sakupljač smeća]] (eng. ''garbage collection''). On funkcioniše tako što pokušava da pokupi smeće, ili memoriju okupiranu objektima koje program više ne koristi.
* automatsko upravljanje memorijom - osnovna forma automatskog upravljanja memorijom je [[sakupljač smeća]] (eng. ''-{garbage collection}-''). On funkcioniše tako što pokušava da pokupi smeće, ili memoriju okupiranu objektima koje program više ne koristi.
* parametarski polimorfizam - pomoću parametarskog polimorfizma funkcije ili tipovi podataka mogu biti napisani tako da se može prenositi vrednost. To su generičke funkcije, odnosno tipovi podataka.
* parametarski polimorfizam - pomoću parametarskog polimorfizma funkcije ili tipovi podataka mogu biti napisani tako da se može prenositi vrednost. To su generičke funkcije, odnosno tipovi podataka.
* statički doseg - to znači da ne mogu da se menjaju vrednosti promenljivih, već može samo da im se pristupi.
* statički doseg - to znači da ne mogu da se menjaju vrednosti promenljivih, već može samo da im se pristupi.
Ред 17: Ред 17:


==Funkcija jezika==
==Funkcija jezika==
ML je skraćenica od [[metajezik]]: bio je zamišljen za razvijanje metoda dokaza teorema.
-{ML}- je skraćenica od [[metajezik]]: bio je zamišljen za razvijanje metoda dokaza teorema.
Zbog dizajna i jedostavnog rukovanja podacima, koristi se prilikom programiranja prevodioca, analizatora, dokazivača teorema.
Zbog dizajna i jedostavnog rukovanja podacima, koristi se prilikom programiranja prevodioca, analizatora, dokazivača teorema.
Kao programski jezik opšte namene, svoju primenu nalazi i u [[Биоинформатика|bioinformatici]], finansijskim sistemima, itd.
Kao programski jezik opšte namene, svoju primenu nalazi i u [[Биоинформатика|bioinformatici]], finansijskim sistemima, itd.
Ima odličnu podršku za [[algebarski tipovi podataka|algebarske tipove podataka]] (ADTs), što ga, zajedno sa idejom o razvijanju metoda dokaza, čini veoma pogodnim za programiranje nekih matematičkih softvera.
Ima odličnu podršku za [[algebarski tipovi podataka|algebarske tipove podataka]] (-{ADTs}-), što ga, zajedno sa idejom o razvijanju metoda dokaza, čini veoma pogodnim za programiranje nekih matematičkih softvera.




==Veza sa drugim jezicima==
==Veza sa drugim jezicima==
Glavni jezici koji pripadaju ML-u su [[Standard ML]] (SML) i [[Caml]]. Osim njih, postoje i drugi - poput jezika [[F sharp|F#]], koji se koristi kao podrska [[.NET Framework|Microsoftovoj .NET platformi]].
Glavni jezici koji pripadaju -{ML}--u su [[-{Standard ML}-]] (-{SML}-) i [[-{Caml}-]]. Osim njih, postoje i drugi - poput jezika [[-{F sharp}-|F#]], koji se koristi kao podrska [[-{.NET Framework|Microsoftovoj .NET}- platformi]].
Kao što je pomenuto na početku, zbog osobina koje ga karakterišu, ML ne pripada isključivo jednoj programskoj paradigmi. Pripada prvenstveno funkcionalnoj paradigmi, međutim, bez obzira na to što ohrabruje funkcionalno programiranje – on nije isključivo funkcionalan (poput jezika kao što je [[Haskel (programski jezik)|Haskell]]), jer on ne dozvoljava bočne efekte. Osim funkcionalnoj, ML pripada i imperativnoj paradigmi.
Kao što je pomenuto na početku, zbog osobina koje ga karakterišu, ML ne pripada isključivo jednoj programskoj paradigmi. Pripada prvenstveno funkcionalnoj paradigmi, međutim, bez obzira na to što ohrabruje funkcionalno programiranje – on nije isključivo funkcionalan (poput jezika kao što je [[-{Haskel}- (programski jezik)|-{Haskell}-]]), jer on ne dozvoljava bočne efekte. Osim funkcionalnoj, -{ML}- pripada i imperativnoj paradigmi.


Kao predstavnik ove dve paradigme, on ima neke zajedničke osobine sa njihovim ostalim predstavnicima:
Kao predstavnik ove dve paradigme, on ima neke zajedničke osobine sa njihovim ostalim predstavnicima:
* jezici na koje je ML uticao: Haskell, [[Cyclone]], [[Nemerle]]
* jezici na koje je -{ML}- uticao: -{Haskell}-, [[-{Cyclone}-]], [[-{Nemerle}-]]
* jezici koji su uticali na nastanak i razvoj ML programskog jezika: [[Lisp]]
* jezici koji su uticali na nastanak i razvoj -{ML}- programskog jezika: [[-{Lisp}-]]




Ред 42: Ред 42:
===Mane===
===Mane===
* mala baza korisnika
* mala baza korisnika
* slaba programska podrška (nedostatak [[Интегрисано развојно окружење|IDE]]-a, [[Дебагер|debugger]]-a, itd.)
* slaba programska podrška (nedostatak [[Интегрисано развојно окружење|-{IDE}-]]-a, [[Дебагер|-{debugger}-]]-a, itd.)




==Tipovi podataka==
==Tipovi podataka==
Osnovni [[tipovi podataka]] su integer (celobrojni), real (realni), string (stringovni), boolean (logički). Od njih možemo konstruisati objekte korišćenjem [[torka|torki]], [[Листа (структура података)|lista]] ili [[Функција (програмирање)|funkcija]], a možemo kreirati i naše tipove.
Osnovni [[tipovi podataka]] su -{integer}- (celobrojni), -{real}- (realni), -{string}- (stringovni), -{boolean}- (logički). Od njih možemo konstruisati objekte korišćenjem [[torka|torki]], [[Листа (структура података)|lista]] ili [[Функција (програмирање)|funkcija]], a možemo kreirati i naše tipove.


===Torke===
===Torke===
Torka je niz objekata mešovitog tipa. Primer torke:
Torka je niz objekata mešovitog tipa. Primer torke:
(true,3.5,"abc")<ref name="prva">primer je pisan sintaksom jezika Standard ML</ref>
(-{true,3.5,"abc"}-)<ref name="prva">primer je pisan sintaksom jezika -{Standard ML}-</ref>


===Liste===
===Liste===
Ред 62: Ред 62:


===Funkcije===
===Funkcije===
Funkcije se definišu korišćenjem ključne reči ''fun''.
Funkcije se definišu korišćenjem ključne reči ''-{fun}-''.


Definicija jednostavne funkcije ima formu:
Definicija jednostavne funkcije ima formu:
fun <ime_funkcije> <parametri> = <izraz>;
-{fun <ime_funkcije> <parametri> = <izraz>}-;


Primeri jednostavnih funkcija:
Primeri jednostavnih funkcija:
fun double x = 2*x;
-{fun double x = 2*x}-;
fun inc x = x+1;
-{fun inc x = x+1}-;
fun adda s = s ^ "a";<ref name="prva"></ref>
-{fun adda s = s ^ "a";<ref name="prva"></ref>}-


Za izvršavanje funkcije jednostavno napišemo ime funkcije i u nastavku argument sa kojim pozivamo funkciju. Na primer:
Za izvršavanje funkcije jednostavno napišemo ime funkcije i u nastavku argument sa kojim pozivamo funkciju. Na primer:
double 6;
-{double 6}-;
inc 100;
-{inc 100}-;
adda "tub";
-{adda "tub"}-;


Sistem vraća vrednosti:
Sistem vraća vrednosti:
12 : int
12 : -{int}-
101 : int
101 : -{int}-
"tuba" : string
"tuba" : -{string }-


Primer rekurentne funkcije:
Primer rekurentne funkcije:
fun factorial 0 = 1
-{fun factorial 0 = 1 }-
| factorial n = n * factorial(n-1);<ref name="prva"></ref>
| -{factorial n = n * factorial(n-1);<ref name="prva"></ref> }-


Kada je argument funkcije 0, ona će vratiti broj 1. Za sve ostale slučajeve se izvršava druga linija. Ovo je rekurzija, pa se funkcija izvršava ponovo sve do baznog slučaja.
Kada je argument funkcije 0, ona će vratiti broj 1. Za sve ostale slučajeve se izvršava druga linija. Ovo je rekurzija, pa se funkcija izvršava ponovo sve do baznog slučaja.
Ред 93: Ред 93:


==Spoljašnje veze==
==Spoljašnje veze==
* [http://smlnj.org Standard ML of New Jersey]
* [-{http://smlnj.org Standard ML of New Jersey}-]
* [http://mlton.org MLton, optimizacija Standard ML kompajlera]
* [-{http://mlton.org MLton}-, optimizacija Standard ML kompajlera]
* [https://cakeml.org CakeML]
* [-{https://cakeml.org CakeML}-]
* [http://www.soc.napier.ac.uk/course-notes/sml/manual.html Uvod u ML kroz primere]
* [-{http://www.soc.napier.ac.uk/course-notes/sml/manual.html}- Uvod u ML kroz primere]
{{loš seminarski}}
{{loš seminarski}}



Верзија на датум 20. децембар 2016. у 01:07

ML (eng. MetaLanguage) je programski jezik koji je razvio [[Robin Milner]] 1970-ih godina na Univerzitetu u Edinburgu. Njegova sintaksa je inspirisana [[ISWIM]]-om (ISWIM je apstraktni programski jezik smišljen od strane P.J.Landin; akronim predstavlja „If You See What I Mean“). Pripada funkcionalnoj i imperativnoj programskoj paradigmi.


Pregled jezika

  • strogo tipiziran programski jezik - u osnovi ML jezika je lambda račun kojem je dodata stroga tipizacija. Strogi sistem tipova pruža mogućnost za optimizaciju, tako da se uskoro pojavljuje kompilator jezika.
  • poziv po vrednosti (eng. call-by-value) - funkciji se prosleđuju vrednosti promenljivih, koje se koriste u telu funkcije (rezultat rada funkcije zavisi od tih vrednosti), ali one same ne mogu biti promenjene
  • funkcije višeg reda - uzima jednu ili više funkcija kao argumente (procesni parametri) i vraća funkciju kao rezultat. U lambda računu sve funkcije su višeg reda.
  • automatsko upravljanje memorijom - osnovna forma automatskog upravljanja memorijom je sakupljač smeća (eng. garbage collection). On funkcioniše tako što pokušava da pokupi smeće, ili memoriju okupiranu objektima koje program više ne koristi.
  • parametarski polimorfizam - pomoću parametarskog polimorfizma funkcije ili tipovi podataka mogu biti napisani tako da se može prenositi vrednost. To su generičke funkcije, odnosno tipovi podataka.
  • statički doseg - to znači da ne mogu da se menjaju vrednosti promenljivih, već može samo da im se pristupi.
  • upotreba Hindley Milner algoritma inference tipova, koji može inferirati tipove većine vrednosti bez zahtevanja iscrpnih anotacija


Funkcija jezika

ML je skraćenica od metajezik: bio je zamišljen za razvijanje metoda dokaza teorema. Zbog dizajna i jedostavnog rukovanja podacima, koristi se prilikom programiranja prevodioca, analizatora, dokazivača teorema. Kao programski jezik opšte namene, svoju primenu nalazi i u bioinformatici, finansijskim sistemima, itd. Ima odličnu podršku za algebarske tipove podataka (ADTs), što ga, zajedno sa idejom o razvijanju metoda dokaza, čini veoma pogodnim za programiranje nekih matematičkih softvera.


Veza sa drugim jezicima

Glavni jezici koji pripadaju ML-u su [[Standard ML]] (SML) i [[Caml]]. Osim njih, postoje i drugi - poput jezika [[F sharp|F#]], koji se koristi kao podrska [[Microsoftovoj .NET platformi]]. Kao što je pomenuto na početku, zbog osobina koje ga karakterišu, ML ne pripada isključivo jednoj programskoj paradigmi. Pripada prvenstveno funkcionalnoj paradigmi, međutim, bez obzira na to što ohrabruje funkcionalno programiranje – on nije isključivo funkcionalan (poput jezika kao što je [[Haskel (programski jezik)|Haskell]]), jer on ne dozvoljava bočne efekte. Osim funkcionalnoj, ML pripada i imperativnoj paradigmi.

Kao predstavnik ove dve paradigme, on ima neke zajedničke osobine sa njihovim ostalim predstavnicima:

  • jezici na koje je ML uticao: Haskell, [[Cyclone]], [[Nemerle]]
  • jezici koji su uticali na nastanak i razvoj ML programskog jezika: [[Lisp]]


Prednosti i mane

Prednosti

  • portabilnost koda: program napisan na jednoj platformi može da se koristi (prenosi i izvršava) bilo gde – što je značajno zbog uniformnosti pisanja koda (samim tim se i izmene jednostavno vrše), ali, sa druge strane, arhitekturu određenog računara nećemo moći maksimalno da iskoristimo ovim uniformnim pristupom
  • dizajn jezika: iako je strogo tipiziran, programeri uglavnom ne moraju da eksplicitno pišu deklaracije tipova – što kodove pisane u ovom prorgamskom jeziku čini kompaktnim i veoma čitljivim (čitljivijim od mnogih čija sintaksa zahteva eksplicitnu deklaraciju tipova)
  • ima odličnu podršku za algebarske tipove podataka, što ga čini veoma pogodnim za rad sa odgovarajućim matematičkim izrazima
  • omogućena je jednostavna manipulacija podacima

Mane

  • mala baza korisnika
  • slaba programska podrška (nedostatak IDE-a, debugger-a, itd.)


Tipovi podataka

Osnovni tipovi podataka su integer (celobrojni), real (realni), string (stringovni), boolean (logički). Od njih možemo konstruisati objekte korišćenjem torki, lista ili funkcija, a možemo kreirati i naše tipove.

Torke

Torka je niz objekata mešovitog tipa. Primer torke:

 (true,3.5,"abc")[1]

Liste

Lista mora imati komponente istog tipa i mogu biti bilo koje dužine. Postoje dva konstruktora lista, prazna lista "nil" i operator "::". Konstruktor "nil" je lista koja ne sadrži ništa, operator "::" uzima stavku sa leve strane i listu sa desne da bi vratio listu za jedan dužu od originalne. Primeri:

 nil                              []  
 1::nil                          [1]  
 2::1::nil                     [2,1][1]

Operator "@" se koristi za spajanje dve liste, na primer:

 [1,2,3] @ [4,5,6] = [1,2,3,4,5,6][1]

Funkcije

Funkcije se definišu korišćenjem ključne reči fun.

Definicija jednostavne funkcije ima formu:

 fun <ime_funkcije> <parametri> = <izraz>; 

Primeri jednostavnih funkcija:

 fun double x = 2*x;  
 fun inc x = x+1; 
 fun adda s = s ^ "a";[1]  

Za izvršavanje funkcije jednostavno napišemo ime funkcije i u nastavku argument sa kojim pozivamo funkciju. Na primer:

 double 6;  
 inc 100; 
 adda "tub";  

Sistem vraća vrednosti:

 12 : int
 101 : int
 "tuba" : string 

Primer rekurentne funkcije:

 fun factorial 0 = 1  
 | factorial n = n * factorial(n-1);[1] 

Kada je argument funkcije 0, ona će vratiti broj 1. Za sve ostale slučajeve se izvršava druga linija. Ovo je rekurzija, pa se funkcija izvršava ponovo sve do baznog slučaja.

Reference

  1. ^ а б в г д primer je pisan sintaksom jezika Standard ML


Spoljašnje veze

Шаблон:Loš seminarski