ML (programski jezik)

(преусмерено са Programski jezik ML)

ML (eng. MetaLanguage) je programski jezik koji je razvio Robin Milner 1970-ih godina na Univerzitetu u Edinburgu.[1] 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.[2] 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, 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. 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#, 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 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[3]
  • 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 programskom 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
  • 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.

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

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

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]  
 2::1::nil                     [2,1][4]

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

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

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";[4]  

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);[4] 

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. ^ Gordon, Michael J. C. (1996). „Kratka istorija - LCF - HOL”. Приступљено 11. 10. 2007. 
  2. ^ Mitić, Nenad (2009). „Funkcionalno programiranje - prednosti i nedostaci” (PDF). [мртва веза]
  3. ^ Tate, Bruce A.; Daoud, Fred; Dees, Ian; Moffitt, Jack (2014). Opširnije o jeziku Haskell (Verzija knjige: Novembar 2014 изд.). стр. 97. ISBN 978-1-941222-15-7. 
  4. ^ а б в г д primer je pisan sintaksom jezika Standard ML

Spoljašnje veze

уреди