Bylo uvolněno vydání programovacího jazyka Crystal 1.0. Uvolnění bylo označeno jako první významné vydání, které shrnulo 8 let práce a znamenalo stabilizaci jazyka a jeho připravenost pro použití v pracovních projektech. Větve 1.x bude podporovat zpětnou kompatibilitu a bude zajištěno, že nebudou provedeny žádné změny v jazyce a standardní knihovně, které by negativně ovlivnily sestavení a chod existujícího kódu.
Vydání 1.0.y budou zahrnovat pouze opravné opravy, zatímco verze 1.x.0 budou nabízet nové funkce a významné změny, přičemž zachovají kompatibilitu s kódem. Nové nápady a potenciálně nekompatibilní změny budou vyvíjeny v samostatné větvi, na jejímž základě bude následně vytvořeno vydání Crystal 2.0. Některé funkce Crystal 1.0 jsou označeny jako předběžné a navzdory tomu, že jsou ve větvi 1.0, nepodléhají oficiální podpoře. Mezi těmito funkcemi je monothreading, podpora platformy Windows a použití na systémech s procesory ARM.
Připomínáme, že vývojáři Crystal se snaží zkombinovat pohodlí programování v jazyce Ruby s vysokým výkonem aplikací, který je charakteristický pro jazyk C. Syntaxe Crystal je blízká jazyku Ruby, ale není s ním zcela kompatibilní, ačkoli některé ruby programy se provádějí bez úprav. Kód kompilátoru je napsán v jazyce Crystal a je distribuován pod licencí Apache 2.0.
Jazyk používá statickou kontrolu typů, která je implementována bez nutnosti výslovného uvedení typů proměnných a argumentů metod v kódu. Programy napsané v Crystal jsou kompilovány do spustitelných souborů, s vyhodnocením maker a generováním kódu během kompilace. V programech napsaných v jazyce Crystal je povoleno připojení vazeb napsaných v jazyce C. Paralelizace vykonávání kódu se provádí pomocí klíčového slova „spawn“, které umožňuje spustit pozadí úkolu v asynchronním režimu, aniž by blokovalo hlavní vlákno, ve formě lehkých vláken nazývaných fibery.
Standardní knihovna poskytuje širokou škálu typických funkcí, včetně nástrojů pro zpracování CSV, YAML a JSON, komponentů pro vytváření HTTP serverů a podporu WebSocket. Během vývoje je užitečné používat příkaz „crystal play“, který vytváří webové rozhraní (výchozí localhost:8080) pro interaktivní vykonávání kódu v jazyce Crystal.
Hlavní změny:
- V tuplech je povolené indexované přístupy k prvkům různých typů, protože kompilátor má informace o tom, jaký typ každý prvek má. Například: tuple = {1, „hello“, ‘x’} v = tuple[0..1] # vrátí {1, „hello“} typeof(v) # => Tuple(Int32, String)
- Ve stringových a znakových literálech je zakázáno používat zástupné zkracování v escape sekvencích Unicode, jako například „\uD834“. Pro kódování libovolných hodnot byste měli používat notaci „\x“.
- Ve standardní knihovně bylo odstraněno velké množství definic, makros a metod, které byly dříve označeny jako zastaralé. Včetně metod Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill a dalších.
- V makrech getter a property je nyní povinné uvádět vracený typ.
- Výchozí metoda zaokrouhlování byla změněna na TIES_EVEN („bankéřské zaokroulení“, na nejbližší celé číslo a pro hraniční situace na nejbližší sudé číslo). Do Number#round byl přidán parametr RoundingMode, který umožňuje vybrat metodu zaokroulování. Mezi dostupnými metodami jsou: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- V kolekcích je zajištěna funkčnost Enumerable#flat_map a Iterator#flat_map s prvky smíšených typů.
- Při serializaci sekvencí Enum se nyní používají reprezentace ve formě řetězců se podtržítkem.
- Typy definované v modulu XML byly převedeny z použití struct na class.
- Z bezpečnostních důvodů bylo přerušeno dekódování názvů Cookie, stejně jako kódování a dekódování hodnot Cookie (překódování bylo převedeno na ramena frameworků a aplikací). Metoda HTTP::Cookies.from_headers byla rozdělena na dvě verze pro servery a klienty.
Zdroj: opennet.ru
