U publikua gjuha e programimit Crystal 1.0. Ky lëshim është shënuar si lëshimi i parë domethënës, i cili përmblodhi 8 vjet punë dhe shënoi stabilizimin e gjuhës dhe gatishmërinë për përdorim në projekte të punës. Në degën 1.x do të mbështetet përputhshmëria prapa dhe garanton mungesën e ndryshimeve në gjuhë dhe bibliotekën standarte 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ë konsiderueshme, duke mbajtur përputhshmërinë me kodin. Ide të reja dhe ndryshime potencialisht jo të përputhshme do të zhvillohen në një degë të veçantë, mbi të cilën më pas do të formohet lëshimi Crystal 2.0. Disa mundësi të Crystal 1.0 janë shpallur si preliminare dhe, përkundër pranisë në degën 1.0, ato nuk janë nën mbështetje zyrtare. Mes këtyre mundësive janë monogopizimi, funksionimi në platformën Windows, përdorimi në sisteme me procesorë ARM.
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ë është tipike për gjuhën C. Sintaksa e Crystal është e ngjashme me gjuhën Ruby, por nuk është plotësisht e përputhshme me të, megjithatë disa programe ruby ekzekutohen pa modifikim. Kodi i kompilatorit është shkruar në gjuhën Crystal dhe shpërndahet nën licencën Apache 2.0.
Në gjuhë aplikohet kontrolli statik i tipeve, i realizuar pa nevojën për të specifikuar në mënyrë eksplicite tipet e variablave dhe argumenteve të metodave në kod. Programet në Crystal kompilohen në skedarë ekzekutues, me llogaritjen e makrove dhe gjenerimin e kodit gjatë kompilimit. Në programet në gjuhën Crystal lejohet lidhja e bindeve, të shkruara në gjuhën C. Parallelizimi i ekzekutimit të kodit arrihet përmes fjalës kyçe "spawn", e cila lejon nisjen e një detyre në sfond në mënyrë asinkrone, pa bllokuar rrjedhën kryesore, në formën e rrjedhave të lehta, të njohura si fibra (Fiber).
Biblioteka standarde ofron një set të madh funksionesh tipike, duke përfshirë mjete për përpunimin e CSV, YAML dhe JSON, komponentë për krijimin e serverëve HTTP dhe mbështetje për WebSocket. Gjatë zhvillimit, është e dobishme të përdorni komandën "crystal play" e cila krijon një ndërfaqe web (në mënyrë default localhost:8080) për ekzekutimin interaktiv të kodit në gjuhën Crystal.
Ndryshimet kryesore:
- Në tuplet lejohet qasja e indeksuar në elemente të llojeve të ndryshme, pasi kompajleri ka informacion mbi llojin 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ë literalët e vargjeve dhe karaktereve, përdorimi i përshkrimeve të zëvendësimit në sekvencat Escape Unicode, si "\uD834", është i ndaluar. Për kodimin e vlerave të rastësishme duhet të përdoret nota "\x".
- Në bibliotekën standarde janë hequr një sasi e madhe e definicionëve, makrove dhe metodave që ishin shënuar si të papërdorshëm. Duke përfshirë metodat Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill etj.
- Në makrotë getter dhe property tani është e nevojshme të specifikohet lloji i kthimit.
- Metoda e rrumbullakimit të parazgjedhur është modifikuar në TIES_EVEN ("rrumbullakimi i bankierit", deri në numrin më të afërt të plotë, dhe për situata kufitare deri në numrin më të afërt të çiftë). Në Number#round është shtuar parametri RoundingMode, i cili lejon zgjedhjen e metodës së rrumbullakimit. Mes metodave të disponueshme janë: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- Në koleksione është garantuar puna e Enumerable#flat_map dhe Iterator#flat_map me elemente të llojeve të ndryshme.
- Gjatë serializimit të sekvencave Enum tani përdoren prezantimet në formë string me nënvizim.
- Llojet e përcaktuara në modulën XML janë transferuar nga përdorimi i struct në class.
- Për arsye sigurie, është ndërprerë dekodimi i emrave të Cookie, si dhe kodimi dhe dekodimi i vlerave të Cookie (rikodimi është transferuar në duar të kornizave dhe aplikacioneve). Metoda HTTP::Cookies.from_headers është ndarë në dy varianta për serverësh dhe klientët.
Burimi: opennet.ru
