Obrázek 1: Logo jazyka OCaml. Jak jsme si již řekli v článku o F#, pokud zvíře míří doleva, jedná se o jazyk OCaml, pokud doprava, jde o Perl.
Je to obráceně.
hehe neni to takova ta klasicka "profesorska" chyba na udrzeni pozornosti? nebo dezorientace v prostoru :)
Jak se dnes pouziva OCaml v praxi? Nasel jsem par kurzu na zapadnich uni, kde to uci jako uvod do FP (coz je asi fajn) a typovych systemu.
Potom je zname pouziti v JaneStreet, ale videl to nekdo jeste jinde?
Me jde o to, ze F# sice vypada fajn, ale nechci .NET a preklad OCamlu do binarek vypada dobre, a to i v benchmarcich (to by bylo dobre v clanku zminit, ze vysledkem je binarka bez zavisosti a pomerne rychla).
Kromě uvedeného se pokud vím moc nepoužívá. Jako lepší (ve smyslu modernější a efektivnější) varianta se nabízí Lean, syntax je skoro stejná (asi nepřekvapivě, prostě rodina ML), generuje velice rychlé binárky a nemá tracing GC. Na výuku a experimenty to je prašť jako uhoď.
Používá to i Facebook. Třeba jejich jazyk Hack má kompilátor v OCamlu.
Zrovna v benchmarcích bych řekl, že F# bude o dost rychlejší. OCaml má třeba tagované primitivní typy, tj. standardní int má jen 63 (nebo 31) bitů a veškerá aritmetika je tam pomalejší, protože musí řešit tag. Navíc dnes má F# přístup k SIMD instrukcím a s určitými omezeními může využítvat ref structy, takže tam jde napsat i velmi rychlý kód, který GC vůbec nepotřebuje.
OCaml měl velmi nízké latence GC - nižší než Go, které se tím často pyšní.
Ocaml aj Perl5 maju oba logo https://cs.wikipedia.org/wiki/Velbloud
Podla mojich skusenosti sa Perl5 stale hodne pouziva (casto sa stretavam s nejakymi perl sktiptami), zatial co prakticke pouzitie Ocaml som este nevidel (okrem akademickej sfery o com som len cital). Preto byva aj Perl5 predinstalovany na vacsine systemov, zatial co Ocaml nebyva predinstalovany nikde.
To nie je ziadna ignorace, len odpovedam na vyssie polozenu otazku "Jak se dnes pouziva OCaml v praxi?"
Inac Ocaml ma zaujal uz pred niekolkymi rokmi tym ze v PLEAC https://pleac.sourceforge.net/ ma 100% naimplementovanych prikladov z Perl Cookbook. Skusal som si v nom rozne priklady a celkom ma to bavilo, len doteraz som nenasiel prakticke uplatnenie, kde by som ho vo svoje praci pouzil..
Keď som si prvý krát OCaml pozeral, tak mi hneď udreli do očí tie print funkcie. print_endline, Printf.printf to vyzerá fakt divne. Je všeobecný úzus medzi modernými jazykmi mať globálne funkcie println, printfn a pod.
Syntax jazyka je super, samozrejme, veď z neho vyšiel F#. OCaml však má len zlomok knižníc, toolingu, možností práce, dokumentácie, kníh oproti F#. A to je pre mňa ako pragmatika rozhodujúce.
Nejspíš právě proto se zas tak moc nepoužívá, je stále víceméně akademický (i když o tom se dá teď polemizovat, protože Jane Street).
Je jich docela dost, ale kdo by se tím chlubil, když je to jejich konkurenční výhoda. Z hlavy např. https://issuu.com/
On je OCaml dost vysazený na použití modulů, proto to Printf na začátku (a obecně ty funkce z defaultního jmenného prostoru jsou divné, klidně by to mohli vyhodit).
Tam me vubec neni jasna license. Pokud to nebude volne dostupne tak jako ostatni jazyky, tak treba u nas tezko nasaditelne.
Tak na Pythone sa mi vždy pozdávalo, že si môžem vypísať print(a, b, c) jedným príkazom. A častokrát som sa čudoval, prečo mi to v iných jazykoch (oveľa expresívnejších) nejde (F#, C#, Scala, Groovy a mnoho ďalších.)
Ináč Lean, ktorý tu často spomínate, má IO.println. To beriem.
Nezkoušel jsem to, ale přijde mi, že
print_int "%d" (inc 10);;
se nemůže přeložit, protože to nedostalo int.