ΠΠΈΠΊ ΠΠ΅ΡΠ°Π½ΡΠ΅ (
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π² Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ Π΄ΠΈΡΠΊΡΡΡΠΈΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ «Open Source Summit and Embedded Linux» ΠΠΈΠ½ΡΡ Π’ΠΎΡΠ²Π°Π»ΡΠ΄Ρ
- Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ «Fish in a Barrel»
ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄Π»Ρ ΡΠ΄ΡΠ° Linux Π½Π° ΡΠ·ΡΠΊΠ΅ Rust, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ Π·Π°ΡΠΈΡΡ Π½Π°Π±ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ ΠΏΡΠΎΡΠ»ΠΎΠ΅ΠΊ Π½Π°Π΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ ΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΡΠ΄ΡΠ°. ΠΡΠΎΡΠ»ΠΎΠΉΠΊΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π½Π° Π±Π°Π·Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΄ΡΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠΈΠ»ΠΈΡΡbindgen . ΠΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΡΠ»ΠΎΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Clang. Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠΎΡΠ»ΠΎΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΠ°ΠΊΠ΅Ρ staticlib. - ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈΠ· ΠΠΈΡΠ°ΠΉΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° Π² ΠΠΎΠ½ΠΊΠΎΠ½Π³Π΅
ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Rust Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² Π΄Π»Ρ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π²Π΅ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ bindgen Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠ»ΠΎΠ΅ΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΄ΡΠ°. Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² Π±Π΅Π· Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ΄ΡΠΎ — Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π² ΡΠ΄ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ Π΄Π»Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ², ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ Rust. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌΠΈ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ Π½Π° ΡΠΊΠΎΡΡΡ ΡΡΠΊΡ Π±Π΅Π· ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ Π°ΡΠ΄ΠΈΡΠ°. - Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°
C2Rust Π΄Π»Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π‘ΠΈ-ΠΊΠΎΠ΄Π° Π½Π° Rust,ΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΠ΄ΡΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΡΠ½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΊΠ°ΠΌΠΈ. ΠΠ· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°ΡΡΡΡ ΡΠ΄ΡΠ° ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ GCC, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π² C2Rust. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² C2Rust ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ GCC Π°ΡΡΠΈΠ±ΡΡΠΎΠ² inline, cold, alias, used ΠΈ section, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ inline-Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΠΈ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΡΠΎΠ²Π½Π΅Π½Ρ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, xregs_state). ΠΠ· ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅ Π‘ΠΈ-ΠΌΠ°ΠΊΡΠΎΡΡ Π² ΠΌΠ°ΠΊΡΠΎΡΡ Rust ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ C2Rust ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ Π‘ΠΈ-ΡΠΈΠΏΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ libc, Π½ΠΎ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΌΠΎΠ΄ΡΠ»ΡΡ ΡΠ΄ΡΠ°.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru