Megtörtént a Crystal 1.0 programozási nyelv kiadása. A kiadás az első jelentős kiadás, amely 8 év munkáját összegezte, és a nyelv stabilizálódását és a munkaprojektekben való használatra való készségét jelzi. Az 1.x ág fenntartja a visszamenőleges kompatibilitást, és biztosítja, hogy a nyelvben vagy a szabványos könyvtárban ne legyenek olyan változások, amelyek negatívan befolyásolják a meglévő kód felépítését és működését.
Az 1.0.y kiadásai csak kisebb javításokat tartalmaznak majd, míg az 1.x.0 verziók új funkciókat és jelentős változtatásokat vezetnek be, miközben megőrzik a kódkompatibilitást. Az új ötleteket és a potenciálisan inkompatibilis változtatásokat egy külön ágban fejlesztik, amely később a Crystal 2.0 kiadás alapját képezi majd. Néhány Crystal 1.0 funkció előzetesnek van deklarálva, és bár jelen vannak az 1.0 ágban, nem terjednek ki rájuk a hivatalos támogatás. Ezek a funkciók magukban foglalják a többszálú működést, a platformtámogatást és a... Windows, ARM processzorokkal rendelkező rendszereken használható.
Emlékezzünk vissza, hogy a Crystal fejlesztői megpróbálják ötvözni a Ruby nyelvű 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, bár néhány Ruby program módosítás nélkül fut. 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, a makrók kiértékelése és a kód generálása a fordítási időben történik. A Crystal programokban lehetőség van C nyelven írt kötések összekapcsolására. 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 aszinkron futtatását a főszál blokkolása nélkül, könnyű szálak, úgynevezett szálak 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 sorok indexelt hozzáférést tesznek lehetővé különböző típusú elemekhez, mivel a fordító tudja, hogy az egyes elemek milyen típusúak. Például: tuple = {1, "hello", 'x'} v = tuple[0..1] # a következőt adja vissza: {1, "hello"} typeof(v) # => Tuple(Int32, String)
- A karakterlánc- és karakterliterálok nem teszik lehetővé a helyettesítő rövidítések használatát a Unicode escape-szekvenciákban, például "\uD834". Tetszőleges értékek kódolásához használja a "\x" jelölést.
- A szabványos könyvtárban a korábban elavultként megjelölt definíciók, makrók és metódusok nagy része eltávolításra került. Beleértve a Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill metódusokat stb.
- A getter és tulajdonság makrókhoz most meg kell adni a visszatérési típust.
- Az alapértelmezett kerekítési módszer TIES_EVEN-re módosult ("banki kerekítés", a legközelebbi egész számra, határhelyzeteknél pedig a legközelebbi páros számra). A RoundingMode paraméter hozzáadásra került a Number#round mezőhöz, amely lehetővé teszi a kerekítési mód kiválasztását. Az elérhető módszerek a következők: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- Az Enumerable#flat_map és az Iterator#flat_map vegyes típusú elemekkel működik a gyűjteményekben.
- Az Enum szekvenciák sorozatosítása most aláhúzás karakterlánc-reprezentációkat használ.
- Az XML modulban definiált típusok a struct használatról átkerültek az osztályba.
- Biztonsági okokból a sütik nevének dekódolása, valamint a sütik értékeinek kódolása és dekódolása megszűnt (az átkódolás mostantól a keretrendszerek és alkalmazások feladata). A HTTP::Cookies.from_headers metódust két változatra osztották a következőhöz: szervereket és az ügyfelek.
Forrás: opennet.ru
