„OCaml (programozási nyelv)” változatai közötti eltérés

fordítás sablon a szerző alapján + javítgatás megkezdve
(fordítás sablon a szerző alapján + javítgatás megkezdve)
{{Programozási nyelv infobox}}
{{ProgramozásiAz nyelv infobox}}'''Okaml''' (/oʊˈkæmDéván/ oh-KAM-el , korábban '''ObjectiveCaml''') egy [[Általánosáltalános célú programozási nyelv|általános célú]], [[Programozási paradigma|több paradigma programozási nyelv]] amely kiterjeszti a Caml nyelv és az ML [[Objektumorientáltobjektumorientált programozás|objektum-orientált]] jellemzőit. Az OCaml 1996-ban jött létre Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy, Ascánder Suárez és mások által.
 
Az OCaml eszközkészlet hordozhat magában interaktív legfelső szintű tolmácsot, bytecode fordítót, optimalizált natív kód fordítót, visszafordítható hibakeresőt, továbbá csomagkezelőt (OPAM). Az OCaml eredetileg az automatikus kötegellenőrzéssel lett kifejlesztve, , ezen kívül túl nagyméretű volt a statikus elemzéshez , továbbá a formális módszerekhez szükséges szoftverekben. Ezen területek mellett lényeges alkalmazásokat talált a rendszerprogramozásban, a webfejlesztésben , valamint a pénzügyi tervezésben (ideértve az alkalmazási területeket is).
{{Programozási nyelv infobox}}'''Okaml''' (/oʊˈkæmDéván/ oh-KAM-el , korábban '''ObjectiveCaml''') egy [[Általános célú programozási nyelv|általános célú]], [[Programozási paradigma|több paradigma programozási nyelv]] amely kiterjeszti a Caml nyelv és az ML [[Objektumorientált programozás|objektum-orientált]] jellemzőit. OCaml 1996-ban jött létre Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy, Ascánder Suárez és mások által.
 
A CAML rövidítés eredetileg a kategorikus absztrakt gépnyelvből állt, de OCaml mellőzte ezt az absztrakt gépet. Az OCaml egy ingyenes , ezen kívül nyitott forráskódú szoftver a Francia Számítástechnikai , ezen kívül Automatizálási Intézettől (INRIA) projektmenedzsmenthez , továbbá karbantartáshoz. A 2000-es évek elején az OCaml elemeit több nyelv is átvette, nevezetesen az F # , valamint a Scala.
Az OCaml eszközkészlet hordozhat magában interaktív legfelső szintű tolmácsot, bytecode fordítót, optimalizált natív kód fordítót, visszafordítható hibakeresőt, továbbá csomagkezelőt (OPAM). Az OCaml eredetileg az automatikus kötegellenőrzéssel lett kifejlesztve, , ezen kívül túl nagyméretű volt a statikus elemzéshez , továbbá a formális módszerekhez szükséges szoftverekben. Ezen területek mellett lényeges alkalmazásokat talált a rendszerprogramozásban, a webfejlesztésben , valamint a pénzügyi tervezésben (ideértve az alkalmazási területeket is).
 
A CAML rövidítés eredetileg a kategorikus absztrakt gépnyelvből állt, de OCaml mellőzte ezt az absztrakt gépet. Az OCaml egy ingyenes , ezen kívül nyitott forráskódú szoftver a Francia Számítástechnikai , ezen kívül Automatizálási Intézettől (INRIA) projektmenedzsmenthez , továbbá karbantartáshoz. A 2000-es évek elején az OCaml elemeit több nyelv is átvette, nevezetesen az F # , valamint a Scala.
 
== Filozófia ==
Az ML-ből származtatott nyelvek statikus jellegű rendszerükről , valamint típus-következtetési fordítójukról ismertek. Az OCaml egyesíti a funkcionalitást, az alaposságot , valamint az objektum-orientáltobjektumorientált programozást egy ML-szerű rendszerben. Emiatt a programozóknak nem szükséges nagyon ismerniük az OCaml használatához szükséges funkcionális nyelvi paradigmát.
 
Azáltal, hogy a statikus jellegű rendszer korlátai között dolgozik, az OCaml kiküszöböli a dinamikusan gépelt nyelvekhez kapcsolódó futásidejű nehézségeket. Valamint az OCaml jellegű következtetés-fordítója jelentős mértékben csökkenti a legtöbb statikusan beírt nyelv által megkövetelt kézi jellegű kommentárok szükségességét. Példának okáért a változók , továbbá a funkcióaláírások adattípusait jellemzően nem szükséges kifejezetten deklarálni, példának okáért Java , továbbá C # nyelveken, mert az egyéb kódokban szereplő értékeket az alkalmazási változók szereplőiből , továbbá egyéb funkcióiból lehet következtetni. Az OCaml jellegű rendszerek effektív használata némi bonyolultságot igényelhet a programozóktól, de ezt a tudományágat megbízható, nagyméretű teljesítményű szoftverekkel jutalmazzák.
 
Az OCaml feltételezhetően a legjobb differencia a többi nyelvtől az egyetemektől, a teljesítményre összpontosít. A statikus jellegű rendszer megakadályozhatja a futásidejű különbségeket, ezáltal kiküszöbölve a futásidejű típusok szükségességét , ezen kívül a dinamikusan beírt nyelv teljesítményének ellenőrzésével járó biztonsági terhet, miközben továbbra is biztosítja a futásidejű biztonságot, kivéve, ha a tömbkorlátozás ellenőrzése ki van kapcsolva, , esetleg ha nem biztonságos funkciók mint a szerializálást. Ezek a gyakorlatban ritkák , valamint elkerülhetők.
 
A típusellenőrzés mellett a funkcionális programozási nyelveket nehéz nehéz gépi nyelvi kódokká összeállítani olyan nehézségek okán, mint a funarg nehézségek. Az OCaml Optimizer Translator a szokásos hurokregiszter , valamint utasításoptimalizálás mellett statikus programelemzési módszert is használ a bokszolás, továbbá a zárolás kiosztásának értékének optimalizálására, amely segít a kapott kód teljesítményének maximalizálásában, még a széles körben használt funkcionális programozási konstrukcióban is időnként igaz.
 
Xavier Leroy kijelentette, hogy "az OCaml biztosítja a tisztességes C fordító teljesítményének legalább 50% -át", bár a direkt összehasonlítás lehetetlen. Az OCaml standard könyvtár egyes funkciói gyorsabb algoritmusokkal valósulnak meg, mint más nyelvek szabványos könyvtárainak ekvivalens funkciói. Példának okáért a definíciós unió megvalósítása az OCaml szabványos könyvtárelméletben lépcsőzetesen gyorsabb, mint az ugyanazon függvény a standard könyvtárban radikális nyelveken (például C ++, Java), mert az OCaml implementáció e-t használ fel, mert permanensen úgy dönt, hogy rekombinálja a bemeneteket , továbbá döntse el a kimeneteket (lásd: Állandó adatszerkezet).
 
== Jellemzők ==
Az OCaml magában foglalja a statikus jellegű rendszert, a csoport következtetését, a paraméter polimorfizmust, a farok rekurzióját, a minták illesztését, az első osztályú lexikális lezárást, a funkciót (paraméter modul), a kivételkezelést , valamint az automatikus szemétgyűjtés inkrementális előállítását.
 
Az OCaml az objektum rendszer ML stílusú következtetéstípusának kiterjesztése egy univerzális nyelvre. Ez lehetővé teszi az objektumtípus-kompatibilitás szerkezeti altípusait, független módon a bejelentett örökségtől (kivételes funkciók statikusan tipizált nyelveken), ha módszereik kompatibilisek.
 
A externális funkció interfész a C primitívek által biztosított összekapcsolás, ideértve az effektív numerikus tömbök nyelvének segítségét a C , továbbá a Fortra. Az OCaml támogatja az OCaml függvények könyvtárainak létrehozását is, amik a C fő programhoz társulnak , hogy OCaml könyvtárakat osszanak meg olyan C programozókkal, akik nem ismerik , esetleg telepítik az OCaml programot.
 
Az OCaml Eloszlás a következőket tartalmazza:
A natív kódfordító számos platformon elérhető, beleértve [[Unix]], [[Windows|Microsoft Windows]], és [[Apple Inc.|Alma]] [[macOS]]. A hordozhatóság natív módon érhető el [[kódgenerálás]] nagyobb architektúrák támogatása: [[IA-32]], [[X86-64]] (AMD64), Teljesítmény, [[SPARC]], [[ARM architektúra|Kar]], és ARM64.<ref>{{Cite web |url=https://github.com/ocaml/ocaml/tree/trunk/asmcomp |title=ocaml/asmcomp at trunk · ocaml/ocaml · GitHub |work=GitHub |accessdate=2 May 2015}}</ref>
 
Az OCaml bytecode , ezen kívül a natív kód projektek többszálas stílusok, megelőző kontextusváltással. Mivel azonban az INRIA OCaml rendszer szemétgyűjtőjét (ez az egyetlen rendelkezésre álló teljes nyelv egyetlen megvalósítása) nem egyúttal tervezték, nem támogatja a szimmetrikus többprocesszoros eljárást. Az OCaml szálak csupán ugyanabban a folyamatban hajthatók végre, időmegosztással. Vannak azonban több könyvtárak elosztott számítástechnika, mint például [http://functory.lri.fr/About.html Funkcionárius] és [http://projects.camlcity.org/projects/ocamlnet.html ocamlnet / Plazma].
 
== Fejlesztési környezet ==
 
=== Egyházi számok ===
A következő kód meghatározza a természetes számok egyházi kódolását, utóddal (succ) , valamint kiegészítéssel (add). Az n egyházi szám magasabb rendű függvény, amely akceptálja az f függvényt , továbbá az x értéket, , ezen kívül f-et pontosan n -szer használja. Az egyházi szám funkcionális értékből karakterláncokká történő átalakításához átadunk neki egy olyan függvényt, amely előkészíti az "S" karakterláncot a bemenetéhez , ezen kívül az állandó "0" karakterláncot.<syntaxhighlight lang="OCaml">
let zero f x = x
let succ n f x = f (n f x)
<span class="gp">#</span> {{codett|#require "num";;|lang=ocaml}}
<span class="gp">#</span> {{codett|open Num;;|lang=ocaml}}
</div>Ezután a faktoriális függvény tetszőleges pontosságú numerikus operátorokkal írható fel{{Mono|{{=}}/}} , {{Mono|*/}} és{{Mono|-/}} :<syntaxhighlight lang="OCaml">
# let rec fact n =
if n =/ Int 0 then Int 1 else n */ fact(n -/ Int 1);;
és futtatás:
$ ./ simple
Komplexebb, valamint nagyméretű teljesítményű 2D , valamint 3D grafikus projektek fejleszthetők az OCaml-ban. Az OpenGL , ezen kívül az OCaml használatának köszönhetően a kialakított projekt változatos platformokon átívelő , ezen kívül sok nagyobb platformra épülhet.
 
=== Fibonacci-sorozat ===
 
=== MetaOCaml ===
A MetaOCaml az OCaml többlépcsős programozási kiterjesztése, amely lehetővé teszi a gépi kód újabb, növekményes fordítását futás közben. Bizonyos esetekben a többlépcsős programozás jelentős gyorsulást érhet el, mert a feldolgozandó adatokról differenciáltabb adatok érhetők el futás közben, mint a normál fordítás alkalmával, így az inkrementális fordító számos állapotellenőrzést , ezen kívül más helyzetet optimalizálhat.
 
Példaként: ha fordításkor ismert, hogy néhány [[Hatvány|teljesítmény funkció]] x-> x^n gyakran szükséges, de az n csak futási időben ismert, a MetaOCaml-ben kétfokozatú teljesítményfunkció használható:<syntaxhighlight lang="ocaml">
 
== Hivatkozások ==
 {{Reflistjegyzetek}}
 
== Külső hivatkozásokFordítás ==
{{fordítás|en|OCaml|oldid=1024334951}}
 
== További információk ==
* {{Hivatalos weboldal}}
* [http://caml.inria.fr/pub/docs/manual-ocaml/ OCaml kézikönyv]