**Before working on this** please talk to the Abstract Wikipedia team. This might (later, not now) be a good project for Outreachy, GSoC or similar, and we'd potentially be interested in mentoring/supporting this work, though not before launching Wikifunctions.
## Description
Some parts of the function evaluator have already been ported to Rust. This quarter, we can combine these parts into a Rust-based service to replicate the functionality of the current Node-based one.
**Desired behaviour/Acceptance criteria (returned value, expected error, performance expectations, //etc.//)**
[ ] new service can accept all current versions of the evaluator request format
[ ] new service can run function calls in the executor for the appropriate programming language
[ ] new service runs function calls in separate threads
[ ] new service maintains a pool of "hot" executor interfaces in order to avoid incurring WASI startup costs at request time
[ ] new service returns all (appropriate/feasible) metadata supported by the current Node-based evaluator
[ ] new service implements a time limit
[ ] new service implements a rate limit
----
## Motivation and Context
The [[https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-evaluator|function-evaluator]] is a critical part of the Wikifunctions stack. It is currently (January 2023) implemented in Node using Wikimedia's [[https://github.com/wikimedia/service-runner|service-runner]] within the [[https://github.com/wikimedia/service-template-node|service 'template']]. Although this is a flexible framework and standard for RESTful services across Wikimedia, it is not very performant and as a critical path through which every Wikifunctions call runs. Improving the speed and reliability of this is important.