Crystal programmēšanas valodas izlaišana 1.5

Publicēts Crystal 1.5 programmēšanas valodas izlaidums, kura izstrādātāji cenšas apvienot Ruby valodas izstrādes ērtības ar C valodai raksturīgo augsto aplikāciju veiktspēju. Crystal sintakse ir tuva, bet nav pilnībā saderīga ar Ruby, lai gan dažas Ruby programmas darbojas bez izmaiņām. Kompilatora kods ir rakstīts Crystal un tiek izplatīts saskaņā ar Apache 2.0 licenci.

Valoda izmanto statisko tipa pārbaudi, kas ieviesta bez nepieciešamības kodā skaidri norādīt mainīgo veidu un metodes argumentus. Crystal programmas tiek apkopotas izpildāmos failos, un kompilēšanas laikā tiek novērtēti makro un ģenerēts kods. Crystal programmās ir iespējams savienot C valodā rakstītus iesējumus. Koda izpildes paralēlizēšana tiek veikta, izmantojot atslēgvārdu “spawn”, kas ļauj asinhroni palaist fona uzdevumu, nebloķējot galveno pavedienu, vieglu pavedienu veidā, ko sauc par šķiedrām.

Standarta bibliotēka nodrošina lielu kopīgu funkciju kopumu, tostarp rīkus CSV, YAML un JSON apstrādei, komponentus HTTP serveru izveidei un WebSocket atbalstu. Izstrādes procesā ir ērti izmantot komandu “crystal play”, kas ģenerē tīmekļa saskarni (pēc noklusējuma localhost:8080) interaktīvai koda izpildei Crystal valodā.

Galvenās izmaiņas:

  • Kompilators ir pievienojis pārbaudi argumentu nosaukumu atbilstībai abstraktas metodes realizācijā un tās definīcijā. Ja ir nosaukuma neatbilstība, tagad tiek izdots brīdinājums: abstract class FooAbstract abstract def foo(number : Int32) : Nulle end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(nosaukums : Int32) : Nulle ^— Brīdinājums: pozicionālais parametrs 'name' atbilst ignorētās metodes FooAbstract#foo(number : Int32) parametram 'number', kam ir cits nosaukums un kas var ietekmēt nosaukto argumentu nodošanu.
  • Piešķirot argumentu mainīgā vērtībai netipizētai metodei, arguments tagad ir ierobežots ar šī mainīgā tipa veidu. class Foo @x : Int64 def inicialize(x) @x = x # parametrs x tiks ierakstīts @x beigu beigas
  • Ļauj pievienot anotācijas metožu vai makro parametriem. def foo(@[VarbūtNelietots] x); beigas # Labi
  • Pievienots atbalsts konstantu izmantošanai kā indeksiem un nosaukumiem korežās. KEY = "s" foo = {s: "String", n: 0} ievieto foo[KEY].size
  • Failu API ir pievienotas jaunas File#delete? metodes failu un direktoriju dzēšanai. un Dir#delete?, kas atgriež false, ja trūkst faila vai direktorija.
  • Ir pastiprināta metodes File.tempfile aizsardzība, kas tagad nepieļauj nulles rakstzīmes rindās, kas veido faila nosaukumu.
  • Pievienots vides mainīgais NO_COLOR, kas atspējo krāsu izcelšanu kompilatora un tulka izvadē.
  • Darbs tulka režīmā ir ievērojami uzlabots.

Avots: opennet.ru

Pievieno komentāru