Skip to content

Twisted way of submitting rust code to the BattleDev

Notifications You must be signed in to change notification settings

c-a-m-o/rust-battledev

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust battledev

La compétition d'algorithmique BattleDev supporte les langages suivants :

  • C
  • C#
  • C++
  • Go
  • Java
  • Kotlin
  • NodeJS
  • PHP
  • Python
  • Ruby
  • Scala
  • Swift

Cependant, il n'est pas possible de participer dans le langage Rust. Plutôt que de chercher à se plaindre qu'un langage aussi merveilleux ne soit pas supporté, l'objectif de ce projet est de montrer qu'il est en fait possible de participer au concours en Rust.

Le concept consiste d'abord à compiler le code source Rust en local vers une cible WebAssembly. WebAssembly étant supporté par NodeJS, il est possible d'exécuter le code compilé lors d'une soumission de code NodeJS. Afin d'éviter tout problème de copié / collé et d'envoi du code, le wasm compilé est encodé en base64 puis décodé à l'exécution.

Comme je ne connais pas encore les subtilités de WebAsssembly, le template de code provient en majorité du code généré par l'outil wasm-pack.

Utilisation

Tout d'abord il faut avoir installé Rust et NodeJS. Ensuite, si wasm-pack n'est pas installé sur votre machine :

cargo install wasm-pack

Pour générer le code source NodeJS pour l'exercice N :

  • Décommenter mod exN; et exN::main() dans lib.rs.
  • Lancer le script build via
node ./build.js

Le code sera généré dans un fichier output.js.

Si jamais à l'exécution un message d'erreur de ce type

LinkError: WebAssembly.Instance(): Import #0 module="__wbindgen_placeholder__" function="__wbg_print_b630494e95fbe301" error: function import requires a callable

apparaît, c'est qu'il faut changer le nom de la fonction print (ou readline selon le cas) à la ligne 131 (ou 124) du template par le nom spécifié.

Les codes générés ont été testés sur la plateforme Isograd et correspondent aux solutions des exercices de la BattleDev de novembre 2020.

Attention, si vous voulez tester le code en local, après avoir écrit les données dans l'entrée standart il faut finir avec une fin de fichier (Ctrl + D).

About

Twisted way of submitting rust code to the BattleDev

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published