Rust 1.61 Rhyddhau Iaith Rhaglennu

Mae rhyddhau iaith raglennu pwrpas cyffredinol Rust 1.61, a sefydlwyd gan brosiect Mozilla, ond sydd bellach wedi'i datblygu dan nawdd y sefydliad dielw annibynnol Rust Foundation, wedi'i gyhoeddi. Mae'r iaith yn canolbwyntio ar ddiogelwch cof ac yn darparu'r modd i gyflawni gwaith tebyg iawn tra'n osgoi defnyddio casglwr sbwriel ac amser rhedeg (mae amser rhedeg yn cael ei leihau i gychwyn a chynnal a chadw sylfaenol y llyfrgell safonol).

Mae dulliau trin cof Rust yn arbed y datblygwr rhag gwallau wrth drin awgrymiadau ac yn amddiffyn rhag problemau sy'n codi oherwydd trin cof lefel isel, megis cyrchu man cof ar Γ΄l iddo gael ei ryddhau, dadgyfeirio awgrymiadau nwl, gor-redeg byffer, ac ati. Er mwyn dosbarthu llyfrgelloedd, darparu adeiladu a rheoli dibyniaethau, mae'r prosiect yn datblygu rheolwr pecyn Cargo. Cefnogir ystorfa crates.io ar gyfer cynnal llyfrgelloedd.

Darperir diogelwch cof yn Rust ar amser casglu trwy wirio cyfeiriadau, cadw golwg ar berchnogaeth gwrthrychau, cadw golwg ar oes gwrthrychau (scopes), ac asesu cywirdeb mynediad cof wrth weithredu cod. Mae Rust hefyd yn darparu amddiffyniad rhag gorlifiadau cyfanrif, yn gofyn am ymgychwyn gorfodol o werthoedd amrywiol cyn ei ddefnyddio, yn trin gwallau yn well yn y llyfrgell safonol, yn cymhwyso'r cysyniad o gyfeiriadau a newidynnau digyfnewid yn ddiofyn, yn cynnig teipio statig cryf i leihau gwallau rhesymegol.

Prif arloesiadau:

  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния собствСнных ΠΊΠΎΠ΄ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ функция main Π² Rust ΠΌΠΎΠ³Π»Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ Β«()Β» (unit), Ρ‡Ρ‚ΠΎ всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ статус Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ явно Π½Π΅ Π²Ρ‹Π·Π²Π°Π½Π° функция Β«process::exit(code)Β». Π’ Rust 1.26 ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°ΠΆΠ° Termination Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main Π±Ρ‹Π»Π° прСдоставлСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Β«OkΒ» ΠΈ Β«ErrΒ», ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ΄Π°ΠΌ EXIT_SUCCESS ΠΈ EXIT_FAILURE Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° языкС Π‘ΠΈ. Π’ Rust 1.61 Ρ‚ΠΈΠΏΠ°ΠΆ Termination ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½ Π² разряд ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ…, Π° для прСдставлСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ExitCode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ абстрагируСт спСцифичныС для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚ΠΈΠΏΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, прСдоставляя ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ константы SUCCESS ΠΈ FAILURE, Ρ‚Π°ΠΊ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ From<u8> для возвращСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. use std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(42); } ExitCode::SUCCESS }
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… с использованиСм выраТСния Β«const fnΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² любом контСкстС вмСсто констант. Π”Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π½Π° этапС компиляции, Π° Π½Π΅ Π² Ρ…ΠΎΠ΄Π΅ выполнСния, поэтому Π½Π° Π½ΠΈΡ… Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ограничСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ чтСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· констант. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Π²Π½ΡƒΡ‚Ρ€ΠΈ const-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с указатСлями Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ созданиС, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½ΠΎ Π½Π΅ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ); ограничСния Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ (trait bounds) для ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² const-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ T: Copy; динамичСски диспСтчСризируСмыС Ρ‚ΠΈΠΏΠ°ΠΆΠΈ (dyn Trait); Ρ‚ΠΈΠΏΡ‹ impl Trait для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • ДСскрипторы ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Stdin, Stdout ΠΈ Stderr Π² std::io Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅ΡŽΡ‚ cтатичСскоС врСмя ΠΆΠΈΠ·Π½ΠΈ (Β«β€˜staticΒ») ΠΏΡ€ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструкции Π²ΠΈΠ΄Π° Β«let out = std::io::stdout().lock();Β» с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ дСскриптора ΠΈ выставлСниСм Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.
  • Mae cyfran newydd o'r API wedi'i symud i'r categori stabl, gan gynnwys dulliau a gweithrediad nodweddion wedi'u sefydlogi:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Write для Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Termination
    • std::thread::JoinHandle::is_finished
  • Defnyddir y nodwedd β€œconst”, sy'n pennu'r posibilrwydd o'i ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, yn y swyddogaethau:
    • <*const T>::offset ΠΈ <*mut T>::offset
    • <*const T>::wrapping_offset ΠΈ <*mut T>::wrapping_offset
    • <*const T>::add ΠΈ <*mut T>::add
    • <*const T>::sub ΠΈ <*mut T>::sub
    • <*const T>::wrapping_add ΠΈ <*mut T>::wrapping_add
    • <*const T>::wrapping_sub ΠΈ <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ Β«Rust: A Critical RetrospectiveΒ» с ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠΉ ΠΎ языкС Rust послС написания Π½Π° Π½Ρ‘ΠΌ 100 тысяч строк ΠΊΠΎΠ΄Π° Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ микроядСрной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Xous, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°Ρ…. Из нСдостатков отмСчаСтся Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΉ для восприятия синтаксис, Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ развития языка, отсутствиС повторяСмых сборок, Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ΠΌ ΠΊ зависимостям Π² Crates.io, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ соблюдСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ дисциплины для написания бСзопасного ΠΊΠΎΠ΄Π°. Из возмоТностСй ΠΏΡ€Π΅Π²Π·ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… оТидания ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ срСдства для Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈ Β«Ρ…Π°ΠΊΠΎΠ²Β», Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ быстром создании ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ².

Ffynhonnell: opennet.ru

Ychwanegu sylw