Rapidus is a toy JavaScript engine with Tracing JIT.
1.2K
A toy JavaScript engine (now aiming for ES5)
Run the command below and follow the onscreen instructions.
curl https://sh.rustup.rs -sSf | sh
rustup override set nightly
# e.g. Ubuntu or Debian
apt-get install llvm-6.0
cargo test
ln -sf /usr/bin/llvm-config-6.0 /usr/bin/llvm-config
cargo run --release
cargo run --release example/XXX.js
I don't know.
brew. You should use macports or docker instead.THIS FEATURE IS EXPERIMENTAL
$ cargo new hello --lib
$ ls
rapidus hello
Cargo.toml$ cd hello
$ <YOUR EDITOR> Cargo.toml
# Add the followings to Cargo.toml
[dependencies]
rapidus = { path = "../rapidus" }
# other dependencies if you want...
[lib]
name = "hello"
crate_type = ["cdylib"] # try 'dylib' if it doesn't work.
src/lib.rs$ <YOUR EDITOR> src/lib.rs
// src/lib.rs
#[macro_use]
extern crate rapidus;
use rapidus::{
gc,
vm::{callobj::CallObject, error::RuntimeError, value::*, vm::VM},
};
#[no_mangle]
fn initialize(vm: &mut VM, _: &Vec<Value>, _: &CallObject) -> Result<(), RuntimeError> {
// make_object!() is useful
let module_exports = make_object!(
greet: Value::default_builtin_function(greet),
message: Value::String("hello".to_string())
);
vm.set_return_value(module_exports); // We have to return module.exports
Ok(())
}
#[no_mangle]
fn greet(vm: &mut VM, _: &Vec<Value>, _: &CallObject) -> Result<(), RuntimeError> {
println!("Hello World from Rust DLL!");
vm.set_return_value(Value::Undefined); // Remember to return a value you want
Ok(())
}
$ cargo build # --release as necessary
$ cp ./target/debug/libhello.(so|dll|dylib) ../rapidus
$ cd ../rapidus
$ ls
libhello.(so|dll|dylib) etc...
$ cargo run
> var mod = require('hello')
> mod.greet()
Hello World from Rust DLL!
> mod.message
'hello'
$ docker build -t rapidus:0.1.1 .
$ docker run -it rapidus:0.1.1
Content type
Image
Digest
Size
874.8 MB
Last updated
about 8 years ago
docker pull uint256/rapidus