Izdanje programskog jezika Crystal 1.5

Objavljeno je izdanje programskog jezika Crystal 1.5, čiji programeri pokušavaju kombinirati pogodnost razvoja u jeziku Ruby s visokom izvedbom aplikacije svojstvenom jeziku C. Sintaksa Crystala je bliska, ali nije potpuno kompatibilna s Rubyjem, unatoč činjenici da se neki ruby ​​programi pokreću bez prerade. Kod prevoditelja napisan je u Crystalu i distribuiran pod licencom Apache 2.0.

Jezik koristi statičku provjeru tipa, implementiranu bez potrebe za eksplicitnim određivanjem vrsta varijabli i argumenata metode u kodu. Crystal programi se kompajliraju u izvršne datoteke, s makro procjenom i generiranjem koda tijekom kompilacije. U programima Crystal dopušteno je spajanje veza napisanih u C jeziku. Paralelizacija izvršavanja koda provodi se pomoću ključne riječi "spawn", koja vam omogućuje pokretanje pozadinskog zadatka u asinkronom načinu rada, bez blokiranja glavne niti, u obliku laganih niti koje se nazivaju vlakna (Fiber).

Standardna biblioteka pruža veliki skup generičkih funkcija, uključujući alate za rukovanje CSV-om, YAML-om i JSON-om, komponente za izgradnju HTTP poslužitelja i podršku za WebSocket. Tijekom procesa razvoja zgodno je koristiti naredbu “crystal play” koja generira web sučelje (localhost:8080 prema zadanim postavkama) za interaktivno izvršavanje koda u jeziku Crystal.

Velike promjene:

  • Prevoditelj je dodao provjeru podudarnosti između imena argumenata u implementaciji apstraktne metode i u njezinoj definiciji. Neusklađenost imena sada generira upozorenje: apstraktna klasa FooAbstract apstraktna def foo(broj: Int32) : Nil end class Foo < FooAbstract def foo(name: Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— Upozorenje: pozicijski parametar 'name' odgovara parametru 'number' nadjačane metode FooAbstract#foo(number : Int32), koja ima drugačiji naziv i može utjecati na prosljeđivanje imenovanog argumenta
  • Kada dodijelite vrijednost varijable argumentu netipizirane metode, taj je argument sada ograničen tipom te varijable. class Foo @x : Int64 def initialize(x) @x = x # parametar x bit će tipa @x end end
  • Dopušteno je dodavanje komentara parametrima metoda ili makronaredbi. def foo(@[Moždanekorišteno] x); kraj#OK
  • Dodana podrška za korištenje konstanti kao indeksa i imena u torkama. KEY = "s" foo = {s: "String", n: 0} stavlja foo[KEY].size
  • Dodane su nove metode File#delete? File API-ju za brisanje datoteka i direktorija. i Dir#delete?, koji vraćaju false ako datoteka ili direktorij ne postoji.
  • Ojačana zaštita metode File.tempfile, koja sada ne dopušta null znakove u nizovima koji tvore naziv datoteke.
  • Dodana je varijabla okruženja NO_COLOR za onemogućavanje isticanja boja u izlazu prevoditelja i tumača.
  • Značajno poboljšan rad u načinu tumača.

Izvor: opennet.ru

Dodajte komentar