ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Crystal 1.5, ΡΠΈΠΈΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Ruby Ρ Π²ΠΈΡΠΎΠΊΠ°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, ΠΏΡΠΈΡΡΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° C. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ Π½Π° Crystal Π΅ Π±Π»ΠΈΠ·ΡΠΊ Π΄ΠΎ, Π½ΠΎ Π½Π΅ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Ruby, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π½ΡΠΊΠΎΠΈ ruby ββΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΡΠ°Π±ΠΎΡΡΡ Π±Π΅Π· ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠΎΠ΄ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Crystal ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° Apache 2.0.
ΠΠ·ΠΈΠΊΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΊΠΎΠ΄Π°. ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Crystal ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ Π² ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Ρ ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΌΠ°ΠΊΡΠΎΡΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π½Π° Crystal Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½ΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Π΅Π·ΠΈΠΊ C. ΠΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° βspawnβ, ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ ΡΠΎΠ½ΠΎΠ²Π° Π·Π°Π΄Π°ΡΠ° Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ, Π±Π΅Π· Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π½ΠΈΡΠΊΠ°, ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π»Π΅ΠΊΠΈ Π½ΠΈΡΠΊΠΈ, Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈ Π²Π»Π°ΠΊΠ½Π° (Fiber).
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π³ΠΎΠ»ΡΠΌ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΎΠ±ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ CSV, YAML ΠΈ JSON, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° HTTP ΡΡΡΠ²ΡΡΠΈ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° WebSocket. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βcrystal playβ, ΠΊΠΎΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (localhost:8080 ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅) Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° Π΅Π·ΠΈΠΊΠ° Crystal.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ:
- ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ Π² Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡ. ΠΠ΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠΌΠ΅ ΡΠ΅Π³Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^β ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ 'name' ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ 'number' Π½Π° Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ FooAbstract#foo(number : Int32), ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ ΠΈΠΌΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²Π»ΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ
- ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π° Π½Π΅ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎΠ·ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²Π΅ΡΠ΅ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΎΡ ΡΠΈΠΏΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°. class Foo @x: Int64 def initialize(x) @x = x # ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ x ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΡ ΡΠΈΠΏ @x ΠΊΡΠ°ΠΉ ΠΊΡΠ°ΠΉ
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π΅ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π°Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΊΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΈ. def foo(@[ΠΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½] x); ΠΊΡΠ°ΠΉ#OK
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ ΠΊΠ°ΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π° Π² ΠΊΠΎΡΡΠ΅ΠΆΠΈ. KEY = "s" foo = {s: "String", n: 0} ΠΏΠΎΡΡΠ°Π²Ρ foo[KEY].size
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ File#delete? ΠΊΡΠΌ File API Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. ΠΈ Dir#delete?, ΠΊΠΎΠΈΡΠΎ Π²ΡΡΡΠ°Ρ false, Π°ΠΊΠΎ ΡΠ°ΠΉΠ»ΡΡ ΠΈΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ.
- ΠΠΎΠ΄ΡΠΈΠ»Π΅Π½Π° Π΅ Π·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° File.tempfile, ΠΊΠΎΠΉΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½ΡΠ»Π΅Π²ΠΈ Π·Π½Π°ΡΠΈ Π² Π½ΠΈΠ·ΠΎΠ²Π΅, ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΡΠΈ ΠΈΠΌΠ΅ Π½Π° ΡΠ°ΠΉΠ».
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° NO_COLOR Π·Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ²Π΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ²Π΅ΡΠΎΠ²Π΅ΡΠ΅ Π² ΠΈΠ·Ρ ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
- ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π°Ρ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru