ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠ΅Π»ΠΈΠ· ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Crystal 1.16, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Ruby Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ·ΡΠΊΡ Π‘ΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Crystal Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ ΡΠ·ΡΠΊΡ Ruby, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π½ΠΈΠΌ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ruby-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Crystal ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.
Π ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΠΊΠΎΠ΄Π΅. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Crystal ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Crystal Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΎΠ², Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ. Π Π°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Β«spawnΒ», ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΎΠ½ΠΎΠ²ΡΡ Π·Π°Π΄Π°ΡΡ Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, Π² Π²ΠΈΠ΄Π΅ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ±Π΅ΡΠ°ΠΌΠΈ (Fiber).
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΡΠΈΠΏΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ CSV, YAML, ΠΈ JSON, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ HTTP-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ WebSocket. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Β«crystal playΒ», ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ localhost:8080) Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Crystal.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² (fiber) Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Execution Contexts), ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ β Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π΄ΡΡΠ³ΠΎΠΌ. mt_context = Fiber::ExecutionContext::MultiThreaded.new(Β«worker-threadsΒ», 4) 10.times do mt_context.spawn do do_something end end gtk = Fiber::ExecutionContext::Isolated.new(Β«GtkΒ») do Gtk.main end gtk.wait
- Π ΠΌΠ΅ΡΠΎΠ΄Π΅ Slice.literal ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ Π²ΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² ΡΡΠ΅Π·Π΅ (slice), ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅.
- Π ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ sizeof ΠΈ alignof ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΡΠΈΠΏΠ°Ρ .
- Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ: Indexable#find, #find!, EventLoop#wait_readable ΠΈ #wait_writable.
- Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π΄Π»ΠΈΠ½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΎΠΏΡΠΈΠΈ Β«-oΒ» β Β«βoutputΒ» ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π² Π²ΠΌΠ΅ΡΡΠΎ ΡΠ°ΠΉΠ»Π° (ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½ΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΉΠ»Π° Ρ ΠΊΠΎΠ΄ΠΎΠΌ).
- Π Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ ΠΈ Π·Π°ΡΠΈΡΡΠ½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΠΎΠ±Π²ΡΠ·ΠΊΠ°Ρ (lib, fun, union, cstruct, external, type).
- Π ΠΌΠ΅ΡΠΎΠ΄Π΅ Β«File.match?Β» Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ Π½ΠΎΠ²ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΏΡΡΠ΅ΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ²ΡΠΈΠΉ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (ΠΏΠΎΠ΄ ΠΌΠ°ΡΠΊΡ Β«\\tΒ» ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°Π΅Ρ Β«\tΒ», Π° Π½Π΅ ΡΠΈΠΌΠ²ΠΎΠ» Β«tΒ»), ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΡΠ΅ΠΉ (ΠΌΠ°ΡΠΊΠ° Β«a**Β» ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Β«abΒ», Π½ΠΎ Π½Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΄Π»Ρ Β«ab/cΒ», Π° ΠΌΠ°ΡΠΊΠ° Β«**/aΒ» ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Β«aΒ»), Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ (ΠΌΠ°ΡΠΊΠ° Β«{[}]}Β» ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Β«}Β»), Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ (ΠΌΠ°ΡΠΊΠ° Β«[a-]Β» ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Β«-Β«).
- Π ΠΈΠΌΠ΅Π½Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ (defs), ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ ΡΡΡΡΠΈΠΊΡΡ Β«?Β» ΠΈ Β«!Β».
- Π ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Enumerable#sum ΠΈ #product ΡΠ±ΡΠ°Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ (union). ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ Β«[1, 10000000000_u64].sumΒ» ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Β«[1, 10000000000_u64].sum(0_u64)Β».
- Π HTTP::Request ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°Π·Π±ΠΎΡ ΡΠ°ΡΡΠ΅ΠΉ URL.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π°Π±ΠΎΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² LLVM 20.
- ΠΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ Π²ΡΠ·ΠΎΠ²Ρ LLVM::ABI ΠΈ LLVM::TargetMachine#abi.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru