Rust 1.40 бағдарламалау тілі шығарылымы

жарияланды жүйелік бағдарламалау тілінің шығарылымы Тот 1.40, Mozilla жобасымен құрылған. Бұл тіл жад қауіпсіздігіне назар аударады, жадты автоматты басқаруды қамтамасыз етеді және қоқыс жинағышты және жұмыс уақыты.

Rust жадты автоматты басқаруы әзірлеушіні көрсеткішті манипуляциялаудан босатады және бос жадқа қол жеткізу, нөлдік көрсеткіш сілтемелері, буфердің асып кетуі және т.б. сияқты төмен деңгейлі жад манипуляциясынан туындайтын мәселелерден қорғайды. Кітапханаларды тарату, құрастыруды қамтамасыз ету және жоба бойынша тәуелділіктерді басқару үшін пакет менеджері әзірленуде. жүк, бағдарламаға қажетті кітапханаларды бір рет басу арқылы алуға мүмкіндік береді. Хост кітапханалары үшін репозиторийге қолдау көрсетіледі crates.io.

басты инновациялар:

  • «Төлсипатының көмегімен құрылымдарды (құрылым) және тізімдерді (нұсқа блогы бар нөмір) белгілеу мүмкіндігі қосылды.#[толық_жоқ]", ол ол мүмкіндік береді болашақта жарияланған құрылымдар мен тізімдерге жаңа өрістер мен опцияларды қосыңыз. Мысалы, ашық түрде жарияланған өрістері бар құрылымдары бар модульдерді әзірлеушілер болашақта жаңа өрістер қосылуы мүмкін құрылымдарды белгілеу үшін "#[толық емес]" пайдалана алады. Осы уақытқа дейін бұл жағдайда әзірлеуші ​​өрістерді жеке жариялау және өрістердің өзгермейтін тізіміне байланыстыру арасында таңдау жасауға мәжбүр болды. Жаңа атрибут бұл шектеуді жояды және бұрын құрастырылған сыртқы кодты бұзу қаупінсіз болашақта жаңа өрістерді қосуға мүмкіндік береді. Жәшік бумаларында «сәйкестік» бөліміндегі опцияларды сәйкестендіру кезінде болашақ ықтимал өрістерді қамтитын «_ => {...}» маскасының нақты анықтамасы қажет, әйтпесе жаңа өрістерді қосу кезінде қате көрсетіледі.
  • Қосылды mac!() процедуралық макросын тип контекстінде шақыру мүмкіндігі. Мысалы, егер «түрге_кеңейту» процедуралық макрос болса, «Foo type = type_to_expand!(bar);» деп жазуға болады.
  • «extern { ... }» блоктарында қосылды процедуралық және атрибуттық макростарды, соның ішінде «bang!()» макростарын пайдалану мүмкіндігі, мысалы:

    макро_ережелер! make_item { ($name:ident) => { fn $name(); } }

    сыртқы {
    жасау_элемент!(альфа);
    жасау_элемент!(бета);
    }

    сыртқы «С» {
    #[менің_тұлғам_макросы] fn foo();
    }

  • Макростарда жүзеге асырылды «макро_ережелер!» элементтерін құру мүмкіндігі. "макро_ережелер!" функция тәрізді макростарда («mac!()») және атрибуттар түріндегі макростарда («#[mac]») мүмкін.
  • $m:meta салыстыру элементінде қосылды ерікті таңбалауыштарды санау мәндерін қолдау («[TOKEN_STREAM]», «{TOKEN_STREAM}» және «(TOKEN_STREAM)»), мысалы:

    макро_ережелер! қабылдау_мета { ($м:мета) => {}}
    қабылдау_мета!( менің::жолым );
    қабылдау_мета!( менің::жол = "жарық" );
    қабылдау_мета!( менің::жолым ( a b c ) );
    қабылдау_мета!( менің::жолым [ a b c ] );
    қабылдау_мета!( менің::жол { a b c } );

  • Rust 2015 режимінде NLL (Лексикалық емес өмір) әдісін пайдаланып айнымалы мәндерді (қарыз тексерушісі) тексеру кезінде анықталған мәселелер үшін қате шығысы қосылады. Бұрын ескертулер Rust 2018 режимінде іске қосылған кезде қателермен ауыстырылды.
    Өзгеріс Rust 2015 режиміне дейін ұзартылғаннан кейін әзірлеушілер ақырында қол жеткізе алды құтылу ескі қарыз тексерушісінен.

    Еске салайық, қарызға алынған айнымалылардың қызмет ету мерзімін есепке алудың жаңа механизміне негізделген тексеру жүйесі ескі тексеру коды назардан тыс қалған кейбір мәселелерді анықтауға мүмкіндік берді. Мұндай тексерулер үшін қате шығысы бұрын жұмыс істейтін кодпен үйлесімділікке әсер етуі мүмкін болғандықтан, бастапқыда қателердің орнына ескертулер шығарылды.

  • Оны тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын «const» атрибуты is_power_of_two функциясы үшін қолданылады (таңбасыз бүтін сандар үшін).
  • API жаңа бөлігі тұрақты санатқа жылжытылды, соның ішінде todo!() макросы және slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, әдістер тұрақтандырылды.
    Опция::as_deref, Опция::as_deref_mut, Опция::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32 f64}::from_be_bytes, {f32,f64}::from_le_bytes және {f32,f64}::from_ne_bytes.

  • Пакет менеджерінде жүк
    жүзеге асырылды дискідегі компилятордың ескертулерін кэштеу. «Жүк метадеректері» пәрменіне «жүк метадеректері» опциясы қосылды--сүзгі-платформа" тәуелділік ажыратымдылығы бағанында көрсетілген мақсатты платформаға байланыстырылған пакеттерді ғана көрсету үшін. Жарамды TLS нұсқаларын анықтау үшін http.ssl нұсқасы конфигурациясының опциясы қосылды.
    Бөлімді жариялау мүмкіндігі қосылды »әзірлеушіге тәуелділіктер"" нұсқасы" пернесін көрсетпей.

  • Rustc компиляторы thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 және mips64el-unknown-linux-muslabi64 мақсатты платформаларына үшінші деңгейлі қолдауды қамтамасыз етеді. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз және ресми құрастыруларды жариялаусыз.

Ақпарат көзі: opennet.ru

пікір қалдыру