Comments (7)
Hi! You have to use async variants of call / execution functions when running asynchronous code in Rune, like async_call
.
from rune.
@udoprog, I was able to figure that out but I'm stuck in another way. I'm building an app with Tauri and calling the VM from a Tauri Command.
I'm following this example: https://github.com/rune-rs/rune/blob/0.12.x/examples/examples/tokio_spawn.rs but I keep running into an issue with the Vm
not implementing Send
. Do you know any way to fix this?
from rune.
Yeah, pass the Arc<Unit>
and Arc<RuntimeContext>
around, and construct a Vm
(which is a cheap operation) when you need to execute something with send_execute
.
from rune.
But the error is on the send_execute
call. I was looking into how Tauri does async and it appears their async implementation runs every await point on a new thread...? So that means send_execute
is being run on a different thread than the other code, meaning it requires Vm
to require a Send
implementation.
I did try to spin up a new thread to get out of the Tauri runtime and run a generic tokio runtim, but I was trying to move the Vm
into that thread. I'll try to pass the Uint
and Runtime
to the thread and create the Vm
on the thread and see if that works.
I'll report back!
Thank you for your help.
from rune.
Note that send_execute
returns a VmSendExecution
, which is 'static
and implements Send
.
If you keep having issues, place put together a minimal reproduction and I might be able to help.
from rune.
@udoprog, I figured out my issue. It is actually a Rust language bug where it doesn't drop()
references correctly in async runtime.
rust-lang/rust#69663
Instead of this:
let vm = Vm::new(runtime, Arc::new(unit));
let execution = vm.clone().send_execute(["main"], (5u32,))?;
It should be this:
let execution = {
let vm = Vm::new(runtime, Arc::new(unit));
vm.clone().send_execute(["main"], (5u32,))?;
};
So that vm
is out of scope before the await
in:
execution.async_complete().await.unwrap();
or else there is a potential the vm
will be moved to a new thread at the await
point.
Thank you for your help! I hope this helps someone else.
from rune.
Glad to hear it. Note that you can do without the .clone()
too since you're constructing a Vm for the call.
from rune.
Related Issues (20)
- Flaky auto-formatting in vscode / Rune LSP crashes
- Broken auto-formatting for consecutive single line comments HOT 2
- Panic in rune-internal tracing logging while formatting anyhow `Result` wrapped in rune `Value` HOT 5
- Silly auto-formatting for chained method calls / builder pattern HOT 1
- Output capture on process in rune-modules is non-functional HOT 2
- Can not use vm_result on function taking `&mut self`
- Runes `std::collections::HashMap` is not accessible from rust extension types
- Missing docs for `#[rune::function(keep)]` HOT 2
- `#[rune::function]` fails when adding a 6th argument HOT 5
- Feature request: More accurate types in generated rune API documentation HOT 4
- New 0.13.x release? HOT 1
- Before releasing 0.14
- Rune LSP cargo broken with multi-binary crates HOT 2
- Formatting likes to add more and more blank lines (not idempotent) HOT 1
- request: Multiple match patterns
- Unwrap on Option is hard to use (moves value) HOT 1
- Formatting jank with comments at the trailing position in lists HOT 1
- Feature request: Raw string literals HOT 2
- Any::downcast_borrow_ref works with anyhow but not eyre HOT 2
- How to get Rune backtraces for native Results at runtime? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rune.