Как стать автором
Поиск
Написать публикацию
Обновить

Вышел Pyodide v0.26.0

Время на прочтение3 мин
Количество просмотров4.1K

Разработчики представили релиз 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)

Теги:
Хабы:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Другие новости

Ближайшие события