ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π΅ Π²Π΅ΡΡΠΈΡ 5.4.0 Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ OCaml, ΠΏΡΠΎΠΌΠΈΡΠ»Π΅Π½ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ Π°ΠΊΡΠ΅Π½Ρ Π²ΡΡΡ Ρ ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½ΠΎΡΠΎ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅. Π 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 ΡΡΠ΅Π΄Π°. ΠΠ° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ βΠΎΡΠΌΡΠ½Π°β, Π²ΡΠΈΡΠΊΠΎ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΡΠ΅ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΎΡ OCaml ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅.
- ΠΠΎΠ² ΡΠ°Π·Π΄Π΅Π» Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° OCaml ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π² ΡΡΠ΅Π΄Π° Linux ΠΈ MacOS.
- ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄, ΠΎΠΊΠΎΠ»ΠΎ ΡΡΠΈΠ΄Π΅ΡΠ΅Ρ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎΡΡΠΈ Π΄ΡΠ·ΠΈΠ½Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΠΏΠ΅ΡΠ΄Π΅ΡΠ΅Ρ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
