Вышел 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)


ссылка на оригинал статьи https://habr.com/ru/articles/817633/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *