Izdanje Crystal programskog jezika 1.5

Objavljeno je izdanje programskog jezika Crystal 1.5, čiji programeri pokušavaju kombinirati pogodnost razvoja na jeziku Ruby s visokim performansama aplikacija svojstvenim jeziku C. Sintaksa Crystal-a je bliska Ruby-u, ali nije potpuno kompatibilna s njim, uprkos činjenici da se neki ruby ​​programi pokreću bez prerade. Kod kompajlera je napisan u Crystal-u i distribuiran pod licencom Apache 2.0.

Jezik koristi statičku provjeru tipa, implementiranu bez potrebe za eksplicitnim specificiranjem tipova varijabli i argumenata metoda u kodu. Crystal programi se kompajliraju u izvršne datoteke, s makro evaluacijom i generiranjem koda u vrijeme kompajliranja. U Crystal programima je dozvoljeno povezivanje veza napisanih u C jeziku. Paralelizacija izvršavanja koda vrši se pomoću ključne riječi “spawn” koja vam omogućava da pokrenete pozadinski zadatak u asinhronom modu, bez blokiranja glavne niti, u obliku laganih niti zvanih vlakna (Fiber).

Standardna biblioteka pruža veliki skup generičkih funkcija, uključujući alate za rukovanje CSV, YAML i JSON, komponente za izgradnju HTTP servera i podršku za WebSocket. Tokom procesa razvoja, zgodno je koristiti naredbu „crystal play“, koja generiše web interfejs (localhost:8080 po defaultu) za interaktivno izvršavanje koda na jeziku Crystal.

Glavne promjene:

  • Kompajler je dodao proveru korespondencije između imena argumenata u implementaciji apstraktne metode i u njenoj definiciji. Nepodudaranje imena sada generiše upozorenje: apstraktna klasa FooApstraktna apstraktna def foo(broj : Int32) : Nil krajnja klasa Foo < FooApstraktna def foo(ime : Int32) : Nil p ime end end 6 | def foo(name : Int32) : Nil ^— Upozorenje: pozicioni parametar 'name' odgovara parametru 'number' nadjačane metode FooAbstract#foo(number: Int32), koji ima drugačije ime i može uticati na prolazak imenovanog argumenta
  • Kada dodijelite vrijednost varijable argumentu metode bez tipa, taj argument je sada ograničen tipom te varijable. class Foo @x : Int64 def initialize(x) @x = x # parametar x će biti tipa @x end end
  • Dozvoljeno je dodavanje napomena parametrima metoda ili makroa. def foo(@[MaybeUnused] x); end# OK
  • Dodata podrška za korištenje konstanti kao indeksa i imena u torkama. KEY = "s" foo = {s: "String", n: 0} stavlja foo[KEY].size
  • Dodane nove metode File#delete? u File API za brisanje datoteka i direktorija. i Dir#delete?, koji vraćaju false ako datoteka ili direktorij ne postoje.
  • Ojačana je zaštita metode File.tempfile, koja sada ne dozvoljava nulte znakove u nizovima koji formiraju ime datoteke.
  • Dodata varijabla okruženja NO_COLOR da se onemogući isticanje boja u izlazu kompajlera i interpretatora.
  • Značajno poboljšan rad u režimu tumača.

izvor: opennet.ru

Dodajte komentar