ĂshtĂ« publikuar lĂ«shimi i gjuhĂ«s sĂ« programimit Crystal 1.2, zhvilluesit e sĂ« cilĂ«s pĂ«rpiqen tĂ« kombinojnĂ« lehtĂ«sinĂ« e zhvillimit nĂ« gjuhĂ«n Ruby me performancĂ«n e lartĂ« tĂ« aplikacioneve, tipike pĂ«r gjuhĂ«n C. Sintaksa e Crystal Ă«shtĂ« e ngjashme me atĂ« tĂ« Ruby, por nuk Ă«shtĂ« nĂ« pĂ«rputhje tĂ« plotĂ« me tĂ«, ndonĂ«se disa programe ruby ekzekutohen pa rishikim. Kodi i kompilatorit Ă«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:
- ĂshtĂ« shtuar mundĂ«sia e caktimit tĂ« njĂ« nĂ«nklase tĂ« klasĂ«s gjenerike njĂ« elementi tĂ« klasĂ«s prind. class Foo(T); end class Bar(T) < Foo(T); end x = Foo x = Bar
- Në makros, për të injoruar vlerën në ciklin "for", tani mund të përdoret simboli i nënvizimit. {% for _, v, i in {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
- Në makros është shtuar metoda "file_exists?" për të kontrolluar ekzistencën e një skedari.
- Në bibliotekën standarde është implementuar mbështetje për numra të tërë 128-bitësh.
- ĂshtĂ« shtuar moduli Indexable::Mutable(T) me implementimin e operacioneve tĂ« avancuara pĂ«r koleksione, tĂ« tilla si BitArray dhe Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
- ĂshtĂ« shtuar metoda XML::Node#namespace_definition pĂ«r tĂ« nxjerrĂ« hapĂ«sirĂ«n specifike tĂ« emrave nga XML.
- Janë shpallur të vjetëruara metodat IO#write_utf8 dhe URI.encode, për të cilat duhet të përdoren IO#write_string dhe URI.encode_path.
- Mbështetja për arkitekturën 32-bit x86 është zhvendosur në nivelin e dytë (paket e gatshme nuk formohen më). Po përgatitet kalimi në nivelin e parë të mbështetjes për arkitekturën ARM64.
- Ka vazhduar puna pĂ«r tĂ« siguruar mbĂ«shtetje tĂ« plotĂ« pĂ«r platformĂ«n Windows. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r soketat nĂ« Windows.
- Për macOS është shtuar një paketë universale, e cila funksionon si në pajisjet me procesorë x86, ashtu edhe në pajisjet me çipin Apple M1.
Burimi: opennet.ru
