Comments (2)
Ah, now i finally understand how fn works in your go-fsm.
As for the usecase this is more of a performance check. I'm writing a go version of a logitech g13 trigger server[1]. But i would like to provide a way to define what would happen when the keys are triggered, but as it is for gaming input performance is important so i'm checking if i can get the script time down to an acceptable level.
A goja test script example:
bind := Bind{}
vm := goja.New()
vm.Set("KEY", func(call goja.FunctionCall) goja.Value {
return vm.ToValue(KEY[call.Arguments[0].ToString().String()])
})
vm.RunString(`
var keys = [KEY('LEFTSHIFT'), KEY('HOME')];
function Down(state, keyboard, mouse) {
keyboard.KeyDown(keys);
}
function Up(state, keyboard, mouse) {
keyboard.KeyUp(keys)
mouse.Click(state.X, state.Y)
}
`)
vm.ExportTo(vm.Get("Down"), &bind.Down)
vm.ExportTo(vm.Get("Up"), &bind.Up)
But i think i have what i need to get it working now. Thanks for the quick response!
[1] https://github.com/ecraven/g13
from tengo.
Hi! Can you tell me more about use cases so I can better help? Basically a compiled function is bytecode-compiled meaning it is supposed to be executed on the VM. Without knowing your use cases, my recommendation is to
- write the script that takes some global variables as inputs and assign outputs as global variables as well
- compile the script to get a compiled script instance.
- set input variables through compiled script, run it, and get the output values.
This way you can "execute" the script with different input values without compiling them every time.
s := script.New([]byte(`out := in * 5`))
s.Add("in", 0) // placeholder just to compile the script
c, _ := s.Compile() // pre-compile everything at this point
// actual executions
c.Set("in", 5) // assign input value(s)
_ = c.Run()
fmt.Println(c.Get("out").Value()) // prints 10
c.Set("in", 10) // assign input value(s)
_ = c.Run()
fmt.Println(c.Get("out").Value()) // prints 20
from tengo.
Related Issues (20)
- provide compiled.CloneWithoutGlobals() or make compiled's fields accessible
- Is there a example on the use of `Regexp`
- VSCode Extention Support & Monaco-editor language support, EBNF is wanted.
- Does Tengo Playground support code format or code compress?
- [Performance Improvement] Using pool to avoid stack and frames memory allocation
- Any plan to add settrace() functionality to VM?
- Changing Owners? HOT 2
- Isolated VM possible ? HOT 2
- Ability to call a CompiledFunc from a UserFunc @kcsampson this functionality is now available in the `tengo2` branch. The `Callable` interface and `CallableFunc` signatures have changed, so you might need to update your code to support that, but you will be able to call back to tengo code from go code provided you make the call from the same goroutine the VM is running on. HOT 1
- Support for centralized configuration and shared variables in separate Tengo scripts HOT 1
- FromInterface support HOT 1
- bug:invalid jump position:0 HOT 13
- binaryop and equals diff HOT 1
- Lack of means to obtain vm context
- UX improvement: conditionalize the installation of rescue handler...
- [question] How can I register native type into script? HOT 2
- FYI: wasm-compiled tengo playground running in a browser HOT 2
- Allow removal of specific attributes from builtin module
- Is there a plan to develop a VSCode plugin for Tengo to support Tengo code debugging?
- Map-object methods
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 tengo.