Краят на ерата C? Разработчиците на Python предложиха да пренапишат ядрото на Rust

Най-четени

Даниел Десподов
Даниел Десподов
Новинар. Увличам се от съвременни технологии, информационна безопасност, спорт, наука и изкуствен интелект.

Google и Mozilla вече преминаха към Rust, сега е ред на Python.

Двама от разработчиците на CPython предложиха да се добави езикът за програмиране Rust към базата данни на Python. Ема Смит и нейният колега са публикували Pre-PEP (Предварителен технически документ), в който обосновават необходимостта от тази стъпка. Засега се планира Rust да се използва само за писане на незадължителни разширителни модули, но в бъдеще може да се превърне в задължителна зависимост.

Основната причина за внедряването на Rust е подобряването на безопасността на паметта. Езикът предотвратява цели класове грешки на ниво компилация: превишаване на масива, достъп до освободена памет и надпревари с данните в многонишковия код. Това е особено актуално за free-threaded Pytho, където безопасността на нишките е от критично значение. Проектът RustBelt дори е доказал официално коректността на гаранциите за безопасност на Rust за код без опасни конструкции.

CPython редовно се сблъсква с грешки, дължащи се на неправилната обработка на паметта. Авторите на предложението смятат, че Rust радикално ще намали броя на тези проблеми. Дори част от кода да остане опасен поради взаимодействието с API на C, основната логика на модулите ще бъде написана на безопасния Rust.

Краят на ерата C? Разработчиците на Python предложиха да пренапишат ядрото на Rust

Rust вече се използва активно от големи проекти написани на езиците C и C++. Ядрото на Linux, Android, Firefox и много други системи прилагат този език за подобряване на надеждността. Google вече съобщи за положителни резултати от използването на Rust в Android. Интересно е, че 25-33% от новите разширения на Python са написани на Rust – въвеждането на езика в самия CPython може допълнително да стимулира тази тенденция.

В допълнение към сигурността Rust предлага високопроизводителни структури от данни от стандартната библиотека. Вектори, хеш-таблици, мютекси – всички те са реализирани с нулеви разходи и са добре документирани. Макросистемата на Rust превъзхожда макросите на C: декларативните макроси са хигиенични и не прихващат случайно променливи, а процедурните макроси позволяват да се правят мощни трансформации на кода. В библиотеката PyO3 се използват много процедурни макроси, за да се опрости работата с API на Python.

Краят на ерата C? Разработчиците на Python предложиха да пренапишат ядрото на Rust

Разработчиците вече са създали прототип с модула _base64, който демонстрира ускорение при използване на Rust. За интеграцията ще е необходим нов крейт cpython-sys с FFI дефиниции на C API. Предлага се връзките да се генерират чрез bindgen, официалния инструмент на Rust, който се използва дори в различни проекти за Linux и Android.

Rust поддържа всички платформи от PEP 11 и дори повече. Всички платформи от първо ниво на Python са съвместими с първо или второ ниво на Rust с пълен набор от инструменти за разработчици. Кръстосаната компилация се настройва лесно – просто се задава желаната цел и се посочва линкерът.

Авторите са изоставили идеята за използване на готовата библиотека PyO3 в CPython. Това би създало ненужно ниво на абстракция и би забавило разработката: всеки нов API първо би бил добавян в PyO3, а след това версията би била актуализирана в CPython. С bindgen новите API се предоставят автоматично.

Съществува проблем с взаимната зависимост: компилаторът на Rust използва Python за bootstrap. Но има и решения. Можете да изградите стара версия на Python, след това Rust, а след това новия CPython. Скриптовете за bootstrap на Rust са съвместими дори с Python 2, така че проблемът е решим. Алтернативите са да се използва PyPy или Rust да се откаже от Python в процеса на изграждане.

За настоящите разработчици на CPython са налични учебни ресурси. Книгата за Rust предлага пълно въведение в езика, има също Rust за програмисти на C++ и официални уроци. Съществуват планове за създаване на екип от експерти по Rust и добавяне на ръководство в devguide. За да работите с аргументи на функции, може да се наложи да адаптирате Argument Clinic или да създадете процедурен макрос в Rust.

АбонаментВсичко важно от света на технологиите, директно в пощата ти.

С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!

4 Коментара
стари
нови оценка

Нови ревюта

Подобни новини