U realizua lëshimi i gjuhës së programimit Crystal 1.0. Ky publikim shënon lëshimin e parë të rëndësishëm, që përmbledh 8 vjet punë dhe simbolizon stabilizimin e gjuhës dhe gatishmërinë për t'u përdorur në projekte të punës. Në degën 1.x do të ruhet përputhshmëria prapa dhe garantohen pa ndryshime në gjuhë dhe bibliotekën standarde, që ndikojnë negativisht në ndërtimin dhe funksionimin e kodit ekzistues.
Lëshimet 1.0.y do të përfshijnë vetëm korrigjime, ndërsa versionet 1.x.0 do të ofrojnë funksionalitete të reja dhe ndryshime të rëndësishme, duke ruajtur përputhshmërinë me kodin. Ide të reja dhe ndryshime potencialisht të papërputhshme do të zhvillohen në një degë të veçantë, mbi bazën e së cilës do të formohet më vonë publikimi Crystal 2.0. Disa funksionalitete të Crystal 1.0 janë shpallur si preliminare dhe pavarësisht pranisë në degën 1.0, ato nuk përfshihen nën mbështetje zyrtare. Ndër këto funksionalitete përfshihen monogjithësia, funksionimi në platformën Windows, përdorimi në sisteme me procesorë ARM.
Të kujtojmë se zhvilluesit e Crystal përpiqen të kombinojnë lehtësinë e zhvillimit në gjuhën Ruby me performancën e lartë të aplikacioneve që veçori gjuhën C. Sintaksisi i Crystal është i ngjashëm me gjuhën Ruby, por nuk është plotësisht i përputhshëm me të, megjithatë disa programe ruby funksionojnë pa modifikim. Kodi i kompilatorit është shkruar në gjuhën Crystal dhe shpërndahet nën licencën Apache 2.0.
Në gjuhë përdoret kontrolli statik i tipave, i realizuar pa nevojën për të specifikuar qartë tipet e variablave dhe argumenteve të metodave në kod. Programet në Crystal compilohen në skedarë ekzekutivë, me llogaritjen e makrove dhe gjenerimin e kodit gjatë kompilimit. Në programet në gjuhën Crystal lejohet lidhja me binda të shkruara në gjuhën C. Paraleleza e ekzekutimit të kodit realizohet me fjalën kyçe «spawn», e cila lejon nisjen e një detyre në prapaskenë në mod të asinkroni, pa bllokuar rrjedhën kryesore, në formën e rrjedhave të lehta, të njohura si fibra (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:
- Në tuplas lejohet të qaset indeksikisht në elemente të llojeve të ndryshme, pasi kompjuteri ka informacion se cilat janë llojet e çdo elementi. Për shembull: tuple = {1, «hello», 'x'} v = tuple[0..1] # do të japë {1, «hello»} typeof(v) # => Tuple(Int32, String)
- Në literat e vargjeve dhe karaktereve është ndaluar përdorimi i shkurtoreve surrogate në sekvencat e escapes Unicode, si «\uD834». Për kodimin e vlerave të rastit duhet të përdoret notacioni «\x».
- Në bibliotekën standarde është hequr një sasi e madhe e definimeve, makrove dhe metodave, të cilat ishin shënuar si të vjetruara. Duke përfshirë metodat Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill dhe të tjera.
- Në makrotë getter dhe property tani kërkohet patjetër specifikimi i tipit të kthyer.
- Metoda e rrumbullakimit të paracaktuar është ndryshuar në TIES_EVEN («rrumbullakimi banker», deri në numrin e plotë më të afërt, dhe për situatat kufitare deri në numrin çift më të afërt). Në Number#round është shtuar parametri RoundingMode, i cili lejon zgjedhjen e metodës së rrumbullakimit. Ndër metodat e disponueshme janë: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- Në koleksione është siguruar funksionimi i Enumerable#flat_map dhe Iterator#flat_map me elemento të llojeve të përziera.
- Në serializimin e sekuencave Enum tani përdoren reprezentimet në formë të vargjeve me nënvizime.
- Llojet e përcaktuara në modulion XML janë transferuar nga përdorimi i struct në class.
- Për arsyet e sigurisë është ndaluar dekodimi i emrave të Cookie, si dhe kodimi dhe dekodimi i vlerave të Cookie (rikodimi është lënë në duar të frameworkeve dhe aplikacioneve). Metoda HTTP::Cookies.from_headers është ndarë në dy variante për servera dhe klientët.
Burimi: opennet.ru
