Нашри забони барномасозии Rust 1.75 ва unikernel Hermit 0.6.7

Нашри забони барномасозии Rust 1.75, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии созмони мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди кор ҳангоми канорагирӣ аз истифодаи коллектори партовҳо ва вақти корӣ таъмин мекунад (вақти кор то оғозкунии асосӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Усулҳои коркарди хотираи Rust таҳиякунандаро аз хатогиҳо ҳангоми коркарди нишонаҳо наҷот медиҳанд ва аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, барҳам додани ишораҳои нул, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмин кардани сохтан ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Бехатарии хотира дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект, нигоҳ доштани мӯҳлати умри объект (миқёс) ва арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

Навовариҳои асосӣ:

  • Қобилияти истифодаи "async fn" ва аломати "->impl Trait" дар хислатҳои хусусӣ илова карда шуд. Масалан, бо истифода аз “->impl Trait” шумо метавонед усули хусусиятеро нависед, ки итераторро бармегардонад: trait Container { fn items(&self) -> impl Iterator; } impl Контейнер барои MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Шумо инчунин метавонед бо истифода аз "async fn" хислатҳоро эҷод кунед: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // васеъ карда мешавад: // fn fetch(&self, url: Url) -> impl Future; }

  • API барои ҳисоб кардани офсетҳои байт нисбат ба нишондиҳандаҳо илова карда шудааст. Ҳангоми кор бо нишондиҳандаҳои бараҳна (“*const T” ва “*mut T”), мумкин аст амалиётҳо барои илова кардани офсет ба нишондод талаб карда шаванд. Пештар, барои ин метавон сохти монанди "::add(1)" -ро истифода бурд, ки шумораи байтҳои мувофиқ ба андозаи "size_of::()" илова карда шавад. API-и нав ин амалиётро содда мекунад ва имкон медиҳад, ки офсетҳои байтро бидуни интиқоли аввал ба "*const u8" ё "*mut u8" идора кунед.
    • нишондиҳанда ::byte_add
    • нишондиҳанда :: byte_offset
    • нишондиҳанда ::byte_offset_from
    • нишондиҳанда ::byte_sub
    • нишондиҳанда :: wrapping_byte_add
    • нишондиҳанда :: wrapping_byte_offset
    • нишондиҳанда :: wrapping_byte_sub
  • Кор барои баланд бардоштани самараи компилятори rustc давом дода мешавад. Оптимизатори BOLT илова карда шуд, ки дар марҳилаи пас аз истинод кор мекунад ва маълумотро аз профили иҷрои қаблан омодашуда истифода мебарад. Истифодаи BOLT ба шумо имкон медиҳад, ки иҷрои компиляторро тақрибан 2% бо тағир додани тарҳбандии коди китобхонаи librustc_driver.so барои истифодаи самараноки кэши протсессор суръат бахшед.

    Сохтани компилятори rustc бо опсияи "-Ccodegen-units=1" барои беҳтар кардани сифати оптимизатсия дар LLVM дохил карда шудааст. Санҷишҳои анҷомдодашуда нишон медиҳанд, ки афзоиши кор дар сурати сохтани "-Ccodegen-units = 1" тақрибан 1.5%. Оптимизатсияҳои иловашуда бо нобаёнӣ танҳо барои платформаи x86_64-unknown-linux-gnu фаъол карда мешаванд.

    Оптимизатсияҳои қаблан зикршуда аз ҷониби Google барои кам кардани вақти сохтани ҷузъҳои платформаи Android, ки дар Rust навишта шудаанд, санҷида шуданд. Истифодаи "-C codegen-units=1" ҳангоми сохтани Android ба мо имкон дод, ки андозаи маҷмӯаро 5.5% кам карда, иҷрои онро 1.8% зиёд кунем, дар ҳоле ки вақти сохтани худи асбобҳо тақрибан ду баробар зиёд шуд.

    Фаъолсозии ҷамъоварии партовҳои вақти истинод (“--gc-sections”) афзоиши иҷроишро то 1.9%, оптимизатсияи вақти истинод (LTO) то 7.7% ва оптимизатсия дар асоси профил (PGO) то 19.8% фароҳам овард. Дар ниҳоӣ, оптимизатсияҳо бо истифода аз утилитаи BOLT татбиқ карда шуданд, ки имкон дод, ки суръати сохтмон то 24.7% афзоиш ёбад, аммо андозаи асбобҳо 10.9% афзоиш ёфт.

    Нашри забони барномасозии Rust 1.75 ва unikernel Hermit 0.6.7

  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • Файл :: set_modified
    • Файл :: set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Опсия :: as_slice
    • Опсия ::as_mut_slice
    • нишондиҳанда ::byte_add
    • нишондиҳанда :: byte_offset
    • нишондиҳанда ::byte_offset_from
    • нишондиҳанда ::byte_sub
    • нишондиҳанда :: wrapping_byte_add
    • нишондиҳанда :: wrapping_byte_offset
    • нишондиҳанда :: wrapping_byte_sub
  • Аттрибути "const", ки имкони истифодаи онро дар ҳама гуна контекст ба ҷои доимӣ муайян мекунад, дар функсияҳо истифода мешавад:
    • Ipv6Addr :: to_ipv4_mapped
    • MaybeUnit ::assume_init_read
    • MaybeUninit :: сифр
    • мем::дискриминант
    • mem:: сифр
  • Сатҳи сеюми дастгирӣ барои платформаҳои csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ва mipsel-unknown-netbsd амалӣ карда шудааст. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматикунонидашуда, нашри сохторҳои расмӣ ё тафтиши он, ки оё код сохта мешавад.

Илова бар ин, мо метавонем версияи нави лоиҳаи Hermit-ро қайд кунем, ки ядрои махсусгардонидашударо (unikernel) таҳия мекунад, ки бо забони Rust навишта шудааст ва асбобҳоро барои сохтани замимаҳои мустақил, ки метавонанд дар болои гипервизор ё сахтафзори холӣ бе қабатҳои иловагӣ кор кунанд, таъмин мекунад. ва бе системаи амалиётӣ. Ҳангоми сохтан, барнома ба китобхона статикӣ пайваст карда мешавад, ки мустақилона тамоми функсияҳои заруриро бидуни пайвастшавӣ ба ядрои OS ва китобхонаҳои системавӣ амалӣ мекунад. Рамзи лоиҳа таҳти иҷозатномаҳои Apache 2.0 ва MIT паҳн карда мешавад. Ассамблея барои иҷрои мустақилонаи замимаҳои дар Rust, Go, Fortran, C ва C++ навишташуда дастгирӣ карда мешавад. Лоиҳа инчунин боркунаки шахсии худро таҳия мекунад, ки ба шумо имкон медиҳад Hermit-ро бо истифода аз QEMU ва KVM оғоз кунед.

Манбаъ: opennet.ru

Илова Эзоҳ