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

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

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

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

  • Функционалност повезана са употребом сталних генерика добила је статус минимално одрживог производа (МВП), дајући зелено светло за широку употребу. Цонст генерици дозвољавају да се типови генерализују на константне вредности, тј. користите генеричке аргументе ограничене на опсег константних вредности, а не на типове или век трајања. Ова функција вам омогућава да користите типове и апстракцију параметаризованих целим бројевима када креирате особине за низове било које величине без потребе да креирате посебан тип за сваки опсег важећих вредности како бисте били сигурни да не прелазе важећи опсег.

    Почевши од тренутног издања, за низове типа „[Т; Н]" (тип Т и величина Н) пружа могућност апстрактног типа и величине користећи вредности са било којим целим, логичким и карактерним типовима (типови структуре и енум још нису подржани). Константни генерици увелико поједностављују развој библиотеке, на пример, да бисте користили низ који није везан за одређени тип и величину, можете навести: струцт Арраи; { // ^^^^^^^^^^^^^^^^^^^^ дефиниција константне генеричке листе: [Т; ЛЕНГТХ] // ^^^^^^ његова употреба }

    Када се заправо користи са овом дефиницијом „Низ » компајлер ће генерисати мономорфну ​​верзију низа: струцт Арраи { листа: [у8; 32] }

  • стд::арраи::ИнтоИтер АПИ, заснован на константним генерицима, је стабилизован, помоћу којег можете креирати итераторе по вредности за било који низ: фн маин() { лет арраи = [1, 2, 3, 4, 5] ; // Раније, да бисте прешли преко вредности, морали сте да позовете метод .итер() за ставку у арраи.итер().цопиед() { принтлн!("{}", итем); } // Сада можете навести за ставку у стд::арраи::ИнтоИтер::нев(арраи) { принтлн!("{}", итем); } }
  • Менаџер пакета терета сада подржава ново поље разрешивача у Царго.томл, које се може користити за омогућавање друге верзије разрешивача функција. Нова верзија дефинитора избегава комбиновање функција зависности наведених у одељку „[функције]“ где је неприкладно, на пример, када укључује зависност која захтева неку стандардну функцију у скриптама и макроима за прављење, али када се користи нестандардна функција у резултујућој извршној датотеци .

    До сада су могућности пакета поменуте више пута у графу зависности биле комбиноване. На пример, ако пројекат укључује зависност фоо која дефинише могућности А и Б, а овај пакет се користи у другим пакетима бар и баз, иако бар зависи од фоо са функцијом А, а баз зависи од фоо са функцијом Б, онда резултат ће бити царго ће комбиновати ове карактеристике и компајлирати фоо са укљученим функцијама А и Б. Овај метод може довести до функције која је омогућена због тога што је нека зависност некомпатибилна са циљним системом за који је направљена резултујућа верзија. На пример, када желите да користите верзију фоо-а са „#![но_стд]“ у извршном фајлу изграђеном са „#![но_стд]“, а истовремено користите фоо са „стд“ током изградње у изградњи. рс. Када наведете ресолвер="2" у Царго.томл, менаџер пакета ће сада покушати да правилно обради овај конфликт, одвајајући дев, хост и циљне зависности.

  • Карго имплементира опцију split-debuginfo, наведену у одељку „[profile]“, и одговарајућу заставицу „-Csplit-debuginfo=unpacked“ у rustc-у, нудећи имплементацију новог метода за чување информација о отклањању грешака, што елиминише потребу за позивањем услужног програма dsymutil и значајно убрзава процес изградње са информацијама о отклањању грешака у macOS.
  • Стабилизован макос "птр::аддр_оф!" и „птр::аддр_оф_мут!“, који вам омогућавају да креирате необрађене показиваче за неусклађена поља. усе стд::птр; #[репр(пацкед)] струцт Пацкед { ф1: у8, ф2: у16, } лет пацкед = Пацкед { ф1: 1, ф2: 2 }; // &пацкед.ф2 ће креирати неусклађени показивач који води до недефинисаног понашања лет рав_ф2 = птр::аддр_оф!(пацкед.ф2); ассерт_ек!(небезбедно { рав_ф2.реад_уналигнед() }, 2);
  • Нови део АПИ-ја је пребачен у стабилну категорију, укључујући стабилизоване следеће методе:
    • Арц::децремент_стронг_цоунт
    • Арц::инцремент_стронг_цоунт
    • Онце::цалл_онце_форце
    • Пеекабле::нект_иф_ек
    • Пеекабле::нект_иф
    • Сеек::стреам_поситион
    • арраи::ИнтоИтер
    • паниц::паниц_ани
    • птр::аддр_оф!
    • птр::аддр_оф_мут!
    • слице::филл_витх
    • слице::сплит_инцлусиве_мут
    • слице::сплит_инцлусиве
    • слице::стрип_префик
    • слице::стрип_суффик
    • стр::сплит_инцлусиве
    • синц::ОнцеСтате
    • задатак::Пробуди се
  • Трећи ниво подршке је имплементиран за платформе и386-ункновн-линук-гну, и486-ункновн-линук-гну, аарцх64_бе-ункновн-линук-гну, аарцх64-ункновн-линук-гну_илп32 и аарцх64_бе-ункновн-линук-гну_илп . Трећи ниво укључује основну подршку, али без аутоматизованог тестирања, објављивања званичних верзија и верификације могућности изградње кода.

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

Купите поуздан хостинг за сајтове са ДДоС заштитом, ВПС ВДС сервере 🔥 Купите поуздан веб хостинг са DDoS заштитом, VPS VDS сервере | ProHoster