ΠΠ·Π»Π΅Π·Π΅ Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Crystal, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ Ruby ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΡΠΈΠΈΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ°: runtime Ρ "Π²Π³ΡΠ°Π΄Π΅Π½Π°" event loop, Π² ΠΊΠΎΠΉΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π²Ρ ΠΎΠ΄-ΠΈΠ·Ρ ΠΎΠ΄ ΡΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ (Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° Ρ ΡΠ»Π°Π³ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ) ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π»Π΅ΡΠ½Π° ΠΈ ΡΠ΄ΠΎΠ±Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° C.
Π‘ Π²Π΅ΡΡΠΈΡ 0.34.0, Π΅Π·ΠΈΠΊΡΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ Π·Π°ΠΏΠΎΡΠ²Π° ΡΠ²Π΅ΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ Π΄Π²ΠΈΠΆΠΈ ΠΊΡΠΌ ΠΏΡΡΠ²ΠΈΡ ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΡΠ΅Π»ΠΈΠ· (Ρ.Π΅. Π²Π΅ΡΡΠΈΡ 1.0).
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Crystal ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°Ρ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π²Π°ΠΆΠ½ΠΎΡΡ:
Π API Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π½ΠΎΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ Log, ΠΊΠΎΡΡΠΎ, Π·Π° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ ΡΡΠ°ΡΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΡΠΎΡΠ²Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° ΠΊΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ΠΈ ΠΈ Π΄Π° ΡΠΈΠ»ΡΡΠΈΡΠ° ΡΠ΅Π·ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ "ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°".
Π ΡΠ΄ΠΈΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΡΠ²Π΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° C, Errno ΠΈ WinError, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Ρ Π²Ρ ΠΎΠ΄-ΠΈΠ·Ρ ΠΎΠ΄, Π²Π΅ΡΠ΅ ΠΎΡΡΡΡΠΏΠ²Π°Ρ Π½Π° Π·Π°Π΄Π΅Π½ ΠΏΠ»Π°Π½ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡΡΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡΠ° IO::Error (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π·Π°Π±ΡΠ°Π½ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Errno).
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° else nil Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° case/when/elseΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°ΡΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΡΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½Π΅ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ΡΠ΅ when ΠΏΡΠΈ ΠΌΠ°ΡΠΈΠ½Π³ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΊΠ°ΡΠΎ enum ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΎΡ Union. Π’ΠΎΠ΅ΡΡ, ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, ΡΠ°ΠΊΡΠ² ΠΊΠΎΠ΄ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π±Π΅Π· ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ when (when Char) ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½Π°ΡΠ΅-ΠΊΠ»ΠΎΠ½:
a = 1 || βxβ || "foo"
case a
when Int32
# β¦
when String
# β¦
end
ΠΠΏΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° disable_overflow Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π½Π°Π»ΠΈΡΠ½Π°. ΠΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΡΠ΅Π»ΠΈΠ²Π°Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ &+, &-, &*.
Array#fill ΡΠ΅Π³Π° ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΠΌΠ΅Π½ΡΠ½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΊΠ°Π΄ΡΡΠ΅Π½ ΡΠΈΠΊΡΠ» Ρ ΠΏΡΠΎΡΡΠ° memset;
ΠΠ΅Π½ΠΈΠ΄ΠΆΡΡΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ (ΠΈΠ»ΠΈ ΡΠ°ΡΠ΄ΠΎΠ²Π΅ΡΠ΅), ΠΌΠΈΡΡΠΈΡΠ½ΠΎ Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈ shards, ΡΠ΅Π³Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ-Π±ΡΡΠ· ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ Π·Π° Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΠ²Π°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ Molinillo, Π²ΠΈΠ΄ΡΠ½ Π² CocoaPods (Swift) ΠΈ Builder (Ruby).
ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° LLVM 10, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π±ΠΈ ΡΡΡΠ±Π²Π°Π»ΠΎ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΡΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ° ΠΈ Ρ.Π½.
β¦ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈ, ΠΏΠΎ ΠΌΠΎΠ΅ ΡΡΠ±Π΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π·Π½Π°ΡΠΈΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ.
Π‘Π»Π΅Π΄Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Crystal Π΅ Π΅Π·ΠΈΠΊ, ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° LLVM, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΏΠΎ-Π±ΡΡΠ·ΠΎ, ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΠΎ-Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ ΠΎΡ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΈ "Π±ΡΠ°ΡΡ", ΠΈ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π°Π²Π° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° Π΄ΠΎΡΡΠ° Π±ΡΡΠ· Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠ°ΠΉΠ». Π Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° Golang, ΡΠΎΠΉ ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π΅Π½ ΠΠΠ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π΄ΠΆΠ΅Π½Π΅ΡΠΈΡΠΈΡΠ΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Nim, Π½ΠΎ Π΅ ΡΠ²Π½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ ΠΊΡΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ "ΡΡΠΊ ΠΈ ΡΠ΅Π³Π°", Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΈ ΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π² ΡΠ²ΠΎΡ API-Π°ΡΡΠ΅Π½Π°Π», ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΈ Π·Π°ΡΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π±ΠΈΠ»Π½ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
