S-a lansat versiunea 1.0 a limbajului de programare Crystal. Această lansare este marcată ca fiind prima lansare semnificativă, care a sintetizat 8 ani de muncă și a consacrat stabilizarea limbajului, pregătit pentru utilizarea în proiecte reale. În ramura 1.x va fi menținută compatibilitatea înapoi și se garantează absența modificărilor în limbaj și biblioteca standard, care ar putea afecta compilarea și funcționarea codului existent.
Versiunile 1.0.y vor include doar corecturi de erori, în timp ce versiunile 1.x.0 vor oferi noi funcționalități și modificări semnificative, păstrând totodată compatibilitatea cu codul. Noi idei și posibile modificări incompatibile vor fi dezvoltate într-o ramură separată, pe baza căreia va fi formulată ulterior o versiune Crystal 2.0. Unele funcționalități ale Crystal 1.0 sunt declarate ca fiind preliminare și, în ciuda prezenței lor în ramura 1.0, nu beneficiază de suport oficial. Printre aceste funcționalități se numără monofiberalitatea, funcționarea pe platforma Windows și utilizarea pe sisteme cu procesoare ARM.
Amintim că dezvoltatorii Crystal încearcă să combine ușurința de dezvoltare din limbajul Ruby cu performanța ridicată a aplicațiilor, caracteristică limbajului C. Sintaxa Crystal este apropiată de limbajul Ruby, dar nu este complet compatibilă cu acesta, deși unele programe Ruby se pot executa fără modificări. Codul compilatorului este scris în limbajul Crystal și este distribuit sub licența Apache 2.0.
În limbaj se aplică verificarea statică a tipurilor, implementată fără a necesita specificarea explicită a tipurilor variabilelor și argumentelor metodelor în cod. Programele scrise în Crystal sunt compilate în fișiere executabile, cu evaluarea macrourilor și generarea codului în timpul compilării. În programele scrise în Crystal este permisă conectarea unor binding-uri scrise în limbajul C. Paralele execuției codului se realizează cu ajutorul cuvântului cheie „spawn”, care permite lansarea unei sarcini de fundal în mod asincron, fără a bloca firul principal, sub forma de fire ușoare, numite fibre (Fiber).
Biblioteca standard oferă un set mare de funcții standard, inclusiv instrumente pentru procesarea CSV, YAML și JSON, componente pentru crearea serverelor HTTP și suport pentru WebSocket. În timpul dezvoltării, este convenabil să folosiți comanda „crystal play”, care generează o interfață web (implicite localhost:8080) pentru executarea interactivă a codului în limba Crystal.
Modificări principale:
- În tupluri este permis accesul indexat la elemente de tipuri diferite, deoarece compilatorul are informații despre tipul fiecărui element. De exemplu: tuple = {1, „hello”, ‘x’} v = tuple[0..1] # va returna {1, „hello”} typeof(v) # => Tuple(Int32, String)
- În literalurile de șiruri și caractere este interzisă utilizarea prescurtărilor surrogate în secvențele escape Unicode, cum ar fi „\uD834”. Pentru codificarea valorilor arbitrare, ar trebui utilizată notația „\x”.
- În biblioteca standard a fost eliminată o mare parte de definiții, macro-uri și metode care erau anterior marcate ca fiind învechite. Inclusiv metode precum Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill etc.
- În macro-urile getter și property este acum obligatorie specificarea tipului de returnare.
- Metoda de rotunjire implicită a fost schimbată în TIES_EVEN („rotunjire de bancar”, către cel mai apropiat întreg, iar pentru cazurile limită către cel mai apropiat număr par). La Number#round a fost adăugat parametrul RoundingMode, care permite alegerea metodei de rotunjire. Printre metodele disponibile se numără: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- În colecții este asigurată funcționarea Enumerable#flat_map și Iterator#flat_map cu elemente de tipuri mixte.
- La serializarea secvențelor Enum acum se utilizează reprezentarea sub formă de șiruri cu underscore.
- Tipurile definite în modulul XML au fost convertite de la struct la class.
- Din motive de securitate, decodarea numelui Cookie a fost oprită, precum și codificarea și decodificarea valorilor Cookie (recodificarea a fost transferată în sarcina framework-urilor și aplicațiilor). Metoda HTTP::Cookies.from_headers a fost împărțită în două variante pentru servere și clienți.
Sursa: opennet.ro
