Skip to content

Metode Export Preview ​

Metode export memungkinkan Anda untuk mengekstrak fungsi atau logika spesifik yang terdaftar di dalam lingkungan VM, dan mengeksposnya ke aplikasi host Anda. Ini secara efektif menjembatani kesenjangan antara VM dan aplikasi host Anda.

Menggunakan TypeScript ​

Untuk TypeScript, metode export menyediakan cara mudah untuk mengambil dan memanggil fungsi yang didefinisikan di dalam VM. Dengan mengekspor fungsi, Anda dapat memperlakukan logika sisi VM sebagai kode asli, sehingga menyederhanakan proses.

ts
import { Capability, LightVM } from 'lightvm';

const vm = new LightVM({ caps: [Capability.Control] });
const tools = vm.tools();

const raw = [
  ['jump', 7],
  ['func', 'add', 2, 2, 6, 'a', 'b'],
  ['get', 'a'],
  ['get', 'b'],
  ['add', 'int'],
  ['return'],
  ['stop'],
  ['export', 'add'],
];

const optimized = tools.optimizeBytecode(raw);
vm.load(optimized);

const addFunc = vm.export('add');

console.log(addFunc.call(5, 6));
ts
import { Capability, LightVM } from 'lightvm';

const vm = new LightVM({
  caps: [Capability.Control, Capability.Observe],
  runtimeConfig: { nightly: true },
});
const tools = vm.tools();

const raw = [
  ['val', 'score'],
  ['push', '2'],
  ['set', 'score'],
  ['export', 'score'],
];

const optimized = tools.optimizeBytecode(raw);
vm.load(optimized);

const scoreVar = vm.export('score');

console.log(scoreVar.call());

Menggunakan Rust ​

Dalam Rust, metode export digunakan untuk memetakan fungsi sisi VM ke antarmuka yang dapat dipanggil oleh Rust. Mekanisme ini memungkinkan Anda untuk memanfaatkan hasil eksekusi VM secara langsung di dalam aplikasi Rust utama Anda.

rust
use lightvm::LightVM;
use lightvm::types::{capability::Capability, vmconfig::VmConfig};

fn main() {
  let mut vm = LightVM::new(VmConfig {
    caps: vec![Capability::Control],
    ..Default::default()
  });
  let tools = vm.tools();

  let raw = r#"[
    ["jump", 7],
    ["func", "add", 2, 2, 6, "a", "b"],
    ["get", "a"],
    ["get", "b"],
    ["add", "int"],
    ["return"],
    ["stop"],
    ["export", "add"]
  ]"#;

  let optimized = tools.optimize_bytecode(raw);
  vm.load(optimized);

  let add_func = vm.export("add".to_string());

  println!("{:?}", add_func.call(&mut vm, vec![5.into(), 6.into()]));
}
rust
use lightvm::LightVM;
use lightvm::types::{
  capability::Capability, runtime_config::RuntimeConfig, vmconfig::VmConfig,
};

fn main() {
  let mut vm = LightVM::new(VmConfig {
    caps: vec![Capability::Control, Capability::Observe],
    runtime_config: Some(RuntimeConfig { nightly: true }),
    ..Default::default()
  });
  let tools = vm.tools();

  let raw = r#"[
    ["val", "score"],
    ["push", "2"],
    ["set", "score"],
    ["export", "score"]
  ]"#;

  let optimized = tools.optimize_bytecode(raw);
  vm.load(optimized);

  let score_variable = vm.export("score".to_string());

  println!("{:?}", score_variable.call(&mut vm, vec![]));
}

INFO

Kapabilitas yang Dibutuhkan: Control