На саміті, що нещодавно пройшов, з технологій з відкритим вихідним кодом (Open Source Technology Summi — OSTS)
Системне програмування - це розробка та управління програмним забезпеченням, яке служить платформою для створення прикладних програм, забезпечуючи взаємодію останніх з процесором, оперативною пам'яттю, пристроями вводу-виводу та мережевим обладнанням. Системне програмне забезпечення створює спеціальну абстракцію у вигляді інтерфейсів, які допомагають створювати прикладне програмне забезпечення, не вникаючи в деталі того, як працює безпосередньо «залізо».
Сам Триплетт визначає системне програмування як "все, що не є додатком". Воно включає такі речі, як 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 був швидшим і підтримував будь-які типи даних, які міг використовувати мову асемблера, він також мав те, що Тріплетт назвав «аварійним люком», а саме підтримував у собі вставки коду мовою асемблера.
Тріплетт вважає, що 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 у галузі системного програмування. У
Можна припустити, що в першу чергу група FFI/C Parity займеться покращенням підтримки багатопоточності в Rust, впровадженням підтримки BFLOAT16, формату представлення чисел з плаваючою комою, який з'явився в нових процесорах Intel Xeon Scalable, а також стабілізацією вставок коду на асемблері.
Джерело: 3dnews.ru