Prezentácia programovacieho jazyka Crystal 1.0 sa uskutočnila. Tento vydanie sa považuje za prvé významné vydanie, ktoré zhrnulo osem rokov práce a oznamuje stabilizáciu jazyka a pripravenosť na použitie v pracovných projektoch. Vo vetve 1.x bude zachovaná spätná kompatibilita a garantuje sa absencia zmien v jazyku a štandardnej knižnici, ktoré by negatívne ovplyvnili kompiláciu a fungovanie existujúceho kódu.
Vydania 1.0.y budú obsahovať len opravné úpravy, zatiaľ čo verzie 1.x.0 ponuknú novú funkcionalitu a významné zmeny, pričom si zachovajú kompatibilitu s kódom. Nové nápady a potenciálne nekompatibilné zmeny budú vyvíjané v samostatnej vetve, na základe ktorej bude neskôr vytvorené vydanie Crystal 2.0. Niektoré funkcie Crystal 1.0 sú vyhlásené za predbežné a hoci sú zahrnuté vo vetve 1.0, nezlučujú sa s oficiálnou podporou. Medzi takéto funkcie patrí jednovláknovosť, fungovanie na platforme Windows a používanie na systémoch s procesormi ARM.
Pripomíname, že vývojári Crystal sa snažia spojiť pohodlie vývoja v jazyku Ruby s vysokým výkonom aplikácií typickým pre jazyk C. Syntax Crystal je podobná jazyku Ruby, ale nie je s ním úplne kompatibilná, aj keď niektoré ruby programy fungujú bez úprav. Kód kompilátora je napísaný v jazyku Crystal a distribuuje sa pod licenciou Apache 2.0.
Jazyk používa statickú kontrolu typov, implementovanú bez potreby explicitného určenia typov premenných a argumentov metód v kóde. Programy v Crystal sa kompilujú do spustiteľných súborov, pričom sa vypočítavajú makrá a generuje kód počas kompilácie. V programoch v jazyku Crystal je povolené pripojenie viazaní napísaných v jazyku C. Paralelizácia vykonávania kódu sa uskutočňuje pomocou kľúčového slova „spawn“, ktoré umožňuje spustiť pozadovú úlohu asynchrónne bez blokovania hlavného vlákna, vo forme ľahkých vlákien nazývaných vlákna (Fiber).
Štandardná knižnica poskytuje širokú škálu typových funkcií, vrátane prostriedkov na spracovanie CSV, YAML a JSON, komponentov na vytváranie HTTP serverov a podporu WebSocket. Počas vývoja je pohodlné používať príkaz „crystal play“, ktorý vytvára webové rozhranie (predvolene localhost:8080) na interaktívne vykonávanie kódu v jazyku Crystal.
Hlavné zmeny:
- V n-ticiach je povolený indexovaný prístup k prvkom rôznych typov, pretože kompilátor má informácie o tom, akého typu je každý prvok. Napríklad: tuple = {1, „hello“, ‘x’} v = tuple[0..1] # vyprodukuje {1, „hello“} typeof(v) # => Tuple(Int32, String)
- V reťazcových a znakových literáloch je zakázané používať surrogate skratky v escape sekvenciách Unicode, ako napríklad „\uD834“. Pre kódovanie ľubovoľných hodnôt je potrebné použiť notáciu „\x“.
- V štandardnej knižnici bola odstránená veľká časť definícií, makier a metód, ktoré boli skôr označené ako zastarané. Vrátane metód Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill a ďalších.
- V makrách getter a property je teraz povinné uviesť návratový typ.
- Predvolená metóda zaokrúhľovania bola zmenená na TIES_EVEN („bankárske zaokrúhľovanie“, na najbližšie celé číslo, a pre hraničné situácie na najbližšie párne číslo). Do Number#round bol pridaný parameter RoundingMode, ktorý umožňuje vybrať metódu zaokrúhľovania. Medzi dostupné metódy patrí: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- V kolekciách je zabezpečená práca Enumerable#flat_map a Iterator#flat_map s prvkami zmiešaných typov.
- Pri serializácii sekvencií Enum sa teraz používajú reprezentácie v podobe reťazcov s podčiarkovačom.
- Typy definované v module XML prešli z použitia struct na class.
- Z bezpečnostných dôvodov bolo zastavené dekódovanie názvov Cookie, ako aj kódovanie a dekódovanie hodnôt Cookie (rekódovanie bolo prenesené na frameworky a aplikácie). Metóda HTTP::Cookies.from_headers bola rozdelená na dve varianty pre serverov a klientov.
Zdroj: opennet.ru
