Руст 1.78 објављен. Борго језик који комбинује снаге Го и Руста

Објављено је издање програмског језика опште намене Руст 1.78, који је основао пројекат Мозилла, али је сада развијен под окриљем независне непрофитне организације Руст Фоундатион. Језик се фокусира на безбедност меморије и обезбеђује средства за постизање високог паралелизма послова уз избегавање употребе сакупљача смећа и времена извршавања (време извођења је сведено на основну иницијализацију и одржавање стандардне библиотеке).

Рустове методе руковања меморијом чувају програмера од грешака приликом манипулације показивачима и штите од проблема који настају због руковања меморијом ниског нивоа, као што је приступ меморијској области након што је она ослобођена, дереференцирање нултих показивача, прекорачење бафера итд. Да би дистрибуирао библиотеке, обезбедио градње и управљао зависностима, пројекат развија менаџер пакета Царго. Репозиторијум цратес.ио је подржан за хостовање библиотека.

Безбедност меморије је обезбеђена у Русту у време компајлирања кроз проверу референци, праћење власништва над објектима, праћење животног века објекта (опсега) и процену исправности приступа меморији током извршавања кода. Руст такође пружа заштиту од прекорачења целог броја, захтева обавезну иницијализацију вредности променљивих пре употребе, боље обрађује грешке у стандардној библиотеци, подразумевано примењује концепт непроменљивих референци и променљивих, нуди снажно статичко куцање како би се минимизирале логичке грешке.

Главне иновације:

  • Предложен је нови простор имена атрибута "#[диагностиц]", који обезбеђује начин да утиче на поруке о грешци које производи компајлер. Први у новом простору је атрибут „#[диагностиц::он_унимплементед]“, који се може користити за прилагођавање порука о грешци које се шаљу у ситуацији када треба да користите особину која није имплементирана за тип. #[диагностиц::он_унимплементед( мессаге = "Моја порука за `ИмпортантТраит<{А}>` није примењена за `{Селф}`", лабел = "Моја ознака", ноте = "Напомена 1", ноте = "Напомена 2" )] особина ИмпортантТраит {} фн усе_ми_траит(_: импл ИмпортантТраит ) {} фн маин() { усе_ми_траит(Стринг::нев()); } грешка[Е32]: Моја порука за `ИмпортантТраит ` није имплементиран за `Стринг` —> срц/маин.рс:0277:32 | 12 | усе_ми_траит(Стринг::нев()); | ———— ^^^^^^^^^^^^^ Ми Лабел | | | захтева веза уведена овим позивом | = помоћ: особина `ИмпортантТраит ` није примењен за `Стринг` = напомена: Напомена 18 = напомена: Напомена 12
  • Провере пре-потврђивања примењене на небезбедне функције сада могу да се одложе до генерисања кода, што омогућава да се ове провере изводе без потребе за прављењем стандардне библиотеке у режиму „#[цфг(дебуг_ассертионс)]“. Да бисте покренули провере, сада је довољно да омогућите тврдње за отклањање грешака за тестирање или дебуг буилд вашег кода.
  • Понашање функција у стандардној библиотеци које утичу на поравнање показивача и пресека је сада предвидљиво током извршавања и зависи од улазних података. Функција поинтер::алигн_оффсет, која израчунава помак да би поравнала показивач, сада враћа усизе::МАКС само ако операција не успе. Функције слице::алигн_то и слице::алигн_то_мут обе, које трансформишу пресеке у репрезентацију са поравнатим средњим пресеком и оригиналним почетним и завршним пресеком, сада увек враћају највећи средњи део.
  • У стабилну категорију пребачени су:
    • импл Читање за &Стдин
    • Дозволите употребу нестатичког (нестатичког) животног века за неке имплементације везане за стд::еррор::Еррор.
    • Импл имплементација ?Вредност величине је дозвољена.
    • импл Фром за ио::Еррор
  • Функција Барриер::нев() је стабилизована да се користи са атрибутом "цонст" у било ком контексту уместо константама.
  • За циљне платформе к86_64-пц-виндовс-мсвц, и686-пц-виндовс-мсвц, к86_64-пц-виндовс-гну, и686-пц-виндовс-гну, к86_64-пц-виндовс-гнуллвм и и686-пц-виндовс- сада захтева најмање верзију Виндовс 10.
  • Трећи ниво подршке је имплементиран за платформе васм32-васип2, арм64ец-пц-виндовс-мсвц, армв8р-ноне-еабихф и лоонгарцх64-ункновн-линук-мусл. Трећи ниво укључује основну подршку, али без аутоматизованог тестирања, објављивања званичних верзија или провере да ли се код може изградити.
  • Други ниво подршке за циљну платформу Адд васм32-васип1 је имплементиран. Други ниво подршке укључује гаранцију за монтажу.
  • Платформа васм32-васи-превиев1-тхреадс је преименована у васм32-васип1-тхреадс.
  • Компајлер је пребачен да користи ЛЛВМ 18. Када се користи ЛЛВМ 18 за к86-32 и к86-64 архитектуре, АБИ повезан са типовима у128 и и128 је промењен.
  • У менаџеру Царго пакта, верзија 4 закључаних датотека (лоцкфиле в4) је стабилизована.
  • Царго има стабилизовану глобалну кеш меморију са информацијама о најновијој употреби података. Кеш меморија се налази у $ЦАРГО_ХОМЕ/.глобал-цацхе користећи СКЛите и аутоматски се ажурира како би одражавала најновије промене у индексу, фајлу сандука, директоријуму кода, гит клону и гит цхецкоут-у.

Поред тога, Борго програмски језик покушава да буде изражајнији од Го језика, али мање сложен од Руст језика. Борго комбинује најбоље карактеристике Го и Руст-а, надокнађујући недостатке сваког језика. На пример, Го је једноставан и јасан, али не пружа напредне безбедносне функције. Руст језик пружа алате за безбедно програмирање, али је превише компликован. Пројекат развија Марцо Сампеллегрини, аутор Тхе Симпле Хаскелл Хандбоок и програмер Куад ЦИ система континуиране интеграције.

Руст 1.78 објављен. Борго језик који комбинује снаге Го и Руста

Борго користи статично куцање, типове налик на Го и синтаксу налик на Руст. Тачке и зарезе су опционе на крају редова у Борго коду. Борго код се компајлира у Го репрезентацију која је потпуно компатибилна са постојећим Го пакетима. Код компајлера је написан у Русту и дистрибуира се под ИСЦ лиценцом. користите фмт енум НетворкСтате { Лоадинг, Фаилед(инт), Суццесс(Т), } струцт Респонсе { титле: стринг, дуратион: инт, } фн маин() { лет рес = Респонсе { титле: „Здраво свете“, трајање: 0, } нека стање = НетворкСтате.Суццесс(рес) лет мсг = матцх стате { НетворкСтате.Лоадинг => “и даље се учитава”, НетворкСтате.Фаилед(цоде) => фмт.Спринтф(“Имам код грешке: %д”, код), НетворкСтате.Суццесс (рес) => рес.титле, } фмт.Принтлн(мсг) }

Извор: опеннет.ру

Додај коментар