Вышел Pyodide v0.26.0

Разработчики представили релиз Pyodide v0.26.0, который включает Python версии 3.12, множество мелких улучшений в интерфейсе внешних функций и системе сборки, а также значительные — в переключении стека. 

Обновления: 

поддержка pygame-ce (Pygame Community Edition). Графические библиотеки на основе SDL начали поддерживаться ещё в Pyodide 0.23.0, но в новом выпуске повышается стабильность работы и совместимость;

улучшения в поддержке переключения стека. Это позволяет выполнять асинхронные вызовы из синхронной функции Python. Теперь предстоят улучшения юзабилити. разработчики могут протестировать переключение стека в пробной версии источника JSPI в Chrome;

py.runPythonAsync(` from js import fetch from pyodide.ffi import run_sync def sync_fetch(url): resp = run_sync(fetch(url)) text = run_sync(resp.text()) return text print(sync_fetch(«https://example.com»)) `);

улучшения интерфейса внешних функций. Разработчики решили давние проблемы, связанные с преобразованием словарей в интерфейс внешних функций. Теперь toJs словаря возвращает LiteralMap. Любой ключ, который является строкой и действительным идентификатором JavaScript, можно найти путём прямого индексирования a.key, в дополнение к возможности поиска ключей с помощью .get, как и раньше.

from js import fetch, Object from pyodide.ffi import to_js async def python_fetch(url, options: dict[str, str]): return await fetch(url, to_js(options, dict_converter=Object.fromEntries))

Так, приведённый выше код можно упростить до:

await fetch(url, to_js(options))

Для адаптации Python JSON к JavaScript JSON без выполнения преобразования добавили PyProxy.asJsJson(). В будущем планируется добавить JsProxy.as_py_json();

улучшения в документации sphinx-js и JS API. Разработчики переписали часть инструмента sphinx-js, переместив логику typedoc из Python в JavaScript. Теперь новые функции и обновлять зависимости стало проще. Также удалось решить проблемы с рендерингом документации JS API Pyodide.

В будущих релизах разработчики намерены обновить системы сборки пакетов, отделив pyodide-build от среды выполнения Pyodide. Это обеспечит более быстрые обновления и выпуски FFI. Кроме того, сопровождающие портов смогут использовать последнюю версию pyodide-build и поддерживать старые версии среды выполнения Pyodide.

Обновление позволит также высвободить ёмкость для большего количества пакетов и сделает экосистему более устойчивой с точки зрения потребления как вычислительной мощности, так и обслуживания.

Разработчики находятся в процессе добавления целей Pyodide в cibuildwheel, который автоматизирует всю необходимую настройку.

Для оптимизации времени загрузки планируется использовать снимки памяти, которые могут реализовать после cpython. Вероятно, опцию внедрят к концу года.

Интерфейс внешних функций также будет обновляться. Разработчики стремятся к тому, чтобы каждая языковая конструкция JavaScript могла использоваться из Python и наоборот. Также планируется улучшить управление памятью, эргономику и производительность. По сравнению с ctypes и большинством других интерфейсов внешних функций, в Pyodide не требуется метаданных вызываемой функции. Разработчики уже начали решать эту проблему в Pyodide 0.26, но публично видимых изменений пока нет.

class Response_sig: def __init__(self, body: Any, /, *, status: int = 200, statusText: str = «Okay»): pass @staticmethod def json(obj: Json, /, *, status: int = 200, statusText: str = «Okay»): pass Response = Response.bind(Response_sig)

Источник: habr.com

0 0 голоса
Рейтинг новости
0
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии