πŸ”₯ Названа мСрзкая Ρ„ΠΈΡ‡Π° языка Rust

BorrowedBuf: ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ночная Ρ„ΠΈΡ‡Π° Rust для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ Π² опСрациях Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Она ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π»Π°ΡΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ΅ Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ·ΠΊΡƒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ.

πŸ”₯ Названа Ρ…ΡƒΠ΄ΡˆΠ°Ρ Ρ„ΠΈΡ‡Π° языка Rust

BorrowedBuf β€” это ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Rust, задуманная для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ Π² опСрациях Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.

Она позволяСт ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти ΠΈ слСдит Π·Π° Ρ‚Π΅ΠΌ, какая Π΅Ρ‘ Ρ‡Π°ΡΡ‚ΡŒ ΡƒΠΆΠ΅ занята.

Π—Π°Π΄Π°Ρ‡Π° состоит Π² ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ лишнСй ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ Π±ΡƒΡ„Π΅Ρ€ заполняСтся нулями Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, хотя Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… пСрСзаписываСт содСрТимоС:

			fn slow_copy(     mut rd: impl std::io::Read,     mut wr: impl std::io::Write, ) -> std::io::Result {     loop {         let mut buf = [0; 4096];         let read = rd.read(&mut buf)?;         if read == 0 {             break Ok(());         }         wr.write_all(&buf[..read])?;     } } 		

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ BorrowedBuf

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ BorrowedBuf Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число Π²ΠΎΠ·Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. НиТС пСрСчислСны ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

  1. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ: BorrowedBuf Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… API, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ read_buf. ΠŸΡ€ΠΈ отсутствии Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Rust Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ нулями, Ρ‡Ρ‚ΠΎ обнуляСт всю Π²Ρ‹Π³ΠΎΠ΄Ρƒ. Π­Ρ‚ΠΎ создаСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ обновлялись ΠΈΠ»ΠΈ ΡƒΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ hex ΠΈΠ»ΠΈ base64.
  2. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: функция Π² ΠΈΠ΄Π΅Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΈΠΏΠΎΠΌ u8, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Ρ‘ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сборщики случайных Π΄Π°Π½Π½Ρ‹Ρ…).
  3. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования: BorrowedBuf Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ для прСдотвращСния ошибок. НСвСрноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π±ΡƒΡ„Π΅Ρ€ всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π·Π°Π½ΠΎΠ²ΠΎ, нивСлируя ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ.
  4. ЛогичСская ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°: модСль раздСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ части, Ρ‡Ρ‚ΠΎ услоТняСт восприятиС. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Vec ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ стандартными структурами для упрощСния понимания API.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ BorrowedBuf Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ. Одно ΠΈΠ· обсуТдаСмых Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ β€” Ρ‚Π°ΠΊ называСмая Β«Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΊΠ°Β» Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти (freeze), которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π±Ρ‹ бСзопасно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΉ ΠΊΠ°ΠΊ с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅:  HONOR Magic V5 ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π²ΠΆΠΈΠ²ΡƒΡŽ Π½Π° фотографиях

РСализация ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° Π±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² языкС Rust, Π² частности Π² аспСктах управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ сСмантикС взаимодСйствия с систСмными страницами памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, использованиС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ MADV_FREE).

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ? ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ:
CyberSafe: ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ