A Crystal programozási nyelv kiadása 1.5

Megjelent a Crystal 1.5 programozási nyelv kiadása, melynek fejlesztői igyekeznek ötvözni a Ruby nyelven való fejlesztés kényelmét a C nyelvben rejlő magas alkalmazásteljesítménnyel. A Crystal szintaxisa közel áll a Rubyhoz, de nem teljesen kompatibilis vele, annak ellenére, hogy egyes rubinprogramok átdolgozás nélkül futnak. A fordítókód Crystal nyelven íródott, és az Apache 2.0 licenc alatt kerül terjesztésre.

A nyelv statikus típusellenőrzést használ, anélkül, hogy kifejezetten meg kellene adni a változók típusát és a metódus argumentumait a kódban. A Crystal programokat végrehajtható fájlokba fordítják le, makróértékeléssel és fordítási időben kódgenerálással. A Crystal programokban megengedett a C nyelven írt kötések összekapcsolása. A kódvégrehajtás párhuzamosítása a "spawn" kulcsszó használatával történik, amely lehetővé teszi egy háttérfeladat futtatását aszinkron módban, a főszál blokkolása nélkül, könnyű szálak, úgynevezett fibers (Fiber) formájában.

A szabványos könyvtár általános funkciók széles készletét kínálja, beleértve a CSV, a YAML és a JSON kezelésére szolgáló eszközöket, a HTTP-kiszolgálók építéséhez szükséges összetevőket és a WebSocket támogatást. A fejlesztési folyamat során kényelmesen használható a „crystal play” parancs, amely webes felületet (alapértelmezés szerint localhost:8080) generál az interaktív kódvégrehajtáshoz Crystal nyelven.

Nagy változások:

  • A fordító kiegészítette az argumentumok nevei közötti megfelelés ellenőrzését az absztrakt metódus megvalósításában és annak meghatározásában. A név eltérése most figyelmeztetést generál: absztrakt osztály FooAbsztrakt absztrakt def foo(szám : Int32) : Null end class Foo < FooAbstract def foo(név : Int32) : Null p név vége 6 | def foo(név : Int32) : Nil ^— Figyelmeztetés: a 'name' pozícióparaméter a FooAbstract#foo(szám : Int32) felülbírált metódus 'szám' paraméterének felel meg, amelynek más neve van, és hatással lehet a névvel ellátott argumentum átadására
  • Amikor egy változó értékét hozzárendeli egy nem típusos metódus argumentumához, akkor ezt az argumentumot a változó típusa korlátozza. class Foo @x : Int64 def inicializálás(x) @x = x # Az x paraméter @x típusú lesz end end
  • A metódusok vagy makrók paramétereihez megjegyzések hozzáadása megengedett. def foo(@[TalánUnused] x); vége #OK
  • Hozzáadott támogatás a konstansok indexként és névként való használatához a sorokban. KEY = "s" foo = {s: "String", n: 0} a foo[KEY].size értéket helyezi el
  • Új File#delete? metódusok hozzáadása a File API-hoz fájlok és könyvtárak törléséhez. és Dir#delete?, amelyek false értéket adnak vissza, ha a fájl vagy könyvtár nem létezik.
  • Megerősítette a File.tempfile metódus védelmét, amely mostantól nem engedélyezi a null karaktereket a fájlnevet alkotó karakterláncokban.
  • Hozzáadott NO_COLOR környezeti változó a színkiemelés letiltásához a fordító és az értelmező kimenetében.
  • Jelentősen javult a munka tolmács módban.

Forrás: opennet.ru

Hozzászólás