Корисник:Тамара Марцетиц/песак

С Википедије, слободне енциклопедије

ML (енг. МетаЛангуаге) је програмски језик који је развио Робин Милнер 1970-их година на Универзитету у Единбургу. Његова синтакса је инспирисана ИСWИМ-ом (ИСWИМ је апстрактни програмски језик смишљен од стране П.Ј.Ландин; акроним представља „Иф Yоу Сее Wхат I Меан“). Припада функционалној и императивној програмској парадигми.

Преглед језика[уреди | уреди извор]

  • строго типизиран програмски језик - у основи ML језика је ламбда рачун којем је додата строга типизација. Строги систем типова пружа могућност за оптимизацију, тако да се ускоро појављује компилатор језика.
  • позив по вредности (енг. цалл-бy-валуе) - функцији се прослеђују вредности променљивих, које се користе у телу функције (резултат рада функције зависи од тих вредности), али оне саме не могу бити промењене
  • функције вишег реда - узима једну или више функција као аргументе (процесни параметри) и враћа функцију као резултат. У ламбда рачуну све функције су вишег реда.
  • аутоматско управљање меморијом - основна форма аутоматског управљања меморијом је сакупљач смећа (енг. гарбаге цоллецтион). Он функционише тако што покушава да покупи смеће, или меморију окупирану објектима које програм више не користи.
  • параметарски полиморфизам - помоћу параметарског полиморфизма функције или типови података могу бити написани тако да се може преносити вредност. То су генеричке функције, односно типови података.
  • статички досег - то значи да не могу да се мењају вредности променљивих, већ може само да им се приступи.
  • употреба Хиндлеy Милнер алгоритма инференце типова, који може инферирати типове већине вредности без захтевања исцрпних анотација


Функција језика[уреди | уреди извор]

ML је скраћеница од метајезик: био је замишљен за развијање метода доказа теорема. Због дизајна и једоставног руковања подацима, користи се приликом програмирања преводиоца, анализатора, доказивача теорема. Као програмски језик опште намене, своју примену налази и у биоинформатици, финансијским системима, итд. Има одличну подршку за алгебарске типове података (АДТс), што га, заједно са идејом о развијању метода доказа, чини веома погодним за програмирање неких математичких софтвера.


Веза са другим језицима[уреди | уреди извор]

Главни језици који припадају ML-у су Стандард ML (СМЛ) и Цамл. Осим њих, постоје и други - попут језика Ф#, који се користи као подрска Мицрософтовој .НЕТ платформи. Као што је поменуто на почетку, због особина које га карактеришу, ML не припада искључиво једној програмској парадигми. Припада првенствено функционалној парадигми, међутим, без обзира на то што охрабрује функционално програмирање – он није искључиво функционалан (попут језика као што је Хаскелл), јер он не дозвољава бочне ефекте. Осим функционалној, ML припада и императивној парадигми.

Као представник ове две парадигме, он има неке заједничке особине са њиховим осталим представницима:

  • језици на које је ML утицао: Хаскелл, Цyцлоне, Немерле
  • језици који су утицали на настанак I развој ML програмског језика: Лисп


Предности и мане[уреди | уреди извор]

Предности[уреди | уреди извор]

  • портабилност кода: језик написан на једној платформи може да се користи (преноси и извршава) било где – што је значајно због униформности писања кода (самим тим се и измене једноставно врше), али, са друге стране, архитектуру одређеног рачунара нећемо моћи максимално да искористимо овим униформним приступом
  • дизајн језика: иако је строго типизиран, програмери углавном не морају да експлицитно пишу декларације типова – што кодове писане у овом проргамском језику чини компактним и веома читљивим (читљивијим од многих чија синтакса захтева експлицитну декларацију типова)
  • има одличну подршку за алгебарске типове података, што га чини веома погодним за рад са одговарајућим математичким изразима
  • омогућена је једноставна манипулација подацима

Мане[уреди | уреди извор]

  • мала база корисника
  • слаба програмска подршка (недостатак ИДЕ-а, дебуггер-а, итд.)


Типови података[уреди | уреди извор]

Основни типови података су интегер (целобројни), реал (реални), стринг (стринговни), боолеан (логички). Од њих можемо конструисати објекте коришћењем торки, листа или функција, а можемо креирати и наше типове.

Торке[уреди | уреди извор]

Торка је низ објеката мешовитог типа. Пример торке:

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

Листе[уреди | уреди извор]

Листа мора имати компоненте истог типа и могу бити било које дужине. Постоје два конструктора листа, празна листа "нил" и оператор "::". Конструктор "нил" је листа која не садржи ништа, оператор "::" узима ставку са леве стране и листу са десне да би вратио листу за један дужу од оригиналне. Примери:

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

Оператор "@" се користи за спајање две листе, на пример:

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

Функције[уреди | уреди извор]

Функције се дефинишу коришћењем кључне речи фун.

Дефиниција једноставне функције има форму:

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

Примери једноставних функција:

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

За извршавање функције једноставно напишемо име функције и у наставку аргумент са којим позивамо функцију. На пример:

 double 6;  
 inc 100; 
 adda "tub";  

Систем враца вредности:

 12 : int
 101 : int
 "tuba" : string 

Пример рекурентне функције:

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

Када је аргумент функције 0, она ће вратити број 1. За све остале случајеве се извршава друга линија. Ово је рекурзија, па се функција извршава поново све до базног случаја.


Референце[уреди | уреди извор]

  1. ^ а б в г д пример је писан синтаксом језика Стандард ML


Спољашње везе[уреди | уреди извор]