WebAssembly fixes, faster host reads, and v0.0.32
Six hours after v0.0.31: WebAssembly in a large program runs on Wasmtime, externref values are let go, the WebAssembly modules hand a host its app's state as one JSON text, and an arrow in a class method sees the method's locals.
v0.0.31 chose a VM's WebAssembly runtime by whether its JIT was on, and a JavaScript program of 256 functions or more starts with its JIT off for its size, as does one compiled lazily: every real script fell to the wasmi interpreter, and a counting loop took 42 ms in a small file and 321 ms in one that also held 300 unrelated functions. Only the JIT turned off now sends WebAssembly to wasmi (b1ad3d32). Wasmtime's runtime also kept every JavaScript value WebAssembly was ever given as an externref; a module passing objects by reference, as wasm-bindgen's do, kept them all, and an app built that way grew from 3.6 GB to 9.1 GB in two minutes in zipp-browser. A value is now let go once WebAssembly can no longer reach it, and the app holds steady at about 2.3 GB (8a907ba8).
The WebAssembly modules' getGlobalsBatch used to build what it returned property by property across the boundary, about eleven calls a property; it now writes a batch as one JSON text, and reading a 400-object simulation's state takes 1.4 ms in Node instead of 8.3 (29f8dbdf). Reflect.set and Object.defineProperty read a descriptor in place, so glue shaped like wasm-bindgen's runs in 820 ms instead of 1,298 (b952aca0), and WebAssembly's members are writable data properties, as in a browser (47dbb574). An arrow function in a class method now sees the method's locals over the class's name, which minified code names alike; softn.com's apps would not open without it (08f34f83). That fix broke one Test262 test, a static initializer's arrow reading its class's name through eval, and the release gate refused the first tagged commit for it; v0.0.32 was published on 29 October from the fix, e312cf40. Its notes also describe everything v0.0.31 brought.