Integracja modułów Wasm z systemem Pytigon opiera realizowana jest za pomocą modułu wasmer (https://github.com/wasmerio/wasmer) Pytigon nie dodaje wiele w temacie. Warto jednak wspomnieć o 2 elementach, z których być może będziesz chciał skorzystać.
ptig python -m ziglang build-lib -dynamic test_zig.zig -O ReleaseSmall -target wasm32-freestanding-musl
Przykładowy sposób użycia biblioteki webassembly także znajduje się w demo, patrz interfaces/views.py/test_interfaces Wygląda ona mniej więcej tak:
from wasmer import engine, wasi, Store, Module, ImportObject, Instance from wasmer_compiler_cranelift import Compiler import os
wasm_bytes = open("test.wasm", "rb").read()
store = Store(engine.Universal(Compiler)) module = Module(store, wasm_bytes)
wasi_env = ( wasi.StateBuilder("wasi_test_program") .argument("--test") .environment("COLOR", "true") .environment("APP_SHOULD_LOG", "false") .map_directory("the_host_current_dir", ".") .finalize() )
module = Module(store, wasm_bytes) instance = Instance(module) sum = instance.exports.add results = sum(100, 200) print(results)
W przypadku modułów webassembly po twojej stronie jest przygotowanie skompilowanego pliku *.wasm. Pytigon wpiera cały proces w małym zakresie, ponieważ nie ma takiej potrzeby. Raz skompilowane moduły możesz dołączyć do swojej aplikacji, nie powinno być problemów z ich uruchomieniem niezależnie z jakiego systemu operacyjnego w przyszłości będzie program uruchamiany ani z jakiej wersji pytigona. Oczywiście użycie funkcji zależne jest od biblioteki wasmer i Pytigon nie gwarantuje, że w przyszłości sposób użycia tej biblioteki się nie zmieni, nie sądzę jednak aby zmiany były znaczące;