Izdana je verzija programski jezik Crystal 1.0. Ovo izdanje označava prvi značajan izlazak, koji sažima 8 godina rada i označava stabilizaciju jezika te spremnost za korištenje u poslovnim projektima. U grani 1.x održavat će se unatradna kompatibilnost, a osigurava se odsustvo promjena u jeziku i standardnoj biblioteci koje bi negativno utjecale na izgradnju i funkcioniranje postojećeg koda.
Izdanja 1.0.y uključivat će samo ispravke grešaka, dok će verzije 1.x.0 nuditi nove funkcionalnosti i značajne promjene, pri čemu će se zadržati kompatibilnost s kodom. Nove ideje i potencijalno nesuglasne promjene razvijat će se u odvojenoj grani, na temelju koje će kasnije biti formirano izdanje Crystal 2.0. Neke funkcionalnosti Crystal 1.0 proglašene su kao preliminarne i, unatoč njihovom prisustvu u grani 1.0, ne podliježu službenoj podršci. Među tim mogućnostima su monoprocesorska podrška, rad na Windows platformi i korištenje na sustavima s ARM procesorima.
Podsjetimo da razvijači Crystala pokušavaju kombinirati pogodnosti programiranja na jeziku Ruby s visokom izvedbom aplikacija svojstvenih jeziku C. Sintaksa Crystala bliska je jeziku Ruby, ali nije potpuno kompatibilna s njim, unatoč tome što se neki ruby programi izvršavaju bez prerade. Kod kompajlera napisan je na jeziku Crystal i distribuira se pod Apache 2.0 licenci.
U jeziku se koristi statička provjera tipova, implementirana bez potrebe za izričitom naznakom tipova varijabli i argumenata metoda u kodu. Programi napisani u Crystal-u kompajliraju se u izvršne datoteke, uz izračun makroa i generaciju koda tijekom kompilacije. U programima na jeziku Crystal dopušteno je uključivanje veza napisanih na jeziku C. Paralelizacija izvršenja koda provodi se pomoću ključne riječi "spawn", koja omogućava pokretanje pozadinske zadaće u asinkronom režimu, bez blokiranja glavne niti, u obliku laganih niti koje se nazivaju fibere (Fiber).
Standardna biblioteka nudi širok spektar standardnih funkcija, uključujući alate za obradu CSV, YAML i JSON, komponente za izradu HTTP servera i podršku za WebSocket. Tijekom razvoja, korisno je koristiti naredbu «crystal play» koja formira web sučelje (po zadanoj postavci localhost:8080) za interaktivno izvršavanje koda u Crystal jeziku.
Glavne promjene:
- U tuple-ima je dopušteno indeksiranje elemenata različitih tipova, jer kompajler ima informacije o tipu svakog elementa. Na primjer: tuple = {1, «hello», ‘x’} v = tuple[0..1] # rezultirat će {1, «hello»} typeof(v) # => Tuple(Int32, String)
- U literalima stringova i znakova zabrani se korištenje surrogatnih skraćenica u escape sekvencama Unicode, poput «\uD834». Za kodiranje proizvoljnih vrijednosti treba koristiti notaciju «\x ».
- U standardnoj biblioteci uklonjena je velika količina definicija, makroa i metoda koji su ranije označeni kao zastarjeli. Uključujući metode Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill itd.
- U getter i property makroima sada je obavezno navesti vraćeni tip.
- Zadana metoda za zaokruživanje promijenjena je na TIES_EVEN («bankarsko zaokruživanje», do najbližeg cijelog broja, a za granične situacije do najbližeg parnog broja). U Number#round dodan je parameter RoundingMode koji omogućava odabir metode zaokruživanja. Među dostupnim metodama su: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- U kolekcijama je omogućena funkcionalnost Enumerable#flat_map i Iterator#flat_map s elementima miješanih tipova.
- Prilikom serijalizacije sekvenci Enum sada se koriste prikazi u obliku stringova s podcrtačima.
- Tipovi definirani u XML modulima prešli su s korištenja struct na class.
- Iz sigurnosnih razloga zaustavljeno je dekodiranje imena Cookie, kao i kodiranje i dekodiranje vrijednosti Cookie (prekodiranje je prebačeno na okvire i aplikacije). Metoda HTTP::Cookies.from_headers podijeljena je na dva varijante za poslužitelja i klijente.
Izvor: opennet.ru
