Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Add support for snapshotting tables

Ouverte
#29 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
25/100
Type d'issue
Fonctionnalité
Clarté
À clarifier
Activité
À l'abandon
Stack technique
rust, wasm
Domaine
devtools

Piste de recherche

Commencez par suivre les chemins d’instrumentation et de snapshotting de Wizer décrits dans l’issue ; aucun fichier ni test n’est nommé. Déterminez comment représenter les identités de funcref entre des instances liées et gérer les fonctions importées et WASI, tout en préservant le comportement d’initialisation d’externref. La tâche est terminée lorsque les deux types de tables peuvent être snapshotés avec les cas de module-linking couverts.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Right now there are two potential kinds of tables:

  • funcref tables
  • externref tables

The latter are easy to support, since Wasm can't construct an externref, only receive it from the outside world. As long as we don't allow any externrefs into the Wasm during initialization, then all we have to do is record the initialized size of these tables.

funcref tables are a little harder. Wasm can create funcrefs via the ref.func instruction. So we need a way to figure out which function each wasmtime::FuncRef in a table we are snapshotting is (i.e. what is the local function index of the ith table element?). wasmtime doesn't expose anything like that. I have an idea, however:

  • during Wizer's instrumentation phase:
    • add two new globals to the module: $wizer_getting_func_index and $wizer_func_index
    • add the following snippet to the start of every function in the module:
      block
        global.get $wizer_getting_func_index
        i32.eqz
        br_if 0
        i32.const <this function's local index>
        global.set $wizer_func_index
        unreachable
      end
      
  • then, during snapshotting, to get a given funcref's local function index, we set the $wizer_getting_func_index global non-zero, call the function, and then it will set its local function index to the $wizer_func_index global and trap.
  • the dummy functions we create for imports will need a similar dance, but implemented in native code rather than Wasm. Something similar for wasi functions too.

The one problem is that local function index isn't quite enough in the face of module linking. Instead we will need both the instance "id" (whatever that this; DFS index?) as well as the local function index in that instance. More to think about w.r.t. module linking here...

Langage dominant
Rust
Étoiles
1.1k
Forks
64
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de bytecodealliance/wizer

Toutes les issues de bytecodealliance/wizer

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.