Краят на ерата C? Разработчиците на Python предложиха да пренапишат ядрото на Rust
Гугъл и Mozilla към този момент минаха към Rust, в този момент е ред на Python.
Двама от разработчиците на CPython предложиха да се добави езикът за програмиране Rust към базата данни на Python. Ема Смит и нейният сътрудник са разгласили Pre-PEP (Предварителен механически документ), в който обосновават нуждата от тази стъпка. Засега се възнамерява Rust да се употребява единствено за писане на незадължителни разширителни модули, само че в бъдеще може да се трансформира в наложителна взаимозависимост.
Основната причина за внедряването на Rust е подобряването на сигурността на паметта. Езикът предотвратява цели класове неточности на равнище компилация: превишаване на масива, достъп до освободена памет и съревнования с данните в многонишковия код. Това е изключително настоящо за free-threaded Pytho, където сигурността на нишките е от сериозно значение. Проектът RustBelt даже е потвърдил публично коректността на гаранциите за сигурност на Rust за код без рискови структури.
CPython постоянно се сблъсква с неточности, дължащи се на неправилната обработка на паметта. Авторите на предлагането считат, че Rust коренно ще понижи броя на тези проблеми. Дори част от кода да остане рисков заради взаимоотношението с API на C, главната логичност на модулите ще бъде написана на безвредния Rust.
Rust към този момент се употребява интензивно от огромни планове написани на езиците C и C++. Ядрото на Linux, Android, Firefox и доста други системи ползват този език за възстановяване на надеждността. Гугъл към този момент заяви за позитивни резултати от потреблението на Rust в Android. Интересно е, че 25-33% от новите разширения на Python са написани на Rust – въвеждането на езика в самия CPython може в допълнение да подтиква тази наклонност.
В допълнение към сигурността Rust предлага високопроизводителни структури от данни от общоприетата библиотека. Вектори, хеш-таблици, мютекси – всички те са осъществени с нулеви разноски и са добре документирани. Макросистемата на Rust превъзхожда макросите на C: декларативните макроси са хигиенични и не прихващат инцидентно променливи, а процедурните макроси разрешават да се вършат мощни трансформации на кода. В библиотеката PyO3 се употребяват доста процедурни макроси, с цел да се опрости работата с API на Python.
Разработчиците към този момент са основали първообраз с модула _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.




