«У 10 разів швидше за Kotlin і в 3 рази швидше за Go»: в AWS пояснили, чому Rust став дефолтною мовою для нових проектів
Під час конференції re:Invent у Лас-Вегасі представники AWS провели окрему сесію про використання Rust всередині компанії. Виявилось, що ця мова тепер застосовується за замовчуванням для певних типів проектів, оскільки виявилося, що Rust набагато швидший, ніж Kotlin (мова JVM) або Go, частково завдяки уникненню збирання сміття, пише Devclass.
Збирання сміття – це метод, який використовується в багатьох мовах програмування для автоматичного виділення та звільнення пам’яті, але він також створює додаткові витрати, особливо помітні у великомасштабних розподілених додатках.
«Код Rust був у 10 разів швидшим, ніж наша ретельно налаштована реалізація Kotlin, незважаючи на відсутність спроб зробити його швидшим», — заявив технічний директор AWS Вернер Фогельс.
За словами Дарко Месароса, ще одного представника компанії, Rust тепер є мовою за замовчуванням для всіх проектів обробки даних в AWS. Хмарний гігант також використовує Rust для своїх мікровіртуальних машин (мікро-VMS) Bottlerocket та Firecracker.
Розробників може не здивувати, що Rust набагато продуктивніший за Kotlin, але порівняння з Go менш очевидне, оскільки Go також компілюється в нативний код. Тим не менш, як стверджують в AWS, код Go «витрачає 30% свого часу на збирання сміття». Перехід з Go на Rust призвів до того, що код став майже втричі швидшим і міг обробляти в набагато більше точок даних за секунду, ніж той самий код на Go.
Звичайно, код Go можна оптимізувати, зменшивши використання збирача сміття, використовуючи техніку, яка називається управління пам’яттю поза купою. Але проблема з цим полягає в тому, що такий код стає «непідтримуваним безладом», оскільки він не відповідає ідеї Go. Тому «ідіоматичний код Rust дає продуктивність, яку забезпечує ретельно оптимізований код Go».
Що стосується порад щодо використання Rust, то представники AWS рекомендували налаштовувати попередження clippy — clippy є лінтером Rust — щоб компіляції з попередженнями завершались з помилкою. Вони також рекомендували не використовувати функції обробки помилок unwrap() та expect() для інших цілей, окрім як для налагодження, та видалити їх у продакшн-коді. Під час використання Rust з Lambda вони запропонували використовувати емулятор Lambda для налагодження, що особливо корисно для коду, який використовує бібліотеку Tokio Networking, оскільки емулятор надає доступ до консолі Tokio, інструменту налагодження та профілювання, але сама Lambda цього не робить.
Підтримка функцій Rust у Lambda стала загальнодоступною минулого місяця, хоча вона вже деякий час працює добре. Для Rust немає середовища виконання Lambda; оскільки це нативний код, воно працює лише для ОС, зазвичай використовуючи Amazon Linux 2023.












Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: