Skip to content

Metode Compile ​

Setelah menginisialisasi VM dan menyiapkan lingkungan Anda, Anda dapat memproses dan mengompilasi konfigurasi bytecode Anda menjadi biner target.

Menggunakan TypeScript ​

Untuk TypeScript, Anda dapat meneruskan array instruksi mentah langsung ke loader, menerapkan alat optimasi, dan menyiapkan konfigurasi kompilasi Anda dengan mulus.

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

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

const raw = [
  ['push', 5],
  ['val', 'x'],
  ['set', 'x'],
  ['get', 'x'],
  ['println'],
];

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

vm.compile({
  targetArch: TargetArch.AArch64,
  fileType: FileType.Binary,
  path: './bin/output',
});

Menggunakan Rust ​

Dalam Rust, Anda biasanya bekerja dengan string instruksi mentah, mengoptimalkannya menggunakan alat bantu, dan meneruskan struktur CompileConfig yang berisi TargetArch dan FileType langsung ke metode .compile().

rust
use lightvm::LightVM;
use lightvm::types::{
  vmconfig::VmConfig,
  capability::Capability,
  compile_config::CompileConfig,
  target_arch::TargetArch,
  file_type::FileType
};

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

  let raw = r#"[
    ["push", 5],
    ["val", "x"],
    ["set", "x"],
    ["get", "x"],
    ["println"]
  ]"#;

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

  vm.compile(CompileConfig {
    target_arch: TargetArch::AArch64,
    file_type: FileType::Binary,
    path: "./bin/output",
  });
}
rust
use lightvm::LightVM;
use lightvm::types::{
  vmconfig::VmConfig,
  capability::Capability,
  compile_config::CompileConfig,
  target_arch::TargetArch,
  file_type::FileType
};

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

  let raw = serde_json::json!([
    ["push", 5],
    ["val", "x"],
    ["set", "x"],
    ["get", "x"],
    ["println"]
  ]);

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

  vm.compile(CompileConfig {
    target_arch: TargetArch::AArch64,
    file_type: FileType::Binary,
    path: "./bin/output",
  });
}

Arsitektur Target ​

Berikut adalah status kompilasi untuk arsitektur perangkat keras yang didukung:

ArsitekturStatusKompilasi
AArch64nightly✓

Jenis File ​

Ringkasan format file yang didukung dan digunakan di seluruh pipeline:

JenisDeskripsi
AssemblyRepresentasi teks yang mudah dibaca manusia dari instruksi mesin tingkat rendah, berfungsi sebagai langkah perantara sebelum pembuatan bytecode akhir atau kode mesin.
BinaryFormat eksekusi siap-mesin yang dikompilasi, terdiri dari byte mentah dan opcode yang dirancang untuk dieksekusi langsung oleh runtime atau perangkat keras.

INFO

Kapabilitas yang Dibutuhkan: Control