Crystal dasturlash tili 1.0 versiyasi sifatida chiqarildi. Ushbu nashr sakkiz yillik ishni qamrab olgan va tilning barqarorlashuvi va ishlab chiqarish loyihalarida foydalanishga tayyorligini ko'rsatadigan birinchi muhim nashrni anglatadi. 1.x filiali orqaga qarab muvofiqlikni saqlab qoladi va til yoki standart kutubxonaga hech qanday o'zgartirishlar mavjud kodning tuzilishi yoki ishlashiga salbiy ta'sir ko'rsatmasligini kafolatlaydi.
1.0.y versiyalari faqat kichik tuzatishlarni o'z ichiga oladi, 1.x.0 versiyalari esa kod mosligini saqlab qolgan holda yangi funksiyalar va muhim o'zgarishlarni kiritadi. Yangi g'oyalar va potentsial mos kelmaydigan o'zgarishlar alohida tarmoqda ishlab chiqiladi, bu keyinchalik Crystal 2.0 versiyasi uchun asos bo'ladi. Crystal 1.0 ning ba'zi xususiyatlari dastlabki deb e'lon qilingan va 1.0 tarmog'ida mavjud bo'lishiga qaramay, rasmiy qo'llab-quvvatlash bilan qamrab olinmagan. Bu xususiyatlarga ko'p oqimli, platforma qo'llab-quvvatlashi va boshqalar kiradi. Windows, ARM protsessorlari bo'lgan tizimlarda foydalaning.
Eslatib o‘tamiz, Crystal ishlab chiquvchilari Rubyni ishlab chiqish qulayligini C. Crystal sintaksisiga xos bo‘lgan yuqori ilovalar unumdorligi bilan uyg‘unlashtirishga intilishadi, ba’zi Ruby dasturlari o‘zgartirishlarsiz ishlashiga qaramay, Crystal sintaksisi Ruby’ga yaqin, lekin to‘liq mos kelmaydi. Kompilyator kodi Crystal-da yozilgan va Apache 2.0 litsenziyasi ostida tarqatiladi.
Til statik turdagi tekshirishdan foydalanadi, bu kodda o'zgaruvchan turlari va usul argumentlarini aniq ko'rsatish zaruratini yo'q qiladi. Kristalli dasturlar bajariladigan fayllarga kompilyatsiya qilinadi, kompilyatsiya vaqtida makro baholash va kod yaratish. Kristalli dasturlar C da yozilgan bog'lanishlarni o'z ichiga olishi mumkin. Parallel kod bajarilishiga "spawn" kalit so'zi yordamida erishiladi, bu esa fon vazifalarini asinxron ravishda asosiy ipni bloklamasdan, tolalar deb ataladigan engil iplar shaklida ishga tushirish imkonini beradi.
Standart kutubxona CSV, YAML va JSON-ni qayta ishlash vositalarini, HTTP serverlarini yaratish komponentlarini va WebSocket-ni qo'llab-quvvatlashni o'z ichiga olgan keng ko'lamli umumiy funktsiyalarni taqdim etadi. Rivojlanish jarayonida Crystal kodni interaktiv tarzda bajarish uchun veb-interfeysni (sukut bo'yicha localhost:8080) yaratadigan "kristal o'ynash" buyrug'idan foydalanish qulay.
Asosiy o'zgarishlar:
- Tuplelar har xil turdagi elementlarga indekslangan kirish imkonini beradi, chunki kompilyator har bir elementning turini biladi. Masalan: tuple = {1, "salom", 'x'} v = tuple[0..1] # hosil qiladi {1, "salom"} typeof(v) # => Tuple(Int32, String)
- Unicode qochish ketma-ketliklarida surrogat qisqartmalar, masalan, “\uD834” satr va belgilar harflarida taqiqlangan. Ixtiyoriy qiymatlarni kodlash uchun "\x" belgisi qo'llanilishi kerak.
- Oldindan ko'p miqdorda eskirgan ta'riflar, makroslar va usullar standart kutubxonadan olib tashlandi. Bularga Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill usullari va boshqalar kiradi.
- Getter va xususiyat makroslari endi qaytish turini ko'rsatishni talab qiladi.
- Standart yaxlitlash usuli TIES_EVEN ("bankirning yaxlitlashi", eng yaqin butun songa va chegara holatlari uchun eng yaqin juft raqamga) o'zgartirildi. RoundingMode parametri Number#round ga qo'shildi, bu sizga yaxlitlash usulini tanlash imkonini beradi. Mavjud usullarga quyidagilar kiradi: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE va TO_NEGATIVE.
- To'plamlar Enumerable#flat_map va Iterator#flat_map aralash turdagi elementlarni qo'llab-quvvatlaydi.
- Enum ketma-ketliklarini ketma-ketlashtirishda ular endi pastki chiziq bilan ajratilgan satrlar sifatida taqdim etiladi.
- XML modulida belgilangan turlar struct-dan sinfga aylantirildi.
- Xavfsizlik nuqtai nazaridan, cookie-fayllar nomlarini dekodlash, shuningdek, cookie qiymatlarini kodlash va dekodlash to'xtatildi (qayta kodlash endi freymvorklar va ilovalarning mas'uliyati hisoblanadi). HTTP::Cookies.from_headers usuli ikkita variantga bo'lingan. serverlar va mijozlar.
Manba: opennet.ru
