αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Crystal 1.5

αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Crystal 1.5 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž– αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆ Ruby αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž—αžΆαžŸαžΆ C αŸ” αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹ Crystal αž‚αžΊαž“αŸ…αž‡αž·αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž†αž”αž‚αŸ’αž“αžΆαž–αŸαž‰αž›αŸαž‰αž‡αžΆαž˜αž½αž™ Ruby αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Ruby αžαŸ’αž›αŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž€αŸαžŠαŸ„αž™αŸ” αž›αŸαžαž€αžΌαžŠαž…αž„αž€αŸ’αžšαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆαž‚αŸ’αžšαžΈαžŸαŸ’αžαžΆαž›αŸ‹ αž“αž·αž„αž…αŸ‚αž€αž…αžΆαž™αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ Apache 2.0 αŸ”

αž—αžΆαžŸαžΆαž”αŸ’αžšαžΎαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž‹αž·αžαž·αžœαž“αŸ’αž αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž’αžαŸαžš αž“αž·αž„αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž€αŸ’αž“αž»αž„αž€αžΌαžŠαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαžΈαžŸαŸ’αžαžΆαž›αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž˜αŸ‰αžΆαž€αŸ’αžšαžΌ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαž“αŸ…αž–αŸαž›αž…αž„αž€αŸ’αžšαž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Crystal αžœαžΆαž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž€αžΆαžšαž…αž„αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ C αŸ” αž—αžΆαž–αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΌαžŠαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ "αž”αž„αŸ’αž€αžΎαž" αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž·αž…αŸ’αž…αž€αžΆαžšαž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αžŠαŸ„αž™αž’αžŸαž˜αž€αžΆαž›αžŠαŸ„αž™αž˜αž·αž“αžšαžΆαžšαžΆαŸ†αž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž˜αŸαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαžαŸ’αžŸαŸ‚αžŸαŸ’αžαžΎαž„αžŠαŸ‚αž›αž αŸ…αžαžΆαžŸαžšαžŸαŸƒαŸ”

αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŸαŸ’αžŠαž„αŸ‹αžŠαžΆαžšαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžŸαŸ†αžŽαž»αŸ†αž˜αž»αžαž„αžΆαžšαž‘αžΌαž‘αŸ…αžŠαŸαž’αŸ†αž˜αž½αž™ αžšαž½αž˜αž‘αžΆαŸ†αž„αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš CSV YAML αž“αž·αž„ JSON αžŸαž˜αžΆαžŸαž’αžΆαžαž»αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ HTTP αž“αž·αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš WebSocket αŸ” αž€αŸ†αž‘αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ "αž›αŸαž„αž‚αŸ’αžšαžΈαžŸαŸ’αžαžΆαž›αŸ‹" αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžš (αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“: 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹