Python робить крок до повноцінної інтеграції з WebAssembly (Wasm): затверджено нову пропозицію PEP 816, яка визначає, як мова працюватиме з цим стандартом у майбутньому.
WebAssembly — це формат виконання програм, який дає можливість запускати код у браузері й інших середовищах із продуктивністю, близькою до нативної. Водночас сам стандарт не визначає, як програми взаємодіють із системою. Це завдання WASI, який надає доступ до файлової системи, мережі, таймерів та інших ресурсів.
До появи PEP 816 підтримка Wasm у CPython була неформалізованою. Не існувало чітких правил, які версії WASI та SDK використовуються, і чи сумісні вони між собою. У результаті різні комбінації могли працювати нестабільно або взагалі не запускатися.
Нова специфікація вводить ключове правило: для кожного релізу Python фіксуються конкретні версії WASI та WASI SDK, які залишаються незмінними протягом усього життєвого циклу цієї версії. Визначення цих версій відбуватиметься вже на етапі beta-релізу, що забезпечує ранню стабільність і передбачуваність для розробників.
Будь-які зміни цих версій можливі лише у виняткових випадках і потребують погодження керівного комітету Python.
Особливість Python у контексті Wasm полягає в тому, що мова не компілюється напряму у WebAssembly. Замість цього компілюється сам інтерпретатор CPython, який уже виконує Python-код. Це створює обмеження: для запуску потрібен повний інтерпретатор і стандартна бібліотека, а модулі з нативними розширеннями (наприклад, NumPy) не працюють без спеціальної компіляції.
PEP 816 покликаний частково вирішити ці проблеми за рахунок стандартизації середовища. Завдяки цьому:
- розробники знатимуть, під які версії WASI потрібно таргетити свої застосунки;
- стане простіше компілювати бібліотеки з розширеннями під Wasm;
- зменшиться кількість несумісностей між версіями Python і SDK;
- екосистема отримає передбачуваний цикл підтримки.
У результаті Python стає більш придатним для запуску в браузері, edge-середовищах і serverless-інфраструктурі, де WebAssembly набирає популярності.
PEP 816 фактично переводить підтримку WebAssembly у Python з експериментального стану в більш стабільний і передбачуваний. Це відкриває нові сценарії використання Python поза класичним бекендом і робить мову більш конкурентною в середовищах, де раніше домінували Rust і JavaScript.
Читайте також на ProIT, які мови програмування є мастхевом для старту в IT.