Code Monkey home page Code Monkey logo

Comments (2)

cork avatar cork commented on August 22, 2024 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.

d5 avatar d5 commented on August 22, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.