"Rust - майбутнє системного програмування, С - новий Асемблер" - виступ одного з провідних інженерів Intel

На саміті, що нещодавно пройшов, з технологій з відкритим вихідним кодом (Open Source Technology Summi — OSTS) Джош Тріплетт (Josh Triplett), провідний інженер Intel, розповів про те, що його компанія зацікавлена ​​в тому, щоб у найближчому майбутньому Rust досяг «паритету» з мовою C, що все ще домінує в області системної та низькорівневої розробки. У своєму виступі під заголовком "Intel і Rust: майбутнє системного програмування" він також розповів про історію системного програмування, про те, як C став мовою системного програмування "за умовчанням", які можливості Rust дають йому перевагу над C і як у найближчому майбутньому він зможе повністю замінити C у цій галузі програмування.

"Rust - майбутнє системного програмування, С - новий Асемблер" - виступ одного з провідних інженерів Intel

Системне програмування - це розробка та управління програмним забезпеченням, яке служить платформою для створення прикладних програм, забезпечуючи взаємодію останніх з процесором, оперативною пам'яттю, пристроями вводу-виводу та мережевим обладнанням. Системне програмне забезпечення створює спеціальну абстракцію у вигляді інтерфейсів, які допомагають створювати прикладне програмне забезпечення, не вникаючи в деталі того, як працює безпосередньо «залізо».

Сам Триплетт визначає системне програмування як "все, що не є додатком". Воно включає такі речі, як BIOS, прошивки, завантажувачі і ядра операційних систем, різні види вбудованого низькорівневого коду, а також реалізації віртуальних машин. Цікаво, що Тріплетт вважає, що веб-браузер - це теж системне програмне забезпечення, оскільки браузер давно став більшим, ніж "просто програмою", перетворившись на самостійну "платформу для веб-сайтів та веб-додатків".

У минулому більшість системних програм, у тому числі BIOS, завантажувачі та прошивки, писалися мовою асемблера. У 1960-х роках розпочалися експерименти щодо забезпечення апаратної підтримки мов високого рівня, що призвело до створення таких мов, як PL/S, BLISS, BCPL та ALGOL 68.

Потім, у 1970-х роках, Денніс Рітчі (Dennis Ritchie) створив мову програмування C (Сі) для операційної системи Unix. Створений мовою програмування B, яка навіть не мала підтримки типізації, C був наповнений потужними високорівневими функціями, які найкраще підходили для написання операційних систем і драйверів. Декілька компонентів UNIX, включаючи його ядро, були в кінцевому підсумку переписані на C. Надалі багато інших системних програм, включаючи базу даних Oracle, більшу частину вихідного коду Windows і операційну систему Linux, були також написані на C.

C отримав величезну підтримку у цьому напрямі. Але що саме змусило розробників перейти на нього? Тріплетт вважає, що для того, щоб мотивувати розробників перейти з однієї мови програмування на іншу, останній насамперед має забезпечити нові функції без втрати старих можливостей.

По-перше, мова має пропонувати «досить вражаючі» нові функції. «Він не може бути трохи кращим. Він має бути значно кращим, щоб виправдати зусилля та час інженерів, необхідний для переходу», — пояснює він. Порівняно з мовою асемблера С було багато речей, які він міг запропонувати. Він підтримував певною мірою безпечну типізацію, забезпечував кращу переносимість і продуктивність з високорівневими конструкціями, а також генерував загалом набагато більш читаний код.

По-друге, мова повинна забезпечувати підтримку старих можливостей, а це означає, що в історії з переходом на C розробники повинні були бути впевнені, що вона не менш функціональна, ніж мова асемблера. Триплетт пояснює: «Нова мова не може бути просто кращою, вона також має бути не гіршою». Крім того, що C був швидшим і підтримував будь-які типи даних, які міг використовувати мову асемблера, він також мав те, що Тріплетт назвав «аварійним люком», а саме підтримував у собі вставки коду мовою асемблера.

"Rust - майбутнє системного програмування, С - новий Асемблер" - виступ одного з провідних інженерів Intel

Тріплетт вважає, що C зараз стає тим, чим була мова асемблера багато років тому. "С - це новий Асемблер", - заявляє він. Тепер розробники шукають нову мову високого рівня, яка не тільки вирішить проблеми, що накопичилися в C, виправити які вже неможливо, але і також запропонує нові вражаючі можливості. Така мова має бути достатньо переконливою, щоб змусити розробників перейти на неї, повинна бути безпечною, забезпечувати автоматичне керування пам'яттю та багато іншого.

«Будь-яка мова, яка хоче бути кращою за C, повинна пропонувати набагато більше, ніж просто захист від переповнення буфера, якщо вона дійсно хоче стати переконливою альтернативою. Розробники зацікавлені у зручності використання та продуктивності, у написанні коду, який не вимагає пояснень та виконує більше роботи за меншу кількість рядків. Також необхідно вирішити проблеми безпеки. Простота використання та продуктивність нерозривно з нею пов'язані. Чим менше коду вам потрібно написати для досягнення чогось, тим менше у вас можливостей, щоб припуститися будь-яких помилок, пов'язаних з безпекою чи ні», — пояснює Тріплетт.

Порівняння Rust та C

Ще в 2006 році Грейдон Хоар (Graydon Hoare), співробітник Mozilla, почав писати Rust як особистий проект. А в 2009 році Mozilla почала спонсорувати розробку Rust для власних потреб, а також розширила команду подальшого розвитку мови.

Одна з причин, за якою Mozilla зацікавилася новою мовою, полягає в тому, що Firefox був написаний більш ніж на 4 мільйонах рядків коду C++ і мав досить багато критичних уразливостей. Rust був створений з урахуванням вимог безпеки та паралелізму, що робить його ідеальним вибором для переписування багатьох компонентів Firefox у рамках проекту Quantum з повної переробки архітектури браузера. Також Mozilla використовує Rust для розробки Servo, движка рендерингу HTML, який у майбутньому замінить поточний движок рендерингу Firefox. Багато інших компаній почали використовувати Rust для своїх проектів, включаючи Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu та багато інших.

Rust вирішує одну з найбільш важливих проблем мови C. Він пропонує автоматичне управління пам'яттю, тому розробникам не потрібно виділяти вручну, а потім звільняти її для кожного об'єкта в додатку. Що відрізняє Rust від інших сучасних мов, так це те, що він не має збирача сміття, який автоматично видаляє з пам'яті об'єкти, що не використовуються, а також середовища виконання, необхідної для його роботи, як, наприклад, Java Runtime Environment для Java. Натомість у Rust є концепції володіння, запозичення, посилань та часу життя. «У Rust є система декларування викликів об'єкта, що дозволяє вказати, чи використовує його власник, чи це просто запозичення. Якщо ви просто запозичаєте об'єкт, компілятор стежитиме за цим і гарантуватиме, що оригінал залишиться на місці, поки ви посилаєтеся на нього. А також Rust простежить, що об'єкт буде видалено з пам'яті відразу після завершення його використання, вставляючи відповідний виклик у код під час компіляції без додаткових витрат часу», — розповідає Тріплетт.

Відсутність свого середовища виконання також вважатимуться позитивною рисою Rust. Триплетт вважає, що мови, які виконуються з її допомогою, складно використовувати як інструмент для системного програмування. Як він пояснює: "Ви повинні ініціалізувати це середовище виконання, перш ніж зможете викликати будь-який код, ви повинні використовувати це середовище виконання для виклику функцій, і саме середовище виконання може запускати додатковий код за вашою спиною в несподівані моменти часу".

Також Rust прагне забезпечити безпечне паралельне програмування. Ті ж функції, які роблять його безпечним для пам'яті, відстежують такі речі, як те, якому потоку належить якийсь об'єкт і які об'єкти можуть передаватися між потоками, а які потребують блокування.

Всі ці функції роблять Rust досить переконливим, щоб розробники зуміли вибрати його як новий інструмент для системного програмування. Однак, з точки зору паралельних обчислень, Rust поки ще трохи відстає від C.

Триплетт збирається створити спеціальну робочу групу, яка займеться впровадженням у Rust необхідних функцією, щоб він зміг повністю зрівнятися, перевершити та замінити C у галузі системного програмування. У темі на Reddit, присвяченій його виступу, він повідомив, що «група FFI/C Parity знаходиться в процесі створення і ще не розпочала роботу», поки що він готовий відповісти на будь-які питання, а в майбутньому обов'язково опублікує найближчі плани щодо розвитку Rust в рамках його ініціативи усіх зацікавлених осіб.

Можна припустити, що в першу чергу група FFI/C Parity займеться покращенням підтримки багатопоточності в Rust, впровадженням підтримки BFLOAT16, формату представлення чисел з плаваючою комою, який з'явився в нових процесорах Intel Xeon Scalable, а також стабілізацією вставок коду на асемблері.



Джерело: 3dnews.ru

Додати коментар або відгук