Crystal 1.16 программалоо тилинин релизи жарык көрдү, аны иштеп чыгуучулар Ruby тилинде иштеп чыгуунун ыңгайлуулугун Си тилине мүнөздүү жогорку тиркемелердин натыйжалуулугун айкалыштырууга аракет кылып жатышат. Crystal синтаксиси Rubyге жакын, бирок толугу менен шайкеш келбейт, бирок кээ бир ruby программалары кайра иштелбестен иштейт. Компилятордун коду Crystal тилинде жазылган жана Apache 2.0 лицензиясы боюнча таратылган.
Тил статикалык типти текшерүүнү колдонот, ал коддогу өзгөрмөлөрдүн түрлөрүн жана метод аргументтерин так көрсөтүүнүн зарылдыгы жок ишке ашырылат. Кристалл программалары аткарылуучу файлдарга компиляцияланат, макростор бааланат жана компиляция учурунда код түзүлөт. Crystal программаларында C тилинде жазылган байланыштарды туташтырууга болот. Коддун аткарылышын параллелдөө "spawn" ачкыч сөзүнүн жардамы менен жүзөгө ашырылат, ал негизги жипти блоктобой эле асинхрондук режимде фондук тапшырманы жипчелер деп аталган жеңил жиптер түрүндө аткарууга мүмкүндүк берет.
Стандарттык китепкана типтүү функциялардын жыйындысын, анын ичинде CSV, YAML жана JSON иштетүү куралдарын, HTTP серверлерин түзүү үчүн компоненттерди жана WebSocket колдоосун камсыз кылат. Иштеп чыгуу учурунда сиз Crystal коддун интерактивдүү аткарылышы үчүн веб-интерфейсти (демейки боюнча localhost:8080) түзүүчү "кристалл ойнотуу" буйругун колдоно аласыз.
Негизги өзгөрүүлөр:
- Жеңил жиптерди (була) өзүнчө аткаруу контексттеринде (Аткаруу контексттери) иштетүү үчүн эксперименталдык колдоо кошулду, ал тапшырмаларды параллелдүү аткарууга эффективдүү мүмкүндүк берет - бир контекстте жиптерди бөгөттөө башка контекстте аткарууну токтотууга алып келбейт. mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4) 10.times do mt_context.spawn do_something end end gtk = Fiber::ExecutionContext::Isolated.new("Gtk.") gtk.main end
- Slice.literal ыкмасы азыр кесимде камтылган элементтер үчүн типтин жыйынтыгын берет жана котормочуда иштөө үчүн колдоону кошот.
- Sizeof жана alignof макростору туруктуу типтер жөнүндө маалымат берет.
- Стандарттык китепканага жаңы ыкмалар кошулду: Indexable#find, #find!, EventLoop#wait_readable жана #wait_wriable.
- Компилятордо "-o" вариантынын узун версиясы бар, "--output" жана файлдын ордуна каталогду көрсөтүү мүмкүнчүлүгү ишке ашырылган (файлдын аталышы код менен файлдын атына ылайык тандалат).
- Документация генератору эми документацияга жеке жана корголгон объекттерди, ошондой эле китепкана байланыштарындагы объекттерди (lib, fun, Union, cstruct, external, type) кошуу мүмкүнчүлүгүнө ээ.
- "File.match?" методу Кээ бир көйгөйлөрдү жана чектөөлөрдү жок кылган жаңы файл жолуна дал келүүчү алгоритм ишке ашырылды. Мисалы, символдон качуу ("\\t" маскасы "\t" белгисине дал келет, бирок "t" белгисине эмес), жолду бөлүү ("a**" маскасы "ab"га дал келет, бирок "ab/c" үчүн иштебей калат, ал эми "**/a" маскасы "a"га дал келет), уя салынган үлгүлөр ("{[}]}" маскасы "}" менен дал келет) жана диапазондор азыр "-"-" туура.
- Суффикстер "?" аныктамалардагы (defs), макростордогу жана блоктордогу параметрлердин аталыштарында эскирген. Жана "!".
- Enumerable#sum жана #product методдорунда, эгерде элемент түрү биримдик болсо, кайтаруу түрүн автоматтык түрдө аныктоо алынып салынган. Бул ыкмаларды чакырганда азыр түрүн так көрсөтүшүңүз керек, мисалы, “[1, 10000000000_u64].sum” дегендин ордуна “[1, 10000000000_u64].sum(0_u64)” деп жазышыңыз керек.
- HTTP::Request URL бөлүктөрүн туура талдоону камсыз кылат.
- LLVM 20 компилятор топтому үчүн кошумча колдоо.
- LLVM::ABI жана LLVM::TargetMachine#abi чалуулары жокко чыгарылган.
Source: opennet.ru
