Files
hakorune/examples/py_native_sqrt_app.hako

36 lines
1.2 KiB
Plaintext

// Python native build demo (AOT/EXE) via plugin
//
// Build prerequisites:
// 1) System has CPython shared library available (e.g. libpython3.11.so)
// - Linux: export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
// - macOS: export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH
// - Windows: python3xx.dll resolvable via PATH or set PYTHONHOME
// 2) Build nyash and python plugin in release mode
// cargo build --release --features cranelift-jit
// (cd plugins/nyash-python-plugin && cargo build --release)
//
// Build native EXE:
// bash tools/build_aot.sh examples/py_native_sqrt_app.hako -o app
//
// Run (autodecode on makes float results come back as primitives):
// NYASH_PY_AUTODECODE=1 ./app
//
// Expected output line (among others):
// Result: 0
static box Main {
main() {
local c, py, mod, fun, r
c = new ConsoleBox()
py = new PyRuntimeBox()
mod = py.import("math")
fun = mod.getattr("sqrt")
// With NYASH_PY_AUTODECODE=1, this returns a primitive float 3.0
r = fun.call(9)
// Avoid string concatenation for AOT strict; print in two calls
c.println("sqrt(9) = ")
c.println(r)
return 0
}
}