Izdaja programskega jezika Crystal 1.5

Objavljena je bila izdaja programskega jezika Crystal 1.5, katerega razvijalci poskušajo združiti udobje razvoja v jeziku Ruby z visoko zmogljivostjo aplikacij, ki je značilna za jezik C. Sintaksa Crystal je blizu, vendar ni popolnoma združljiva z Rubyjem, kljub dejstvu, da nekateri rubyjevi programi delujejo brez predelave. 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 oceno makra in generiranjem kode med prevajanjem. V programih Crystal je dovoljeno povezovanje vezav, napisanih v jeziku C. Paralelizacija izvajanja kode se izvaja s ključno besedo “spawn”, ki omogoča zagon opravila v ozadju v asinhronem načinu, brez blokiranja glavne niti, v obliki lahkih niti, imenovanih vlakna (Fiber).

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:

  • Prevajalnik je dodal preverjanje ujemanja med imeni argumentov v izvedbi abstraktne metode in njeni definiciji. Neujemanje imen zdaj ustvari opozorilo: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— Opozorilo: pozicijski parameter 'name' ustreza parametru 'number' preglasene metode FooAbstract#foo(number : Int32), ki ima drugačno ime in lahko vpliva na posredovanje imenovanih argumentov
  • Ko dodelite vrednost spremenljivke argumentu netipizirane metode, je ta argument zdaj omejen z vrsto te spremenljivke. class Foo @x : Int64 def initialize(x) @x = x # parameter x bo tipa @x end end
  • Dovoljeno je dodajanje opomb parametrom metod ali makrov. def foo(@[MogočeNeuporabljeno] x); konec#OK
  • Dodana podpora za uporabo konstant kot indeksov in imen v tulpih. KEY = "s" foo = {s: "String", n: 0} postavi foo[KEY].size
  • V API za datoteke so bile dodane nove metode File#delete? za brisanje datotek in imenikov. in Dir#delete?, ki vrneta false, če datoteka ali imenik ne obstaja.
  • Okrepljena zaščita metode File.tempfile, ki zdaj ne dovoljuje ničelnih znakov v nizih, ki tvorijo ime datoteke.
  • Dodana spremenljivka okolja NO_COLOR za onemogočanje barvnega označevanja v izhodu prevajalnika in tolmača.
  • Bistveno izboljšano delo v načinu tolmača.

Vir: opennet.ru

Dodaj komentar