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

нема резимеа измене
Нема описа измене
Нема описа измене
{{МАТФДПЈ2016}}
'''-{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“}-).
Pripada [[Функционално програмирање|funkcionalnoj]] i [[Императивно програмирање|imperativnoj]] programskoj [[programska paradigma|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.
 
==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 [[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==
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 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}-]]
 
 
===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 [[torka|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"}-)<ref name="prva">primer je pisan sintaksom jezika -{Standard ML}-</ref>
 
===Liste===
 
===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";<ref name="prva"></ref>}-
 
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);<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.
 
==Spoljašnje veze==
* [-{http://smlnj.org Standard ML of New Jersey}-]
* [-{http://mlton.org MLton}-, optimizacija Standard ML kompajlera]
* [-{https://cakeml.org CakeML}-]
* [-{http://www.soc.napier.ac.uk/course-notes/sml/manual.html}- Uvod u ML kroz primere]
{{loš seminarski}}
 
36

измена