wasmtime 0.1.0.alpha.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/README.md +32 -9
- data/lib/wasmtime/require.rb +26 -13
- data/lib/wasmtime/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 278e090fef9ae4f35850cc892273ddbe94b2b838b0fc619ca835a17505129957
|
4
|
+
data.tar.gz: fbafd3a60ace1ec5f4806ac94d86e73264feb16e5b4f781c09ad9927c070758e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '016450946bf0d7ee92ffbc44bdc1be90a83602a14a209e3c24e7cc438883845b0b19aa173288169beb5248a080205c8b1d9abe46b373868b72e5caed3e5831bb'
|
7
|
+
data.tar.gz: 8dda113d2501e84a1222dd5ccbc1683cc84490d30628f98f489c681db4e2712d0aa24d65261ae0f223377602d74293472e56166d6aae55d9253bebc78ce1d17d
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [Unreleased]
|
9
|
+
|
10
|
+
## [0.1.0] - 2020-05-07
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- Initial release.
|
15
|
+
- Support for calling exported functions on a module.
|
16
|
+
- Support for 32 and 64-bit integers and floats in arguments and as return values.
|
17
|
+
- Require patch for defining a Ruby module with functions for each export.
|
18
|
+
|
19
|
+
[unreleased]: https://github.com/dtcristo/wasmtime-ruby/compare/v0.1.0...HEAD
|
20
|
+
[0.1.0]: https://github.com/dtcristo/wasmtime-ruby/releases/tag/v0.1.0
|
data/README.md
CHANGED
@@ -42,13 +42,32 @@ Install the `wasmtime` gem. Pre-compiled binaries are available for
|
|
42
42
|
gem install wasmtime
|
43
43
|
```
|
44
44
|
|
45
|
-
|
46
|
-
`fibonacci.
|
45
|
+
WASM has two formats `*.wasm` (binary) and `*.wat` (human-readable text). Both
|
46
|
+
formats are supported. With the following `fibonacci.wat` file in your current
|
47
|
+
directory.
|
48
|
+
|
49
|
+
```wat
|
50
|
+
;; fibonacci.wat
|
51
|
+
(module
|
52
|
+
(export "fib" (func $fib))
|
53
|
+
(func $fib (param $n i32) (result i32)
|
54
|
+
(if (i32.lt_s (get_local $n) (i32.const 2))
|
55
|
+
(return (i32.const 1))
|
56
|
+
)
|
57
|
+
(return
|
58
|
+
(i32.add
|
59
|
+
(call $fib (i32.sub (get_local $n) (i32.const 2)))
|
60
|
+
(call $fib (i32.sub (get_local $n) (i32.const 1)))
|
61
|
+
)
|
62
|
+
)
|
63
|
+
)
|
64
|
+
)
|
65
|
+
```
|
47
66
|
|
48
|
-
|
49
|
-
allowing you to require any `*.wasm` module as if it were a
|
50
|
-
will internally create a `Wasmtime::Instance` and define a
|
51
|
-
functions for each export.
|
67
|
+
In a ruby file, `require 'wasmtime/require'` to activate the Wasmtime require
|
68
|
+
patch, allowing you to require any `*.wasm` or `*.wat` module as if it were a
|
69
|
+
Ruby file. Doing so will internally create a `Wasmtime::Instance` and define a
|
70
|
+
Ruby module with functions for each export.
|
52
71
|
|
53
72
|
Finally, invoke the `fib` export like so.
|
54
73
|
|
@@ -66,14 +85,18 @@ use this approach too.
|
|
66
85
|
```rb
|
67
86
|
require 'wasmtime'
|
68
87
|
|
69
|
-
instance = Wasmtime::Instance.new('fibonacci.
|
88
|
+
instance = Wasmtime::Instance.new('fibonacci.wat')
|
70
89
|
puts instance.funcs[:fib].call(11) #=> 89
|
71
90
|
```
|
72
91
|
|
92
|
+
## Benchmarks
|
93
|
+
|
94
|
+
None yet. But they will be impressive.
|
95
|
+
|
73
96
|
## Examples
|
74
97
|
|
75
|
-
More usage examples are provided in `examples/`. To run these, you first
|
76
|
-
|
98
|
+
More usage examples are provided in `examples/`. To run some of these, you first
|
99
|
+
need to compile the test WASM modules.
|
77
100
|
|
78
101
|
Install some Rust tools.
|
79
102
|
|
data/lib/wasmtime/require.rb
CHANGED
@@ -13,16 +13,24 @@ module Kernel
|
|
13
13
|
def require(path)
|
14
14
|
wasmtime_original_require(path)
|
15
15
|
rescue LoadError => load_error
|
16
|
-
|
16
|
+
try_load =
|
17
|
+
Proc.new do |path, extention|
|
18
|
+
path_with_extention =
|
19
|
+
path.end_with?(".#{extention}") ? path : "#{path}.#{extention}"
|
20
|
+
|
21
|
+
if path_with_extention.start_with?('.', '/', '~')
|
22
|
+
absolute_path = File.expand_path(path_with_extention)
|
23
|
+
return Wasmtime.load(absolute_path) if File.file?(absolute_path)
|
24
|
+
end
|
25
|
+
$LOAD_PATH.each do |load_dir|
|
26
|
+
absolute_path = File.expand_path(path_with_extention, load_dir)
|
27
|
+
return Wasmtime.load(absolute_path) if File.file?(absolute_path)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
try_load.call(path, 'wasm')
|
32
|
+
try_load.call(path, 'wat')
|
17
33
|
|
18
|
-
if path.start_with?('.', '/', '~')
|
19
|
-
absolute_path = File.expand_path(path)
|
20
|
-
return Wasmtime.load(absolute_path) if File.file?(absolute_path)
|
21
|
-
end
|
22
|
-
$LOAD_PATH.each do |load_dir|
|
23
|
-
absolute_path = File.expand_path(path, load_dir)
|
24
|
-
return Wasmtime.load(absolute_path) if File.file?(absolute_path)
|
25
|
-
end
|
26
34
|
raise load_error
|
27
35
|
end
|
28
36
|
|
@@ -43,12 +51,17 @@ module Wasmtime
|
|
43
51
|
|
44
52
|
def load(absolute_path)
|
45
53
|
return false if $LOADED_FEATURES.include?(absolute_path)
|
46
|
-
|
47
|
-
|
48
|
-
|
54
|
+
filename = absolute_path.split(File::SEPARATOR).last
|
55
|
+
module_name =
|
56
|
+
if filename.end_with?('.wasm')
|
57
|
+
filename.delete_suffix('.wasm')
|
58
|
+
else
|
59
|
+
filename.delete_suffix('.wat')
|
60
|
+
end
|
61
|
+
mod = Object.const_set(module_name.camelize, Module.new)
|
49
62
|
instance = Wasmtime::Instance.new(absolute_path)
|
50
63
|
instance.funcs.each do |name, func|
|
51
|
-
mod.define_singleton_method(name) {
|
64
|
+
mod.define_singleton_method(name) { |*args| func.call(*args) }
|
52
65
|
end
|
53
66
|
$LOADED_FEATURES << absolute_path
|
54
67
|
true
|
data/lib/wasmtime/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wasmtime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cristofaro
|
@@ -20,6 +20,7 @@ extensions:
|
|
20
20
|
extra_rdoc_files: []
|
21
21
|
files:
|
22
22
|
- ".cargo/config"
|
23
|
+
- CHANGELOG.md
|
23
24
|
- Cargo.lock
|
24
25
|
- Cargo.toml
|
25
26
|
- LICENSE
|
@@ -42,6 +43,7 @@ licenses:
|
|
42
43
|
- Apache-2.0 WITH LLVM-exception
|
43
44
|
metadata:
|
44
45
|
source_code_uri: https://github.com/dtcristo/wasmtime-ruby
|
46
|
+
changelog_uri: https://github.com/dtcristo/wasmtime-ruby/blob/master/CHANGELOG.md
|
45
47
|
post_install_message:
|
46
48
|
rdoc_options: []
|
47
49
|
require_paths:
|
@@ -53,9 +55,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
53
55
|
version: 2.5.0
|
54
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
57
|
requirements:
|
56
|
-
- - "
|
58
|
+
- - ">="
|
57
59
|
- !ruby/object:Gem::Version
|
58
|
-
version:
|
60
|
+
version: '0'
|
59
61
|
requirements: []
|
60
62
|
rubygems_version: 3.1.2
|
61
63
|
signing_key:
|