ИздавањС Π½Π° програмскиот јазик ΠšΡ€ΠΈΡΡ‚Π°Π» 1.5

ОбјавСно Π΅ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° програмскиот јазик Crystal 1.5, Ρ‡ΠΈΠΈΡˆΡ‚ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΈ сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Π°Ρ‚ Π΄Π° ја ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ практичноста Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ Ruby со високитС пСрформанси Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, карактСристични Π·Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ C. Бинтаксата Π½Π° Crystal Π΅ блиска, Π½ΠΎ Π½Π΅ Π΅ цСлосно ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π½Π° со Ruby, ΠΈΠ°ΠΊΠΎ Π½Π΅ΠΊΠΎΠΈ Ruby ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. ΠšΠΎΠ΄ΠΎΡ‚ Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ Π΅ напишан Π²ΠΎ ΠšΡ€ΠΈΡΡ‚Π°Π» ΠΈ дистрибуиран ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Ρ†Π°Ρ‚Π° Apache 2.0.

ΠˆΠ°Π·ΠΈΠΊΠΎΡ‚ користи ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° статички Ρ‚ΠΈΠΏ, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π° Π±Π΅Π· ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Сксплицитно Π΄Π° сС спСцифицираат Ρ‚ΠΈΠΏΠΎΠ²ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚. ΠšΡ€ΠΈΡΡ‚Π°Π»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ сС ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, со Π΅Π²Π°Π»ΡƒΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΌΠ°ΠΊΡ€ΠΎΠ° ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ΅. Π’ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Crystal, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΏΠΎΠ²Ρ€Π·Π°Ρ‚ врски напишани Π²ΠΎ C. ΠŸΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ сС Π²Ρ€ΡˆΠΈ со помош Π½Π° ΠΊΠ»ΡƒΡ‡Π½ΠΈΠΎΡ‚ Π·Π±ΠΎΡ€ β€žspawnβ€œ, кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° асинхроно Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Π° Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π°, Π±Π΅Π· Π΄Π° ја Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚Π΅ Π³Π»Π°Π²Π½Π°Ρ‚Π° нишка, Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° лСсни нишки Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ Π²Π»Π°ΠΊΠ½Π°.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π³ΠΎΠ»Π΅ΠΌ сСт Π½Π° Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° CSV, YAML ΠΈ JSON, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ HTTP сСрвСри ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° WebSocket. Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° процСсот Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜, ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° сС користи ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° β€žcrystal playβ€œ, која Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π²Π΅Π±-ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ (Π»ΠΎΠΊΠ°Π»Π΅Π½ хост: 8080 ΠΏΠΎ Π΄ΠΈΡ„ΠΎΠ»Ρ‚) Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ Π²ΠΎ Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ ΠšΡ€ΠΈΡΡ‚Π°Π».

Π“Π»Π°Π²Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  • Π’ компилятор Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° соотвСтствия ΠΈΠΌΡ‘Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ абстрактного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π² Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ. Π’ случаС нСсоотвСтствия ΠΈΠΌΡ‘Π½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выводится ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: 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 ^β€” Warning: positional parameter β€˜name’ corresponds to parameter β€˜number’ of the overridden method FooAbstract#foo(number : Int32), which has a different name and may affect named argument passing
  • ΠŸΡ€ΠΈ присвоСнии Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ограничиваСтся Ρ‚ΠΈΠΏΠΎΠΌ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. class Foo @x : Int64 def initialize(x) @x = x # ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ x ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Ρ‚ΠΈΠΏ @x end end
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ макросов. def foo(@[MaybeUnused] x); end # OK
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° использования констант Π² качСствС индСксов ΠΈ ΠΈΠΌΡ‘Π½ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°Ρ…. KEY = Β«sΒ» foo = {s: Β«StringΒ», n: 0} puts foo[KEY].size
  • Π’ API File для удалСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ File#delete? ΠΈ Dir#delete?, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ false Π² случаС отсутствия Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.
  • УсилСна Π·Π°Ρ‰ΠΈΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° File.tempfile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ допускаСт Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ символы Π² стоках, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… имя Ρ„Π°ΠΉΠ»Π°.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° пСрСмСнная окруТСния NO_COLOR, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ компилятора ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.
  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€