ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠ΅Π»ΠΈΠ· ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ OCaml 5.4.0, ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ Π°ΠΊΡΠ΅Π½ΡΠΎΠΌ Π½Π° Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. Π OCaml Π³Π°ΡΠΌΠΎΠ½ΠΈΡΠ½ΠΎ ΡΠΎΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΄ΡΠΎ, ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ Π½Π΅ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠΎΠ΄ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° OCaml ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ LGPL.
Π‘ΡΠ΅Π΄ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ OCaml Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΡΡ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎΡΡΡΡ, Π΄Π΅Π»Π°Ρ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ Π΅Π³ΠΎ Ρ ΠΎΡΠΎΡΠΈΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ OCaml Π²ΠΊΠ»ΡΡΠ°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ , Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΌΠΎΡΠ½ΡΠ΅ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π² OCaml 5.4.0:
- ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΆΠΈ (Labelled tuples), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ Π΄Π°Π²Π°ΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠ»Π΅Π½Π°ΠΌ ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π½ΠΈΠΌ. let point = ~x:1, ~y:2 (* val point : x:int * y:int = (~x:1, ~y:2) *) let ( * ) (x,~dx) (y, ~dx:dy) = x*.y, ~dx:(x *. dy +. y *. dx ) (* val ( * ) : float * dx:float -> float * dx:float -> float * dx:float *) let mult_dx x y = let ~dx, .. = x * y in dx
- ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ Π΅Π΄ΠΈΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ Β«_ arrayΒ», Β«_ iarrayΒ» ΠΈ Β«floatarrayΒ». [|1; 2; 3|] ([|1; 2; 3|] : _ iarray) ([|1.; 2.; 3.|] : floatarray)
- ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ Β«atomicΒ» Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΡΡΠ΅Π±ΡΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ Π½Π΅Ρ. type βa mpsc_list = { mutable head:βa list; mutable tail: βa list [@atomic] } let rec push t x = let before = Atomic.Loc.get [%atomic.loc t.tail] in let after = x :: before in if not (Atomic.Loc.compare_and_set [%atomic.loc t.tail] before after) then push t x β¦
- ΠΠΎΠ²ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅: Pair, Pqueue, Repr, Iarray.
- ΠΠΎΠ΄ΡΠ»Ρ Pair Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠΈ; let ones = Pair.map_fst succ (0,1)
- ΠΠΎΠ΄ΡΠ»Ρ Pqueue β ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ; module Int_pqueue = Pqueue.MakeMin(Int) let q = Int_pqueue.of_list [4;0;5;7] let some_zero = Int_pqueue.pop_min q
- ΠΠΎΠ΄ΡΠ»Ρ Repr ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈ ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ΅ ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ; let f = Repr.phys_equal (ref 0) (ref 0)
- ΠΠΎΠ΄ΡΠ»Ρ Iarray Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ; let a = Iarray.init 10 Fun.id let b = Iarray.map succ a
- ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ βΠΎΡΠΈΡΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅β. ΠΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ OCaml Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ C, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ OCaml. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΡΠΌΠ° ΠΏΡΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠΈ ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΊΠΎΠ΄Π΅ C, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² ΡΡΠ΅Π΄Π΅ OCaml.Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Β«cancellationΒ», Π²ΡΠ΅ Π΄ΠΎΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ OCaml.
- ΠΠΎΠ²ΡΠΉ ΡΠ°Π·Π΄Π΅Π» Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ OCaml ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΡΡΠ΅Π΄Π΅ Linux ΠΈ MacOS.
- ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ, ΠΎΠΊΠΎΠ»ΠΎ ΡΡΠΈΠ΄ΡΠ°ΡΠΈ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΏΠΎΡΡΠΈ Π΄ΡΠΆΠΈΠ½Π° ΡΠ»ΡΡΡΠ΅Π½Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , Π±ΠΎΠ»Π΅Π΅ ΠΏΡΡΠΈΠ΄Π΅ΡΡΡΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
