ñòàòüèGNU Free Documentation License ìàòåðèàëû âçÿòû èç Âèêèïåäèè Ñòàòüÿ áûëà èçìåíåíà. Îðèãèíàë ñòàòüè.

OCaml

Ìàòåðèàë èç Ýíöèêëîïåäèè â ñâîáîäíîé ýíöèêëîïåäèè
Ïåðåéòè ê: íàâèãàöèÿ, ïîèñê
Objective Caml
Caml.128x58.gif
Ñåìàíòèêà:

ìóëüòèïàðàäèãìåííûé: ôóíêöèîíàëüíûé, îáúåêòíî-îðèåíòèðîâàííûé, èìïåðàòèâíûé

Àâòîð(û):

INRIA

Ðåëèç:

3.12.1 (4 èþëÿ 2011)

Òèïèçàöèÿ äàííûõ:

ñòðîãàÿ, ñòàòè÷åñêàÿ

Äèàëåêòû:

F#, JoCaml, MetaOCaml, OcamlP3l

Èñïûòàë âëèÿíèå:

Standard ML, Caml Light

OCaml â ñîâðåìåííûé îáúåêòíî-îðèåíòèðîâàííûé ÿçûê ôóíêöèîíàëüíîãî ïðîãðàììèðîâàíèÿ îáùåãî íàçíà÷åíèÿ, êîòîðûé áûë ðàçðàáîòàí ñ ó÷¸òîì áåçîïàñíîñòè èñïîëíåíèÿ è íà䏿íîñòè ïðîãðàìì. Ýòîò ÿçûê èìååò âûñîêóþ ñòåïåíü âûðàçèòåëüíîñòè, ÷òî ïîçâîëÿåò åãî ëåãêî âûó÷èòü è èñïîëüçîâàòü. ßçûê CaML ïîääåðæèâàåò ôóíêöèîíàëüíóþ, èìïåðàòèâíóþ è îáúåêòíî-îðèåíòèðîâàííóþ ïàðàäèãìû ïðîãðàììèðîâàíèÿ. Áûë ðàçðàáîòàí â 1985 ãîäó âî ôðàíöóçñêîì èíñòèòóòå INRIA, êîòîðûé çàíèìàåòñÿ èññëåäîâàíèÿìè â îáëàñòè èíôîðìàòèêè. Ñàìûé ðàñïðîñòðàí¸ííûé â ïðàêòè÷åñêîé ðàáîòå äèàëåêò ÿçûêà ML.

Èíñòðóìåíòàðèé OCaml âêëþ÷àåò â ñåáÿ èíòåðïðåòàòîð, êîìïèëÿòîð â áàéòêîä è îïòèìèçèðóþùèé êîìïèëÿòîð â ìàøèííûé êîä, ïðåâîñõîäÿùèé ïî ñâîèì ïàðàìåòðàì àíàëîãè÷íûå êîìïèëÿòîðû C/C++ äëÿ ìíîãèõ çàäà÷, îñîáåííî ñâÿçàííûõ ñ ñèíòàêñè÷åñêèì àíàëèçîì è ò. ï.

Íà ÿçûêå OCaml, â ÷àñòíîñòè, íàïèñàí ðåíäåðèíã ôîðìóë Ýíöèêëîïåäèè, èñïîëüçóþùèõ òåã <math>, ôàéëîîáìåííûé êëèåíò MLDonkey, ñòåê óïðàâëåíèÿ ãèïåðâèçîðîì Xen xapi (ÿâëÿåòñÿ ÷àñòüþ Xen Server/Xen Cloud Platform).

Ê äîñòîèíñòâàì ÿçûêà îòíîñÿò:

  • ñòðîãóþ òèïèçàöèþ;
  • ðàçâèòóþ ñèñòåìó ìîäóëåé;
  • àâòîìàòè÷åñêóþ ñáîðêó ìóñîðà;
  • ýôôåêòèâíîñòü;
  • êðîññïëàòôîðìåííîñòü.

[ïðàâèòü] Ïðèìåð èñõîäíîãî òåêñòà íà OCaml (èç ôàéëà math/texvc.ml)

exception LexerException of string
let lexer_token_safe lexbuf =
    try Lexer.token lexbuf
    with Failure s -> raise (LexerException s)
 
let render tmppath finalpath tree =
    let outtex = Util.mapjoin Texutil.render_tex tree in
    let md5 = Digest.to_hex (Digest.string outtex) in
    begin
        let mathml = Mathml.render tree
        and html = Html.render tree
        in print_string (match (html,!Html.conservativeness,mathml) with
           None,_,None -> "+" ^ md5 
         | Some h,Html.CONSERVATIVE,None -> "c" ^ md5 ^ h
         | Some h,Html.MODERATE,None -> "m" ^ md5 ^ h
         | Some h,Html.LIBERAL,None -> "l" ^ md5 ^ h
         | Some h,Html.CONSERVATIVE,Some m -> "C" ^ md5 ^ h ^ "\000" ^ m
         | Some h,Html.MODERATE,Some m -> "M" ^ md5 ^ h ^ "\000" ^ m
         | Some h,Html.LIBERAL,Some m -> "L" ^ md5 ^ h ^ "\000" ^ m
         | None,_,Some m -> "X" ^ md5 ^ m
        );
        Render.render tmppath finalpath outtex md5
    end

[ïðàâèòü] Ññûëêè

[ïðàâèòü] ßçûêè ñ ïîõîæèìè âîçìîæíîñòÿìè



Èñòî÷íèê â «/w/index.php?title=OCaml&oldid=44491905»
Ïðîñòðàíñòâà èì¸í

Âàðèàíòû
Äåéñòâèÿ