Π’Ρ‹ΡˆΠ΅Π» Crystal 0.34.0

Π’Ρ‹ΡˆΠ»Π° новая вСрсия Crystal, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ языка программирования с синтаксисом Ruby, Π³Π»Π°Π²Π½Ρ‹Π΅ особСнности ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ — Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ с «Π²ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ» event loop’ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° асинхронны, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° многопоточности (ΠΏΠΎΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„Π»Π°Π³ΠΎΠΌ ΠΏΡ€ΠΈ компиляции) ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простая ΠΈ удобная Ρ€Π°Π±ΠΎΡ‚Π° с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Π½Π° Π‘ΠΈ.

Начиная с вСрсии 0.34.0, язык ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ‚Π²Ρ‘Ρ€Π΄ΠΎΠΉ ΠΏΠΎΡΡ‚ΡƒΠΏΡŒΡŽ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π² сторону ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ настоящСго Ρ€Π΅Π»ΠΈΠ·Π° (Ρ‚.Π΅. вСрсии 1.0).

Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Crystal ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² порядкС ΠΈΡ… ваТности:

  • Π’ API Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° новая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Турналирования Log, которая, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ старой, ΡƒΠΌΠ΅Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния Π² Ρ€Π°Π·Π½Ρ‹Π΅ Π±Π΅ΠΊΠ΅Π½Π΄Ρ‹ ΠΈ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ эти сообщСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ «ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ°».

  • Π ΡƒΠ΄ΠΈΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· ΠΌΠΈΡ€Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Π‘ΠΈ, Errno ΠΈ WinError, использовавшиСся для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, уходят Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅ благодаря ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ IO::Error (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Errno Π½ΠΈΠΊΡ‚ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚).

  • Π£Π±Ρ€Π°Π½Π° автоматичСская подстановка else nil ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° case/when/else. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ случайный пропуск Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ‚ΠΎΠΊ when ΠΏΡ€ΠΈ ΠΌΠ°Ρ‚Ρ‡ΠΈΠ½Π³Π΅ ΠΏΠΎ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ случаям Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ enum’ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΈΠ· Union’Π°. Π’.Π΅., ΠΏΡ€ΠΎΡ‰Π΅ говоря, Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ большС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π΅Π· указания Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ when (when Char) ΠΈΠ»ΠΈ задания else-Π²Π΅Ρ‚ΠΊΠΈ:

a = 1 || ‘x’ || "foo"
case a
when Int32
# …
when String
# …
end

  • ΠžΠΏΡ†ΠΈΡ компилятора disable_overflow большС нСдоступна. Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ &+, &-, &*.

  • Array#fill Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π»Π΅Ρ‚Π°Π΅Ρ‚ быстрСС ΠΏΡƒΠ»ΠΈ, благодаря Π·Π°ΠΌΠ΅Π½Π΅ Ρ‚ΡƒΠΏΠΎΠ²Π°Ρ‚ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½Π° ΠΎΠ΄ΠΈΠ½ простой memset;

  • ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΡˆΠ°Ρ€Π΄ΠΎΠ² (ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²), Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ, ΠΊΠ°ΠΊ это Π½ΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½ΠΎ, shards, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ быстрый ΠΈ эффСктивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ удовлСтворСния зависимостСй Molinillo, подсмотрСнный Π² CocoaPods (Swift) ΠΈ Builder (Ruby).

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° LLVM 10, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΈΠ΄Π΅Π΅ даст Π½Π°ΠΌ Π½Π΅ΠΊΠΈΠΉ рост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, etc.

… ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π½Π° ΠΌΠΎΠΉ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ взгляд, ΠΌΠ΅Π½Π΅Π΅ сущСствСнных ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ.

Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Crystal — это построСнный Π½Π° LLVM язык, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΈΡΠ°Ρ‚ΡŒ прилоТСния ΠΏΠΎΡ€ΠΎΠΉ быстрСС, ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π½Π° Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… «ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ…», ΠΈ ΠΏΡ€ΠΈ этом ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ довольно ΡˆΡƒΡΡ‚Ρ€Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ. На Ρ„ΠΎΠ½Π΅ Golang выдСляСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌ ООП, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΈ ΠΎΡ‡Π΅Π½ΡŒ простым ΠΈ понятным синтаксисом. По своСму Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Nim, Π½ΠΎ ΠΏΡ€ΠΈ этом явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ «Π·Π΄Π΅ΡΡŒ ΠΈ сСйчас», благодаря Ρ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ Π² своём API-арсСналС мноТСство Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΈ качСствСнных инструмСнтов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ языка ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ вСсьма ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru