Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для написания Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² для ядра Linux Π½Π° языкС Rust

Π”ΠΆΠΎΡˆ Π’Ρ€ΠΈΠΏΠ»Π΅Ρ‚ (Josh Triplett), Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Intel ΠΈ входящий Π² ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚, ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Crates.io, Π² своём выступлСнии Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Open Source Technology Summit прСдставил Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ, Π½Π°Ρ†Π΅Π»Π΅Π½Π½ΡƒΡŽ Π½Π° Π΄ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ языка Rust Π΄ΠΎ ΠΏΠ°Ρ€ΠΈΡ‚Π΅Ρ‚Π° с языком Π‘ΠΈ Π² области систСмного программирования.

Π’ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅, которая находится Π² процСссС создания, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Rust совмСстно с ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌΠΈ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Intel подготовят спСцификации с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Rust для систСмного программирования. БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… манипуляций, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… процСссорных инструкций ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… свСдСний ΠΎ состоянии процСссора. Из ΡƒΠΆΠ΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… для Rust ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… возмоТностСй отмСчаСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… структур, объСдинСний (union), ассСмблСрных вставок (макрос «asm!») ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой BFLOAT16.

Π”ΠΆΠΎΡˆ считаСт, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ систСмного программирования Π·Π° Rust, Π° язык Π‘ΠΈ Π² соврСмСнных рСалиях ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° мСсто, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹Π΅ Π³ΠΎΠ΄Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Π» АссСмблСр. Rust
Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ избавляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΡ‚ свойствСнных языку Π‘ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π½ΠΎ ΠΈ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ соврСмСнных ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ программирования.

Π’ Ρ…ΠΎΠ΄Π΅ обсуТдСния выступлСния
Π”ΠΆΠΎΡˆΠ° Π±Ρ‹Π»Π° высказана идСя добавлСния Π² ядро Linux возмоТности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π½Π° языкС Rust, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ бСзопасныС ΠΈ Π±ΠΎΠ»Π΅Π΅ качСствСнныС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹, ΠΈΠ·Π±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ области памяти послС Π΅Ρ‘ освобоТдСния, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π°.

Π“Ρ€Π΅Π³ ΠšΡ€ΠΎΠ°-Π₯Π°Ρ€Ρ‚ΠΌΠ°Π½ (Greg Kroah-Hartman), ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ядра Linux, Π²Ρ‹Ρ€Π°Π·ΠΈΠ» Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ядро Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π½Π° языкС Rust, Ссли ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ прСимущСствами ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π‘ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ бСзопасныС обвязки Π½Π°Π΄ API ядра. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π“Ρ€Π΅Π³ рассматриваСт Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ ΠΎΠΏΡ†ΠΈΡŽ, Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Rust Π² число сборочных зависимостСй ΠΊ ядру.

Оказалось, Ρ‡Ρ‚ΠΎ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Π΄Π°Π½Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. НапримСр, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ «Fish in a Barrel» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ инструмСнтарий для написания Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для ядра Linux Π½Π° языкС Rust, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π½Π°Π±ΠΎΡ€ абстрактных прослоСк Π½Π°Π΄ интСрфСйсами ΠΈ структурами ядра. ΠŸΡ€ΠΎΡΠ»ΠΎΠΉΠΊΠΈ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Π±Π°Π·Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ядра ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ bindgen. Для сборки прослоСк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Clang. Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ прослоСк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ staticlib.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ развиваСтся Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, сосрСдоточСнный Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² для встраиваСмых систСм ΠΈ устройств ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ bindgen для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ прослоСк Π½Π° основС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ядра. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ бСзопасности Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π±Π΅Π· внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ядро — вмСсто создания Π² ядрС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции для Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², прСдлагаСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° этапС компиляции, примСняя Π±ΠΎΠ»Π΅Π΅ бСзопасный язык Rust. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ вострСбован производитСлями оборудования, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π½Π° ΡΠΊΠΎΡ€ΡƒΡŽ Ρ€ΡƒΠΊΡƒ Π±Π΅Π· провСдСния Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ Π°ΡƒΠ΄ΠΈΡ‚Π°.

НС вся задуманная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°, Π½ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΡƒΠΆΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ использован для написания Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° для Ethernet-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° LAN9512 USB, поставляСмого Π² ΠΏΠ»Π°Ρ‚Π΅ Raspberry Pi 3. Π’ качСствС эталонной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ написании Rust-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π±Ρ‹Π» использован ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ smsc95xx, написанный Π½Π° языкС Π‘ΠΈ. ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ модуля ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΎΡ‚ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π° Rust Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для устройств с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ рСсурсами.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru