Enhavo. Filozofio lingvoj estas plej konataj por siaj senmovaj kaj kompililoj. OCaml unuigas, kaj sub Ml-simila tipsistemo. Tio signifas ke la programverkinto ne estas postulata por koni tro la puran funkcian lingvoparadigmon por uzi OCaml. La senmova tipsistemo de OCaml povas helpi elimini problemojn ĉe rultempo. Tamen, ĝi ankaŭ devigas la programiston obei al la limoj de la tipsistemo, kiu povas postuli zorgeman penson kaj proksiman atenton.
Tip-konkludanta kompililo tre reduktas la bezonon de manaj tipetikedadoj (ekzemple, la de variabloj kaj la signaturo de funkcioj kutime ne faras al bezono esti eksplicite deklarita, kiel ili faras enen ). Tamen, efika uzo de la tipsistemo de OCaml povas postuli iom da sofistikeco sur la parto de la programisto.
OCaml eble estas plej distingita de aliaj lingvoj kun originoj en akademiularo per ĝia emfazo de efikeco. Unue, ĝia senmova tipsistemo malebligas rultempajn tipmisagordojn, kaj tiel superfluigas rultempan tipon kaj sekurecokontrolojn kiuj ŝarĝas la prezenton de dinamike maŝinskribitaj lingvoj, dum daŭre garantiante al rultempa sekureco (krom kiam aro saltas kontroladon estas estingita, aŭ kiam certaj tip-nesekuraj ecoj kiel seriigo estas utiligitaj; tiuj estas sufiĉe raraj ke eviti ilin estas tre eblaj en praktiko). Krom tip-kontrolada supre, lingvoj estas, ĝenerale, defiante por kompili al efika maŝinlingvokodo, pro temoj kiel ekzemple la. Aldone al norma buklo, registro, kaj, la optimumiganta kompililo de OCaml utiligas teknikojn por optimumigi kaj asignon, helpante maksimumigi la prezenton de la rezulta kodo eĉ se ĝi faras ampleksan uzon de funkciaj programadaj konstruoj. Deklaris ke 'OCaml liveras almenaŭ 50% de la prezento de deca C-kompililo', sed rekta komparo estas malebla.
Kelkaj funkcioj en la OCaml-normbiblioteko estas efektivigitaj kun pli rapidaj algoritmoj ol ekvivalentaj funkcioj en la normbibliotekoj de aliaj lingvoj. Ekzemple, la efektivigo de metita unio en la OCaml-normbiblioteko en teorio estas asimptote pli rapida ol la ekvivalenta funkcio en la normbibliotekoj de nerefuteblaj lingvoj (ekz. C, Java) ĉar la OCaml-efektivigo ekspluatas la senŝanĝecon de aroj por recikligi partojn de eniraroj en la produktaĵo. Ecoj OCaml-ecoj:, padronakordigo, kaj pliiga generacia.
OCaml estas precipe rimarkinda pro etendado de Ml-stila tipinferenco al objektosistemo en ĝeneraluzebla lingvo. Tio permesas, kie obĵetas ke tipoj estas kongruaj se iliaj metodsubskriboj estas kongruaj, nekonsiderante sia deklarita heredo; nekutima trajto en statike maŝinskribitaj lingvoj. Por al primitivuloj estas disponigita, inkluzive de lingvosubteno por efikaj nombraj en formatoj kongrua kun kaj C kaj. OCaml ankaŭ apogas la kreadon de bibliotekoj de OCaml-funkcioj kiuj povas esti ligitaj al 'ĉefa' programo en C, tiel ke oni povis distribui OCaml-bibliotekon al C-programistoj kiuj havas neniun scion nek instalaĵon de OCaml.
La OCaml-distribuo enhavas:. Duktila kaj nomis, kiu permesas la sintakson de OCaml esti etendita aŭ eĉ anstataŭigita.
kaj analizantiloj nomitaj ocamleks kaj ocamliac. kiu apogas paŝi malantaŭen por esplori erarojn.
por mezurado de efikeco. Multaj ĝeneraluzeblaj La indiĝena kodkompililo estas disponebla por multaj platformoj, inkluzive de, kaj. Porteblo estas atingita per indiĝena koda generaciosubteno por gravaj arkitekturoj:, kaj.
OCaml-Bajtkodo kaj indiĝenaj kodprogramoj povas esti skribitaj en stilo, kun profilakta kuntekstenrangigo. Tamen, ĉar la rubforigisto de la INRIA OCaml-sistemo (kiu estas la nura nuntempe havebla plena efektivigo de la lingvo) ne estas dizajnita ĉar samtempeco-, ne estas apogita. OCaml-fadenoj en la sama procezo efektivigas de tempodividado nur. Ekzistas tamen pluraj bibliotekoj por distribuita komputiko kiel ekzemple kaj. Evolumedio Ekde 2011, multaj novaj iloj kaj bibliotekoj estis kontribuitaj al la OCaml evolumedio:.
OPAM, la OCaml Package Manager, evoluigita fare de OCamlPro, nun estas facila maniero instali OCaml kaj multajn el ĝiaj iloj kaj bibliotekojn. Optimumigante kompililojn por OCaml:. jsofocaml, evoluigita fare de la teamo, estas optimumiganta kompililo de OCaml ĝis, por krei retprogramojn en OCaml.
ocamlc estas kompililo de OCaml ĝis C, por kompletigi la indiĝenan kodkompililon por nepruvitaj platformoj. OCamlJava, evoluigita fare de Inria, estas kompililo de OCaml ĝis la JVM. OCaPic, evoluigita fare de Lip6, estas kompililo de OCaml ĝis. Retejoj:.
OCaml.org estas retejo administrita fare de la OCaml-komunumo. Try-OCaml, evoluigita fare de OCamlPro, estas retejo enhavanta kompletan OCaml REPL en retpaĝo.
Evoluiloj. TypeRex estas aro de malfermfontaj iloj kaj bibliotekoj por OCaml, evoluigita kaj konservita fare de OCamlPro. Merlin estas aŭt-kompletiga ilo por redaktado de OCaml-kodo en Emacs kaj Energio. Tiu sekcio ne iujn ajn. Bonvole helpu plibonigi tiun sekcion. Senfonta materialo povas esti defiita kaj.
(majo 2013) Tranĉeroj de OCaml-kodo estas plej facile studitaj enirante ilin en la 'pintnivela'. Tio estas interaga OCaml-sesio kiu presas la konkluditajn specojn de rezultaj aŭ difinitaj esprimoj.
La OCaml pintnivela estas komencita simple ruligante la OCaml-programon: $ ocaml Objective Caml version 3.09.0 # Kodo tiam povas esti enirita ĉe la 'nombro' promptilo. Ekzemple, kalkuli 1+2÷ 3: # 1 + 2.
3;; -: int = 7 OCaml konkludas la specon de la esprimo por esti 'int' ( ) kaj donas la rezulto '7'. Hola mondo La sekva programo 'hello.ml'. Printendline 'Hello World!' Povas esti kompilita en Bajtkodruleblan dosieron: $ ocamlc hello.ml -o hello aŭ kompilita en optimumigitan indiĝen-kodan ruleblan dosieron: $ ocamlopt hello.ml -o hello kaj efektivigita: $./hello Hello World! $ Sumigante liston de entjeroj Listoj estas unu el la fundamentaj datentipoj en OCaml. La sekva kodekzemplo difinas rekursivan funkciosumon kiu akceptas unu argumenton x. (Avizo la ŝlosilvortrec).
La funkcio rekursive ripetas super antaŭfiksita listo kaj disponigas sumon de entjerelementoj. La matĉo deklaro havas similecojn al elemento, kvankam ĝi estas multe pli ĝenerala. Let yearsize = 365. Let rec birthdayparadox prob people = let prob' = ( yearsize. Float people ) /. Prob in if prob'.
Let zero f x = x let succ n f x = f ( n f x ) let one = succ zero let two = succ ( succ zero ) let add n1 n2 f x = n1 f ( n2 f x ) let tostring n = n ( fun k - 'S' ^ k ) '0' let = tostring ( add ( succ two ) two ) Arbitra-precizeca uzina funkcio (bibliotekoj) Gamo da bibliotekoj estas rekte alirebla de OCaml. Ekzemple, OCaml havas enkonstruitan bibliotekon por. Ĉar la uzina funkcio kreskas tre rapide, ĝi rapide inundas maŝin-precizecajn nombrojn (tipe 32- aŭ 64-bits). Tiel, uzina estas taŭga kandidato por arbitra-precizeca aritmetiko.
En OCaml, la Num-modulo disponigas arbitra-precizecan aritmetikon kaj povas esti ŝarĝita en kuradon pintnivela uzanta. Let = ignore ( Glut. Argv ); Glut. InitDisplayMode doublebuffer: true ; ignore ( Glut. CreateWindow title: 'OpenGL Demo' ); let angle t = 10. T in let render = GlClear.
Archives Of The Caml Mailing List: Caml Light 7.1 For Mac Free
Clear ' color ; GlMat. Loadidentity ; GlMat. Rotate angle: ( angle ( Sys. Time )) z: 1. Begins ' triangles; List. Vertex2 - 1., - 1.; 0., 1.; 1., - 1.; GlDraw.
Ends ; Glut. SwapBuffers in GlMat. Mode ' modelview; Glut. DisplayFunc cb: render; Glut.
IdleFunc cb:( Some Glut. PostRedisplay ); Glut. MainLoop La LablGL-ligadoj al OpenGL estas postulataj.
La programo tiam povas esti kompilita al Bajtkodo kun: $ ocamlc -I +lablGL lablglut.cma lablgl.cma simple.ml -o simple aŭ al indiĝenkodo kun: $ ocamlopt -I +lablGL lablglut.cmxa lablgl.cmxa simple.ml -o simple kaj kuro: $./simple Multe pli sofistikaj, alt-efikecaj 2D kaj 3D grafikaj programoj povas esti evoluigitaj en OCaml. Dank'al la uzo de OpenGL kaj OCaml, la rezultaj programoj povas esti transsistemaj, kompilante sen iuj ŝanĝoj en multaj gravaj platformoj. Fibonacci Sequence La sekva kodo kalkulas ke la Fibonacci-sekvenco de pli sensenta n enigis. Ĝi utiligas kaj padronakordigon.
# let fourtimes f = ( twice twice ) f;; val fourtimes: ( ' a - ' a ) - ' a - ' a = # let add4 = fourtimes inc;; val add4: int - int = # add4 98;; -: int = 102 Derivitaj lingvoj MetaOCaml MetaOCaml estas etendaĵo de OCaml ebliganta pliigan kompiladon de nova maŝinkodo dum rultempo. Sub certaj cirkonstancoj, signifaj akceladoj estas eblaj uzante plurstadian programadon, ĉar pli detalaj informoj pri la datenoj por prilabori estas havebla ĉe rultempo ol ĉe la kutima kliento kompilas tempon, tiel ke la pliiga kompililo povas optimumigi for multajn kazojn de kondiĉkontrolado ktp. Ekzemple: se ĉe kompilu tempon ĝi estas konata ke certa x - x ^ nestas bezonita tre ofte, sed la valoro de nestas konata nur ĉe rultempo, vi povas uzi du-ŝtupan potencfunkcion en MetaOCaml. Fun x1 - ( x1. let y3 = let y2 = ( x1. 1 ) in ( y2.
y2 ) in ( y3. y3 )) La nova funkcio estas aŭtomate kompilita. Aliaj derivitaj lingvoj. AtomCaml disponigas sinkronigadprimitivulon por atoma (transaga) plenumo de kodo. Emily estas subaro de OCaml kiu uzas dezajnoregulkonfirmilon por devigi principojn.
estas lingvo surbaze de OCaml. Freŝa OCaml faciligas la manipuladon de nomoj kaj ligiloj.
GCaml aldonas ekstensan polimorfismon al OCaml, tiel permesante troŝarĝadon kaj tip-sekuran enrangigon. integras konstruojn por evoluigado de samtempaj kaj distribuitaj programoj. OCamlDuce etendas OCaml kun ecoj kiel ekzemple XML-esprimoj kaj regulesprimaj specoj. OCamlP3l estas sistemo surbaze de OCaml kaj la P3L-lingvo Softvaro skribita en OCaml., programanta kadron skribitan en pura OCaml., nova programlingvo kreita per, kiu estas etendaĵo de kun senmova klasifikado. La kompililo de hako estas skribita en OCaml., senmova analizilo por JavaScript kreis ĉe kiu konkludas kaj konfirmas senmovajn tipojn por JavaScript-programoj., senmova analizilo por Java, C kaj Objective-C kreitan ĉe, kiu estas utiligita por detekti cimojn en iOS kaj Androidprogramoj., multplatforma pakaĵomanaĝero., La Xen Nubo-Platformo, malfermfontecilstako por la Xen Virtuala Maŝino Hypervisor., softvarbiblioteko por komputado. Pluraj C-rutinoj estis generitaj per OCaml-programo nomita genfft., programo sinkronigi dosierojn inter du adresaroj., kunulo rigardi kliento bazita sur la., libera malfermfonteca multplatforma genealogio-softvaro., libera malfermfonteckompililo por la programlingvo., kadro por analizo., formala pruva estrosistemo., interreta evoluokadro., malfermfonteca programlingvo por interretevoluo., eksperimenta, malalt-nivela skriptlingvo por en-retumila klient-flanka skribado. Ĝia WIP-interpretisto kaj analizanto en la estas skribitaj plejparte en OCaml.
Komercaj uzantoj de OCaml Ekzistas pluraj dekduo firmaoj kiuj uzas OCaml certagrade. Rimarkindaj ekzemploj inkludas:., proprieta komerco firmao, kiu adoptis OCaml kiel it preferatan lingvon en it'oj fruaj tagoj., kiu uzas OCaml en, komponento de unu el siaj produktoj., kiu evoluigis Hakon, Flow, Infer kaj Pfff Vidu ankaŭ. kaj, lingvoj el kiuj OCaml evoluis., alia populara dialekto de ML., alia objektorientita dialekto de ML., objektorientita etendaĵo al la funkcia lingvo., nova interfaco al OCaml iniciatita per Facebook Referencoj.