ΠΠΎ fintech, ΡΠ΅ΡΡΠΎΠΏΠ°ΡΠΈ ΠΌΠΎΡΠ°ΠΌΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π΄ΠΎΡΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠΈΠ½ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π΄Π΅Π²ΠΈΠ·Π½ΠΈΠΎΡ ΠΊΡΡΡ. ΠΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·Π²ΠΎΡΠΈ ΠΈ ΡΠ΅ΠΊΠΎΡ ΠΎΠ΄ Π½ΠΈΠ² ΠΈΠΌΠ° ΡΠ²ΠΎΡΠ° ΠΈΠ΄Π΅ΡΠ° Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Π΅ΠΊΡΡΡΠ°ΠΏΠΎΠ»ΠΈΡΠ° Π΄Π΅Π²ΠΈΠ·Π½ΠΈΡΠ΅ ΠΊΡΡΡΠ΅Π²ΠΈ Π·Π° ΡΡΡΠ΅, Π·Π°Π΄ΡΡΡΠ΅, ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΌΠ΅ΡΠ΅Ρ, ΠΏΠ° Π΄ΡΡΠΈ ΠΈ Π·Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. ΠΠΊΠΎ ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈ ΡΡΠ°ΠΏΠΊΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΡΠ²ΠΎΡΠΈ Π±ΠΈΠ·Π½ΠΈΡΠΎΡ ΠΈ ΡΠ°ΠΌΠΎ Π³Π»ΡΠΏΠ°Π²ΠΎ Π΄Π° ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΏΠ°ΡΠΈΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄-Π½Π°Π·Π°Π΄. ΠΠ΅ΠΊΠΎΠΈ ΠΈΠ·Π²ΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΡΠΈΠ³ΡΡΠ½ΠΈ, Π½Π΅ΠΊΠΎΠΈ ΡΠ½Π°Π±Π΄ΡΠ²Π°Π°Ρ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΡΠ±ΡΠ΅, ΡΠΎ ΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΊΠ»ΡΠ·ΠΈΠΈ Π½Π° ΡΠ΅ΡΠΈΡΠΈ ΡΠΎΡΠ½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π½ΠΎ Π·Π° Π΅Π³Π·ΠΎΡΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠΎΠ²ΠΈ. ΠΠ°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π΅ Π΄Π° Π³ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ Π΄Π΅ΡΠ΅ΡΠΈΡΠΈ ΠΈΠ»ΡΠ°Π΄ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΈ Π΄Π° ΠΎΠ΄ΡΠ΅Π΄ΠΈΠΌΠ΅ ΡΡΠΎ ΡΠΎΡΠ½ΠΎ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅. Π’ΡΠ΅Π±Π° Π΄Π° ΡΠ° ΡΠΈΠ»ΡΡΠΈΡΠ°ΠΌΠ΅ Π΅Π΄Π½Π°ΡΠ° ΡΠΎΡΠ½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΎΠ΄ ΡΠΎΠ½ΠΈ Π½Π΅ΡΠΈΡΡΠΎΡΠΈΡΠ° ΠΈ ΡΠΈΡΠ°, ΠΈΡΡΠΎ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΏΡΠ°Π²Π°Ρ ΡΠ»Π°ΠΌΠΈΠ½Π³ΠΎ Π½Π° ΡΡΡΠ΅ΠΊ.
ΠΠΎΡΠ΅Π±Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° ΡΠ»Π°ΠΌΠΈΠ½Π³ΠΎΡΠΎ Π΅ Π½ΠΈΠ²Π½ΠΈΠΎΡ ΠΌΠ°ΡΠΈΠ²Π΅Π½ Π½Π°Π΄ΠΎΠ»Ρ Π·Π°ΠΎΠ±Π»Π΅Π½ ΠΊΠ»ΡΠ½, ΡΠΎ ΠΊΠΎΡ ΡΠΈΠ΅ ΡΠ° ΡΠΈΠ»ΡΡΠΈΡΠ°Π°Ρ Ρ ΡΠ°Π½Π°ΡΠ° ΠΎΠ΄ Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΊΠ°Π».
-ΠΠΈΠΊΠΈ
Π’Π°ΠΊΠ° ΡΠ΅ ΡΠΎΠ΄ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Vela
ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ°ΠΏΠΊΠΈ Π·Π° ΡΡΠΈ Π²Π°Π»ΡΡΠ½ΠΈ ΠΏΠ°ΡΠ°. ΠΠ°ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ° Vela
Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
defmodule Pairs do
use Vela,
eurusd: [sorter: &Kernel.<=/2],
eurgbp: [limit: 3, errors: 1],
eurcad: [validator: Pairs]
@behaviour Vela.Validator
@impl Vela.Validator
def valid?(:eurcad, rate), do: rate > 0
end
ΠΠΆΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ
Vela.put/3
- ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°
validator
Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ°, Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° (Π²ΠΈΠ΄ΠΈ ΠΏΠΎΠ³Π»Π°Π²ΡΠ΅ ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡΠ° ΠΏΠΎΠ΄ΠΎΠ»Ρ); - ΡΠ΅ ΡΠ° Π΄ΠΎΠ΄Π°Π΄Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° ΠΈΠ»ΠΈ Π½Π° ΡΠ΅Π΄ΠΎΡ Π½Π° Π΄ΠΎΠ±ΡΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π°ΠΊΠΎ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡΠ°ΡΠ° Π΅ ΡΡΠΏΠ΅ΡΠ½Π°, ΠΈΠ»ΠΈ Π½Π° ΡΠ΅Π΄ΠΎΡ Π·Π° ΡΡΠ»ΡΠ³Π°
:__errors__
Π²ΠΎ ΡΠΏΡΠΎΡΠΈΠ²Π½ΠΎ; - ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΡΠΎΡΡΠΈΡΠ°ΡΠ΅ Π°ΠΊΠΎ
sorter
Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ Π·Π° Π΄Π°Π΄Π΅Π½ ΠΊΠ»ΡΡ, ΠΈΠ»ΠΈ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ΅ ΡΠ° ΡΡΠ°Π²ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΡΠ΅Π»ΠΎ Π½Π° Π»ΠΈΡΡΠ°ΡΠ° (LIFO, Π²ΠΈΠ΄ΠΈ ΠΏΠΎΠ³Π»Π°Π²ΡΠ΅ Π‘ΠΎΡΡΠΈΡΠ°Ρ ΠΏΠΎΠ΄ΠΎΠ»Ρ); - ΡΠ΅ Π³ΠΎ ΡΠΊΡΠ°ΡΠΈ ΡΠ΅Π΄ΠΎΡ ΡΠΏΠΎΡΠ΅Π΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ
:limit
ΠΏΠΎΠΌΠΈΠ½Π° ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ΡΠΎ; - ΡΠ΅ ΡΠ° Π²ΡΠ°ΡΠΈ Π°ΠΆΡΡΠΈΡΠ°Π½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ°
Vela
.
iex|1 > pairs = %Pairs{}
iex|2 > Vela.put(pairs, :eurcad, 1.0)
#β %Pairs{..., eurcad: [1.0], ...}
iex|3 > Vela.put(pairs, :eurcad, -1.0)
#β %Pairs{__errors__: [eurcad: -1.0], ...}
iex|4 > pairs |> Vela.put(:eurusd, 2.0) |> Vela.put(:eurusd, 1.0)
#β %Pairs{... eurusd: [1.0, 2.0]}
ΠΡΡΠΎ ΡΠ°ΠΊΠ°, Vela
ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π° Access
Kernel
Kernel.get_in/2
Kernel.put_in/3
Kernel.update_in/3
Kernel.pop_in/2
Kernel.get_and_update_in/3
ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡΠ°
ΠΠ°Π»ΠΈΠ΄Π°ΡΠΎΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΊΠ°ΠΊΠΎ:
- Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠΎ Π΅Π΄Π΅Π½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ (
&MyMod.my_fun/1
), ΡΠ΅ ΡΠ° Π΄ΠΎΠ±ΠΈΠ΅ ΡΠ°ΠΌΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π·Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡΠ°; - Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠΎ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ,
&MyMod.my_fun/2
, ΡΠ°Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ ΠΏΠ°Ρserie, value
Π·Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡΠ°; - ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ»
;Vela.Validator
- ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°
threshold
, ΠΈ - ΠΏΠΎ ΠΆΠ΅Π»Π±Π° -compare_by
, Π²ΠΈΠ΄ΠΈ ΠΏΠΎΠ³Π»Π°Π²ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄Π±Π° ΠΏΠΎΠ΄ΠΎΠ»Ρ
ΠΠΊΠΎ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡΠ°ΡΠ° Π΅ ΡΡΠΏΠ΅ΡΠ½Π°, Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π° Π½Π° Π»ΠΈΡΡΠ°ΡΠ° ΠΏΠΎΠ΄ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΠΎΡ ΠΊΠ»ΡΡ; Π²ΠΎ ΡΠΏΡΠΎΡΠΈΠ²Π½ΠΎ, ΡΠΎΡΠΊΠ°ΡΠ° {serie, value}
ΠΎΠ΄ΠΈ Π½Π° :__errors_
.
Π‘ΠΏΠΎΡΠ΅Π΄Π±Π°
ΠΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π·Π°ΡΡΠ²Π°Π½ΠΈ Π²ΠΎ ΠΎΠ²ΠΈΠ΅ ΡΠ΅Π΄ΠΎΠ²ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ. ΠΠ° ΠΏΡΠ΅Π΄Π°Π²Π° Vela
Π·Π° Π΄Π° Π³ΠΈ ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠ΅, Π½Π΅ΠΎΠΏΡ
ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ°Ρ compare_by
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π²ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ΅ΡΠΈΡΠ°ΡΠ° (ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄Π°Ρ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΎΡ Kernel.</2
); ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ (Vela.value() -> number())
. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ & &1
.
ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π½Π΅ΡΠ΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ΅Π΄ΠΎΡ comparator
Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠΌΠ΅ΡΠ°Π°Ρ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π΄Π΅Π»ΡΠ° (min
/max
); Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ Date.diff/2
ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ°ΡΠΎΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΡΠΎΡΠ½ΠΈΡΠ΅ Π΄Π΅Π»ΡΠΈ Π·Π° Π΄Π°ΡΡΠΌΠΈ.
ΠΡΡΠ³ ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π΅ Π΄Π° ΠΏΠΎΠΌΠΈΠ½Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ threshold
, ΠΊΠΎΡ Π³ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈΠΎΡ ΡΠΎΠΎΠ΄Π½ΠΎΡ Π½Π° Π½ΠΎΠ²Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π΄ΠΎ {min, max}
ΠΈΠ½ΡΠ΅ΡΠ²Π°Π». ΠΠΈΠ΄Π΅ΡΡΠΈ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΡΠ΅Π½Ρ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ comparator
Π½ΠΎ ΡΠ΅ΠΏΠ°ΠΊ ΠΊΠΎΡΠΈΡΡΠΈ compare_by
. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΏΡΠ°Π³ Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π·Π° Π΄Π°ΡΡΠΌΠΈ Π²ΡΠ΅ΠΌΠΈΡΠ°, ΠΌΠΎΡΠ° Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ compare_by: &DateTime.to_unix/1
(Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ ΡΠ΅Π» Π±ΡΠΎΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡ) ΠΈ threshold: 1
, ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΡΠ²Π°ΡΡΠΈ Π½ΠΎΠ²ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π΄Π° ΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»Π°Ρ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΡΠ΅ Π²Π½Π°ΡΡΠ΅ Β±band
ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΠ΄ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Vela.equal?/2
Π΄Π° ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄Π°Ρ Π΄Π²Π΅ ΠΊΠ΅ΡΠΎΠ²ΠΈ. ΠΠΊΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π°Ρ ΡΡΠ½ΠΊΡΠΈΡΠ° equal?/2
ΠΈΠ»ΠΈ compare/2
, ΡΠΎΠ³Π°Ρ ΠΎΠ²ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π·Π° ΡΠΏΠΎΡΠ΅Π΄Π±Π°, ΠΈΠ½Π°ΠΊΡ Π½ΠΈΠ΅ Π³Π»ΡΠΏΠ°Π²ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ==/2
.
ΠΠΎΠ±ΠΈΠ²Π°ΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° ΠΎΠ±ΠΈΡΠ½ΠΎ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π° ΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅ Vela.purge/1
, ΡΠΎ ΡΡΠΎ ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π°Ρ Π·Π°ΡΡΠ°ΡΠ΅Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ (Π°ΠΊΠΎ validator
Π²ΡΠ·Π°Π½ Π·Π° timestamps
). ΠΠΎΡΠΎΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π²ΠΈΡΠ΅ Vela.slice/1
ΠΊΠΎΡΠ° ΡΠ΅ ΡΠ΅ Π²ΡΠ°ΡΠΈ keyword
ΡΠΎ ΠΈΠΌΠΈΡΠ° Π½Π° ΡΠ΅Π΄ΠΎΠ²ΠΈ ΠΊΠ°ΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΠΈ ΠΏΡΠ²ΠΈΡΠ΅, Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ get_in/2
/pop_in/2
Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ Π΄ΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π²ΠΎ ΡΠ΅ΠΊΠΎΡ ΡΠ΅Π΄.
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°
Vela
ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΡΠΈΡΠ΅Π½ ΠΊΠ°ΠΊΠΎ ΠΊΠ΅Ρ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΡΠ΅ΡΠΈΠΈ Π²ΠΎ ΠΏΡΠΎΡΠ΅ΡΠ½Π° ΡΠΎΡΡΠΎΡΠ±Π° ΠΊΠ°ΠΊΠΎ GenServer
/Agent
. ΠΠΈΠ΅ ΡΠ°ΠΊΠ°ΠΌΠ΅ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π΄Π° Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Π·Π°ΡΡΠ°ΡΠ΅Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π° ΠΊΡΡΡΠΎΡ, Π° Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠΎΠ°, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π³ΠΎ ΠΎΠ΄ΡΠΆΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠΎ ΡΠΎΡΡΠΎΡΠ±Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ Vela
, ΡΠΎ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ ΠΏΠΎΠ΄ΠΎΠ»Ρ.
@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
do: Rate.age(rate) < @death_age
ΠΈ Vela.purge/1
ΡΠΈΠ²ΠΊΠΎ Π³ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π° ΡΠΈΡΠ΅ Π·Π°ΡΡΠ°ΡΠ΅Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠ΅ΠΊΠΎΡ ΠΏΠ°Ρ ΠΊΠΎΠ³Π° Π½ΠΈ ΡΡΠ΅Π±Π°Π°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅. ΠΠ° Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈΠΌΠ΅ Π΄ΠΎ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Vela.slice/1
, ΠΈ ΠΊΠΎΠ³Π° Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° ΠΌΠ°Π»Π° ΠΈΡΡΠΎΡΠΈΡΠ° Π½Π° ΠΊΡΡΡΠΎΡ (ΡΠ΅Π»Π°ΡΠ° ΡΠ΅ΡΠΈΡΠ°), Π½ΠΈΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ° Π²ΡΠ°ΡΠ°ΠΌΠ΅ - Π²Π΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° - ΡΠΎ ΠΏΠΎΡΠ²ΡΠ΄Π΅Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
Π‘ΡΠ΅ΡΠ½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΡΠ΅ΡΠΈΠΈ!
ΠΠ·Π²ΠΎΡ: www.habr.com