Објављено је издање програмског језика Јулиа 1.10, који комбинује такве квалитете као што су високе перформансе, подршка за динамичко куцање и уграђени алати за паралелно програмирање. Синтакса Јулије је блиска МАТЛАБ-у, са неким елементима позајмљеним из Руби-а и Лисп-а. Метода манипулације стринговима подсећа на Перл. Шифра пројекта се дистрибуира под лиценцом МИТ.
Кључне карактеристике језика:
- Високе перформансе: један од кључних циљева пројекта је постизање перформанси блиских Ц програмима. Јулиа компајлер је заснован на ЛЛВМ пројекту и генерише ефикасан изворни машински код за многе циљне платформе;
- Подршка за различите парадигме програмирања, укључујући елементе објектно оријентисаног и функционалног програмирања. Стандардна библиотека обезбеђује функције за асинхрони И/О, управљање процесима, евидентирање, профилисање и управљање пакетима, између осталог;
- Динамичко куцање: Језик не захтева експлицитну дефиницију типова за променљиве, по аналогији са програмским језицима за скриптовање. Подржава интерактивни режим;
- Опциона могућност експлицитног навођења типова;
- Синтакса која је одлична за нумеричке прорачуне, научне прорачуне, системе машинског учења и визуелизацију података. Подршка за многе типове нумеричких података и алате за паралелизовање прорачуна.
- Могућност директног позивања функција из Ц библиотека без додатних слојева.
Главне промене у Јулији 1.10:
- Нове језичке карактеристике
- Подразумевано је омогућен нови и побољшани парсер ЈулиаСинтак.јл. Ако треба да се вратите на стари, требало би да подесите променљиву окружења ЈУЛИА_УСЕ_ФЛИСП_ПАРСЕР на 1.
- Симболи ⥺ (У+297А, \лефтарровсубсет) и ⥷ (У+2977, \лефтарровлесс) сада се могу користити као бинарни оператори са приоритетом стрелице.
- Промене језика
- Приликом покретања подређених задатака, локални РНГ (генератор случајних бројева) родитељског задатка више није погођен. Нова шема иницијализације генератора случајних бројева је слична имплементацијама СплитМик и ДотМик.
- Предложено је ново правило за избор метода које разјашњава тип „Унион{}“ у корист методе дефинисане експлицитно за руковање аргументом типа „Унион{}“.
- Знак "х бар" ℏ (\хсласх У+210Ф) се сада третира као еквивалент ħ (\хбар У+0127).
- Макро „@симд” сада има специфичну семантику: дозвољава само преуређивање и одсецање у покретном зарезу уместо омогућавања свих „@фастматх” оптимизација. Ако покренути програми доживе деградацију перформанси због ове промене, тада се претходно понашање може вратити помоћу „@фастматх @симд“.
- Када се прикаже у праћењу стека методе са кључним речима, текстуални приказ кључних речи је сада поједностављен коришћењем нове макро синтаксе „@Кваргс{кеи1::Типе1, ...}“.
- Побољшања компајлера/времена извршавања
- Сакупљач смећа сада врши вишенитну селекцију објеката за одлагање.
- JITLink је подразумевано омогућен у Linux-системи засновани на aarch64 архитектури при изградњи Јулије са LLVM 15 или новијом верзијом.
- Процес предкомпилације укључује закључавање пид датотека. Само један јулиа процес истовремено обавља прекомпилацију. Раније су се сви процеси одвијали паралелно и постојала је опасност од оштећења компилацијских кеш датотека због услова трке.
- Промене параметара командне линије
- Додата опција "--гцтхреадс", која вам омогућава да одредите колико ће паралелних нити користити сакупљач смећа. Подразумевана вредност је „Н/2“, где је Н број радничких нити („-тхреадс“) које користи Јулија.
- Изградите системске промене
- Чворови „СпарсеАрраис“ и „СуитеСпарсе“ су подразумевано искључени из слике система. Основни пакет Јулиа више не садржи библиотеке са ГПЛ лиценцом. Међутим, ове библиотеке су и даље укључене у језик у стандардној бинарној дистрибуцији.
- Нове функције библиотеке
- "танпи" израчунава "тан(π*к)" прецизније од "тан(пи*к)".
- "фоурроот(к)" је дефинисан у Басе.Матх и може се користити за израчунавање четвртог корена од "к". Кратко име за овај метод је Уницоде знак ∜, који се може унети помоћу команде \фоуртхроот.
- Додате функције "Либц.меммове", "Либц.мемсет" и "Либц.мемцпи", чија функционалност одговара функционалности одговарајућих Ц позива.
- Додата метода „Басе.испрецомпилед(пкг::ПкгИд)“ која враћа „труе“ ако је пакет већ прекомпајлиран.
- Опције функције библиотеке
- „бином(к, к)“ сада подржава нецелобројно „к“.
- „ЦартесианИндек“ се сада третира као „скалар“ за емитовање.
- Метод "принтстилед" сада подржава курзив излаз.
- Методе "парент" и "парентиндицес" сада подржавају тип "СубСтрингс".
- Метода „реплаце(стринг,паттерн...)“ сада подржава опциони „ИО“ аргумент за излаз у ток уместо да враћа стринг.
- Метода „стартсвитх“ сада подржава И/О нити.
- Промене основне библиотеке
- Од метода „сортперм!” и „делимично сортирање!“ уклонили кључну реч „иницијализовано=труе“, што би могло да доведе до небезбедног понашања.
- Када се штампају цели бројеви типа „Ратионал“, њихов именилац се сада прескаче у контексту „Ратионал“ откуцаних токова (као што су низови).
- Менаџер пакета
- Метода „Пкг.прецомпиле“ сада узима „тајминг“ као кључни аргумент, приказујући информације о времену пре компајлирања за сваки пакет – „Пкг.прецомпиле(тиминг=труе)“.
- Линеарна алгебра
- Тип „АбстрацтК“ више није подтип „АбстрацтМатрик“. Штавише, метода "адјоинт(К::АбстрацтК)" више не умотава "К" у тип "Адјоинт", замењујући га са "АдјоинтК", који је сам по себи подтип "АбстрацтК". Ова промена је због чињенице да се типично „АбстрацтК“ инстанце понашају као линеарни оператори засновани на функцијама и матрицама и да им се не може приступити индексом. Поред тога, многи типови "АбстрацтК" могу да раде на векторима/матрицама различитих величина, делујући као матрица са величином која зависи од контекста. Са овом променом, тип "АбстрацтК" сада има добро дефинисан интерфејс, који је детаљно описан у Јулиа документацији.
- Резултати факторизације више нису умотани у типове омотача „Адјоинт“ и „Транспосе“. Уместо тога, додани су типови „АдјоинтФацторизатион“ и „ТранпосеФацторизатион“, који су сами по себи подтипови „факторизације“.
- Нове функције "хермитианпарт" и "хермитианпарт!" да пронађе ермитски (истински симетричан) део матрице.
- Метода "норма" транспоноване подређене матрице типа "АбстрацтМатрик" сада подразумевано враћа норму родитељске матрице, која одговара тренутном понашању за "АбстрацтВецторс".
- Додате методе за израчунавање сопствених вектора "еиген(А, Б)" и "еигвалс(А, Б)" за случај када је један од А или Б симетричан или Хермитов.
- Методе „еигвалс/еиген(А, цхолески(Б))“ сада израчунавају генерализоване сопствене вредности (својствене вредности: и сопствени вектори) А и Б преко Цхолескијевог проширења за позитивно одређено Б.
- Принтф
- Спецификатори формата сада подржавају динамичку ширину и прецизност, као што су „%*с“ и „%*.*г“.
- ЗАМЈЕНА
- Приликом штампања трага стека, дубина одштампаних типова у потписима функција је ограничена да би се избегло превише опсежан излаз.
- Тест
- Макро „@тест_брокен“ (или „@тест“ са „брокен=труе“) сада даје грешку ако тестни израз не врати фалсе/труе.
- Ако постоји грешка при позивању „@тест“ или грешка унутар функције, сада је обезбеђено детаљно праћење стека да би се разумела позиција теста у „@тестсету“.
- ИнтерацтивеУтилс
- „цоде_нативе“ и „@цоде_нативе“ сада користе Интел синтаксу уместо АТ&Т.
- „@тиме_импортс“ сада приказује време извршења „__инит__()“ за увезене модуле.
- Застареле и подложне уклањању структуре
- Макро „@пуре“ је застарео. Уместо тога треба користити „Басе.@ассуме_еффецтс :фолдабле“.
Извор: опеннет.ру
