ĂshtĂ« publikuar versioni 1.5 i gjuhĂ«s sĂ« programimit Crystal, e cila pĂ«rpiqet tĂ« kombinojĂ« lehtĂ«sinĂ« e zhvillimit nĂ« gjuhĂ«n Ruby me performancĂ«n e lartĂ« tĂ« aplikacioneve qĂ« i Ă«shtĂ« tipike gjuhĂ«s C. Sintaksa e Crystal-it Ă«shtĂ« e ngjashme me atĂ« tĂ« Ruby-t, por nuk Ă«shtĂ« plotĂ«sisht e pĂ«rshtatshme me tĂ«, megjithatĂ« disa programe ruby ekzekutohen pa ndonjĂ« ndryshim. Kodi i kompajlerit Ă«shtĂ« shkruar nĂ« gjuhĂ«n Crystal dhe shpĂ«rndahet nĂ«n licencĂ«n Apache 2.0.
Gjuha përdor kontroll të tipave në mënyrë statike, e implementuar pa nevojën për ta specifikuar qartë tipin e variablave dhe argumenteve të metodave në kod. Programet në Crystal kompilohen në skedarë ekzekutivë, me llogaritjen e makros dhe gjenerimin e kodit gjatë kompilimit. Në programet në gjuhën Crystal, është e mundur të lidhen binde të shkruara në gjuhën C. Parallelizimi i ekzekutimit të kodit bëhet me ndihmën e fjalës kyçe "spawn", e cila lejon ekzekutimin e një detyre sfondore në mënyrë asinkrone, pa bllokuar rrjedhën kryesore, në formën e rrjedhave të lehta, të njohura si fibera (Fiber).
Biblioteka standarde ofron një grup të gjerë funksionesh të zakonshme, duke përfshirë mjete për procesimin e CSV, YAML, dhe JSON, komponente për krijimin e serverëve HTTP dhe mbështetje për WebSocket. Gjatë zhvillimit, është e dobishme të përdorësh komandën "crystal play" e cila formon një ndërfaqe web (në mënyrë të parazgjedhur localhost:8080) për ekzekutimin interaktiv të kodit në gjuhën Crystal.
Ndryshimet kryesore:
- Kompajleri ka marrĂ« njĂ« verifikim tĂ« emrave tĂ« argumenteve nĂ« zbatimin e metodĂ«s abstrakte dhe nĂ« definimin e saj. NĂ« rast tĂ« njĂ« mos pĂ«rputhje emrash tani shfaqet njĂ« paralajmĂ«rim: 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 ^â ParalajmĂ«rim: parametri pozicional ânameâ pĂ«rputhet me parametrin ânumberâ tĂ« metodĂ«s sĂ« tejkaluar FooAbstract#foo(number : Int32), e cila ka njĂ« emĂ«r tjetĂ«r dhe mund tĂ« ndikojĂ« nĂ« kalimin e argumenteve tĂ« emĂ«ruara.
- Kur i atribuohet një argumenti të një metode pa tip, ky argument tani kufizohet nga tipi i këtij variabili. class Foo @x : Int64 def initialize(x) @x = x # parametri x do të marrë tipin e @x end end
- Lejohet shtimi i annotations në parametrat e metodave ose makrosave. def foo(@[MaybeUnused] x); end # OK
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rdorimin e constanteve si indekse dhe emra nĂ« tuple. KEY = «s» foo = {s: «String», n: 0} puts foo[KEY].size
- Në API-në File për fshirjen e skedarëve dhe katalogëve janë shtuar metoda të reja File#delete? dhe Dir#delete?, të cilat kthejnë false nëse skedari ose katalogu nuk ekziston.
- MBrojtja e metodës File.tempfile është forcuar, e cila tani nuk lejon karaktere zero në stringjet që formojnë emrin e skedarit.
- ĂshtĂ« shtuar njĂ« variabĂ«l ambienti NO_COLOR, qĂ« ndalon ndriçimin me ngjyrĂ« nĂ« daljen e kompajlerit dhe interpretuesit.
- Kozullimi i punës në modalitetin interpretues është përmirësuar ndjeshëm.
Burimi: opennet.ru
