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

м
Dodavanje datuma u šablone za održavanje i/ili sredjivanje referenci; козметичке измене
Нема описа измене
м (Dodavanje datuma u šablone za održavanje i/ili sredjivanje referenci; козметичке измене)
{{МАТФДПЈ2016}}
'''-{ML}-''' (eng. ''-{MetaLanguage}-'') je [[programski jezik]] koji je razvio -{[[Robin Milner]]}- 1970-ih godina na [[Univerzitet u Edinburgu|Univerzitetu u Edinburgu]]. <ref name="Gordon1996">{{cite web | last = Gordon | first = Michael J. C. | authorlink = Michael J. C. Gordon | year=1996 | title = Kratka istorija - -{LCF}- - -{HOL}- | url = http://www.cl.cam.ac.uk/~mjcg/papers/HolHistory.html | accessdate = 2007-10-11. 10. 2007}}</ref>
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. <ref>{{cite web | last = Mitić| first = Nenad | authorlink = Nenad Mitić | year=2009 | title = Funkcionalno programiranje - prednosti i nedostaci | url = http://www.dms.rs/DMS/data/seminari/seminar2009/N.Mitic.pdf}}</ref> 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
* 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 algoritam|Hindley Milner algoritma]], koji može zaključivati 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 jednostavnog rukovanja podacima, koristi se prilikom programiranja prevodioca, analizatora, dokazivača teorema.
 
 
== 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.
 
 
== 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 programskom jeziku čini kompaktnim i veoma čitljivim (čitljivijim od mnogih čija sintaksa zahteva eksplicitnu deklaraciju tipova)
* 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 [[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 ===
Lista mora imati komponente istog tipa i mogu biti bilo koje dužine. Postoje dva konstruktora listi: 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]
[1,2,3] @ [4,5,6] = [1,2,3,4,5,6]<ref name="prva"></ref>
 
=== Funkcije ===
Funkcije se definišu korišćenjem ključne reči ''-{fun}-''.
 
 
 
== Spoljašnje veze ==
* [http://smlnj.org -{Standard ML of New Jersey}-]
* [http://mlton.org -{MLton}-, optimizacija Standard ML kompajlera]
1.572.075

измена