cultivar/README.md

40 lines
1.6 KiB
Markdown
Raw Normal View History

2023-04-01 05:52:41 +00:00
## Idées
Idées pour un jeu comme [LeekWars](https://leekwars.com) :
* gradient de réaction chimique (à être appliqué par le serveur)
* population décentralisée, une instance de l'IA par case colonisée ou par cellule, ressources très restreintes (idée 1000i100)
* Ferris
* autres mascottes de langages
Nom : Cultivar ou Cultivars
## Problèmes
* passer des objets contenant des références ou pointeurs
* sandbox sûre
* limitation de mémoire et de temps d'exécution (watchdog ?)
* isoler les instances d'IA
* comment exposer des fonctions de l'hôte avec sc-executor ?
* ne pas exposer de fonctions, seulement tout donner en argument et récupérer une liste d'actions ensuite
mais c'est gênant pour les fonctions non-déterministes du point de vue du WASM, et il faut que le WASM maintienne l'état du jeu à jour
* comment le WASM peut-il appeler des méthodes sur une struct de l'hôte ?
* forker sc-executor-wasmtime pour que `create_runtime` prenne `&mut impl HostFunctions` et non juste son type. Mais alors si on veut exposer des méthodes `&self` il faut le refléter dans `#[runtime_interface]` or le WASM ne connaît pas le pointeur vers le `HostFunctions`.
* Un wrapper de `HostFunctions` ?
* créer une variante de `#[runtime_interface]` qui ajoute qqchose comme `&mut Context` dans les fonctions côté hôte
* https://github.com/demille/wasm-ffi
* https://demille.github.io/wasm-ffi/docs/rust/
* http://jakegoulding.com/rust-ffi-omnibus/
* refaire wasm-bindgen sans JS ?
* sp-runtime-interface mais virer les trucs inutiles
## Build
### Runtime (AI)
cargo build --release -p runtime
### Executor
cargo run -p executor