Издање програмског језика Руст 1.38

објављено издање системског програмског језика Руст 1.38, који је основао пројекат Мозилла. Језик се фокусира на безбедност меморије, обезбеђује аутоматско управљање меморијом и обезбеђује средства за постизање високог паралелизма задатака без коришћења сакупљача смећа или времена извршавања.

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

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

  • Додан је режим компилације са цевоводом (пипелинед), у коме изградња зависног пакета сандука почиње чим метаподаци зависности постану доступни, без чекања да се заврши компилација. Приликом компајлирања пакета, зависности не морају бити потпуно састављене, већ само дефинисање метаподатака, који укључују листе типова, зависности и извезених елемената. Метаподаци су доступни рано у процесу компилације, тако да се повезани пакети сада могу саставити много раније. Приликом прављења појединачних пакета, предложени режим не утиче на перформансе, али ако буилд покрива пакете са разгранатим зависностима, укупно време изградње може се смањити за 10-20%;
  • Осигурава откривање неправилне употребе функција стд::мем::унинитиализед и стд::мем::нула. На пример, стд::мем::унинитиализед је згодан за брзо креирање низова, али доводи у заблуду компајлер јер се чини да је иницијализован, али у стварности вредност остаје неиницијализована. Функција мем::унинитиализед је већ означена као застарела и препоручује се да се уместо тога користи средњи тип МаибеУнит. Што се тиче мем::зероед, ова функција може да изазове проблеме са типовима који не могу да прихвате нулте вредности.

    Да би помогло у идентификацији недефинисаног понашања, ново издање додаје проверу длачица компајлеру који открива неке проблеме са мем::унинитиализед или мем::зероед. На пример, сада добијате грешку када покушавате да користите мем::унинитиализед или мем::зероед са типовима &Т и Бок‹Т›, који представљају објекте показивача који не могу да прихвате нулте вредности;

  • Атрибут „#[депрецатед]“ је проширен како би се омогућило да пакети у сандуку буду означени као застарели и заказани за будуће брисање. Од Руста 1.38, овај атрибут се такође може користити за макрое;
  • Додата могућност коришћења атрибута „#[глобал_аллоцатор]“ у подмодулима;
  • Додата функција стд::било који::име_типа, што вам омогућава да сазнате име типа, што може бити корисно у сврху отклањања грешака. На пример, током извршавања програма можете сазнати за који тип је функција позвана:

    фн ген_валуе‹Т: Подразумевано>() -› Т {
    принтлн!("Иницијализација инстанце {}", стд::ани::типе_наме::‹Т›());
    Подразумевано::дефаулт()
    }

    фн маин() {
    нека _: и32 = ген_валуе(); # "и32" ће бити одштампан
    нека _: Стринг = ген_валуе(); # ће одштампати "аллоц::стринг::Стринг"
    }

  • Проширене функције стандардне библиотеке:
    • слице::{цонцат, цоннецт, јоин} сада може узети вредност &[Т] поред &Т;
    • "*цонст Т" и "*мут Т" сада имплементирају маркер::Унпин;
    • „Арц‹[Т]›” и „Рц‹[Т]›” сада имплементирају ФромИтератор‹Т›;
    • итер::{СтепБи, Пеекабле, Таке} сада имплементира ДоублеЕндедИтератор.
    • асции::ЕсцапеДефаулт имплементира клонирање и приказ.
  • Нови део АПИ-ја је пребачен у стабилну категорију, укључујући методе које су стабилизоване
    • ‹*цонст Т›::цаст, ‹*мут Т›::цаст,
    • Дуратион::ас_сецс_ф{32|64},
    • Дуратион::див_дуратион_ф{32|64},
    • Дуратион::див_ф{32|64},
    • Дуратион::фром_сецс_ф{32|64},
    • Дуратион::мул_ф{32|64},
    • операције поделе са остатком
      див_еуцлид и рем_еуцлид за све целобројне примитиве;

  • Додата подршка за одређивање опције „--феатурес“ више пута да би се омогућиле различите функције у менаџеру теретних пакета;
  • Компајлер обезбеђује трећи ниво подршка за циљне платформе аарцх64-увп-виндовс-мсвц, и686-увп-виндовс-гну, и686-увп-виндовс-мсвц, к86_64-увп-виндовс-гну, к86_64-увп-виндовс-мсвц-ункновн таргетс, армв7 -гнуеаби, армв7-ункновн-линук-муслеаби, хекагон-ункновн-линук-мусл и рисцв32и-ункновн-ноне-елф. Трећи ниво укључује основну подршку, али без аутоматизованог тестирања и објављивања званичних верзија.

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

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