Izšel je programski jezik Crystal 1.0. Izdaja je označena kot prva pomembna izdaja, ki je povzela 8 let dela in označila stabilizacijo jezika ter njegovo pripravljenost za uporabo v delovnih projektih. Podružnica 1.x bo podpirala združljivost za nazaj in zagotavljala, da v jeziku ali standardni knjižnici ni sprememb, ki bi negativno vplivale na gradnjo in delovanje obstoječe kode.
Izdaje 1.0.y bodo vključevale le manjše popravke, medtem ko bodo različice 1.x.0 uvedle nove funkcionalnosti in pomembne spremembe, hkrati pa bodo ohranile združljivost kode. Nove ideje in potencialno nezdružljive spremembe bodo razvite v ločeni veji, ki bo kasneje predstavljala osnovo za izdajo Crystal 2.0. Nekatere funkcije Crystal 1.0 so razglašene za predhodne in kljub temu, da so prisotne v veji 1.0, niso zajete v uradni podpori. Te funkcije vključujejo večnitnost, podporo za platformo in Windows, uporaba v sistemih s procesorji ARM.
Spomnimo se, da razvijalci Crystal poskušajo združiti udobje razvoja v jeziku Ruby z visoko zmogljivostjo aplikacij, ki je značilna za jezik C. Crystalova sintaksa je blizu Rubyju, vendar ni povsem združljiva z njim, čeprav nekateri programi Ruby delujejo brez sprememb. Koda prevajalnika je napisana v Crystalu in se distribuira pod licenco Apache 2.0.
Jezik uporablja statično preverjanje tipa, implementirano brez potrebe po izrecnem podajanju vrst spremenljivk in argumentov metode v kodi. Programi Crystal so prevedeni v izvršljive datoteke z ovrednotenimi makri in ustvarjeno kodo med prevajanjem. V programih Crystal je mogoče povezovati vezave, napisane v C-ju. Paralelizacija izvajanja kode se izvaja s ključno besedo “spawn”, ki vam omogoča, da opravilo v ozadju izvajate asinhrono, brez blokiranja glavne niti, v obliki lahkih niti, imenovanih vlakna.
Standardna knjižnica ponuja velik nabor generičnih funkcij, vključno z orodji za obdelavo CSV, YAML in JSON, komponentami za gradnjo strežnikov HTTP in podporo za WebSocket. Med razvojnim procesom je priročno uporabiti ukaz “crystal play”, ki generira spletni vmesnik (localhost:8080 privzeto) za interaktivno izvajanje kode v jeziku Crystal.
Večje spremembe:
- Tuples omogočajo indeksiran dostop do elementov različnih tipov, ker prevajalnik ve, katere vrste je vsak element. Na primer: tuple = {1, “hello”, 'x'} v = tuple[0..1] # vrne {1, “hello”} typeof(v) # => Tuple(Int32, String)
- Nizovni in znakovni literali ne dovoljujejo uporabe nadomestnih okrajšav v ubežnih zaporedjih Unicode, kot je »\uD834«. Za kodiranje poljubnih vrednosti uporabite zapis "\x".
- V standardni knjižnici je bil odstranjen velik del definicij, makrov in metod, ki so bili prej označeni kot zastareli. Vključno z metodami Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill itd.
- Makra pridobivanja in lastnosti zdaj zahtevajo, da je podana vrnjena vrsta.
- Privzeta metoda zaokroževanja je bila spremenjena v TIES_EVEN ("bankirjevo zaokroževanje", na najbližje celo število in za mejne situacije na najbližje sodo število). V Number#round je bil dodan parameter RoundingMode, ki vam omogoča izbiro načina zaokroževanja. Razpoložljive metode vključujejo: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- Enumerable#flat_map in Iterator#flat_map delujeta z elementi mešanih vrst v zbirkah.
- Serializacija zaporedij Enum zdaj uporablja predstavitve nizov s podčrtajem.
- Tipi, definirani v modulu XML, so bili premaknjeni iz uporabe struct v razred.
- Zaradi varnostnih razlogov je bilo dekodiranje imen piškotkov ter kodiranje in dekodiranje vrednosti piškotkov ukinjeno (prekodiranje je zdaj v pristojnosti ogrodja in aplikacij). Metoda HTTP::Cookies.from_headers je bila razdeljena na dve različici za strežniki in stranke.
Vir: opennet.ru
