<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in memory.rs</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2015</copyright>
    <generator>Java</generator><item>
        <title>94740588 - Migrate the Wasmtime CLI to `wasmtime::error` (#12295)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#94740588</link>
        <description>Migrate the Wasmtime CLI to `wasmtime::error` (#12295)* Migrate wasmtime-cli to `wasmtime::error`* migrate benches to `wasmtime::error` as well* Remove new usage of anyhow that snuck in

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Fri, 09 Jan 2026 19:15:48 +0000</pubDate>
        <dc:creator>Nick Fitzgerald &lt;fitzgen@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>9ce3ffe1 - Update some CI dependencies (#7983)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#9ce3ffe1</link>
        <description>Update some CI dependencies (#7983)* Update some CI dependencies* Update to the latest nightly toolchain* Update mdbook* Update QEMU for cross-compiled testing* Update `cargo nextest` for usage with MIRIprtest:full* Remove lots of unnecessary imports* Downgrade qemu as 8.2.1 seems to segfault* Remove more imports* Remove unused winch trait method* Fix warnings about unused trait methods* More unused imports* More unused imports

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Thu, 22 Feb 2024 23:54:03 +0000</pubDate>
        <dc:creator>Alex Crichton &lt;alex@alexcrichton.com&gt;</dc:creator>
    </item>
<item>
        <title>b86cba98 - fixed typo in examples/memory.rs (#5576)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#b86cba98</link>
        <description>fixed typo in examples/memory.rs (#5576)

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Tue, 17 Jan 2023 02:02:23 +0000</pubDate>
        <dc:creator>Daniel Marin &lt;60114322+danielmarinq@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>b0939f66 - Remove explicit `S` type parameters (#5275)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#b0939f66</link>
        <description>Remove explicit `S` type parameters (#5275)* Remove explicit `S` type parametersThis commit removes the explicit `S` type parameter on `Func::typed` and`Instance::get_typed_func`. Historical versions of Rust required thatthis be a type parameter but recent rustcs support a mixture of explicittype parameters and `impl Trait`. This removes, at callsites, asuperfluous `, _` argument which otherwise never needs specification.* Fix mdbook examples

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Wed, 16 Nov 2022 05:04:26 +0000</pubDate>
        <dc:creator>Alex Crichton &lt;alex@alexcrichton.com&gt;</dc:creator>
    </item>
<item>
        <title>e68aa995 - Implement the memory64 proposal in Wasmtime (#3153)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#e68aa995</link>
        <description>Implement the memory64 proposal in Wasmtime (#3153)* Implement the memory64 proposal in WasmtimeThis commit implements the WebAssembly [memory64 proposal][proposal] inboth Wasmtime and Cranelift. In terms of work done Cranelift ended upneeding very little work here since most of it was already prepared for64-bit memories at one point or another. Most of the work in Wasmtime islargely refactoring, changing a bunch of `u32` values to something else.A number of internal and public interfaces are changing as a result ofthis commit, for example:* Acessors on `wasmtime::Memory` that work with pages now all return  `u64` unconditionally rather than `u32`. This makes it possible to  accommodate 64-bit memories with this API, but we may also want to  consider `usize` here at some point since the host can&apos;t grow past  `usize`-limited pages anyway.* The `wasmtime::Limits` structure is removed in favor of  minimum/maximum methods on table/memory types.* Many libcall intrinsics called by jit code now unconditionally take  `u64` arguments instead of `u32`. Return values are `usize`, however,  since the return value, if successful, is always bounded by host  memory while arguments can come from any guest.* The `heap_addr` clif instruction now takes a 64-bit offset argument  instead of a 32-bit one. It turns out that the legalization of  `heap_addr` already worked with 64-bit offsets, so this change was  fairly trivial to make.* The runtime implementation of mmap-based linear memories has changed  to largely work in `usize` quantities in its API and in bytes instead  of pages. This simplifies various aspects and reflects that  mmap-memories are always bound by `usize` since that&apos;s what the host  is using to address things, and additionally most calculations care  about bytes rather than pages except for the very edge where we&apos;re  going to/from wasm.Overall I&apos;ve tried to minimize the amount of `as` casts as possible,using checked `try_from` and checked arithemtic with either errorhandling or explicit `unwrap()` calls to tell us about bugs in thefuture. Most locations have relatively obvious things to do with variousimplications on various hosts, and I think they should all be roughly ofthe right shape but time will tell. I mostly relied on the compilercomplaining that various types weren&apos;t aligned to figure outtype-casting, and I manually audited some of the more obvious locations.I suspect we have a number of hidden locations that will panic on 32-bithosts if 64-bit modules try to run there, but otherwise I think weshould be generally ok (famous last words). In any case I wouldn&apos;t wantto enable this by default naturally until we&apos;ve fuzzed it for some time.In terms of the actual underlying implementation, no one should expectmemory64 to be all that fast. Right now it&apos;s implemented with&quot;dynamic&quot; heaps which have a few consequences:* All memory accesses are bounds-checked. I&apos;m not sure how aggressively  Cranelift tries to optimize out bounds checks, but I suspect not a ton  since we haven&apos;t stressed this much historically.* Heaps are always precisely sized. This means that every call to  `memory.grow` will incur a `memcpy` of memory from the old heap to the  new. We probably want to at least look into `mremap` on Linux and  otherwise try to implement schemes where dynamic heaps have some  reserved pages to grow into to help amortize the cost of  `memory.grow`.The memory64 spec test suite is scheduled to now run on CI, but as withall the other spec test suites it&apos;s really not all that comprehensive.I&apos;ve tried adding more tests for basic things as I&apos;ve had to implementguards for them, but I wouldn&apos;t really consider the testing adequatefrom just this PR itself. I did try to take care in one test to actuallyallocate a 4gb+ heap and then avoid running that in the poolingallocator or in emulation because otherwise that may fail or takeexcessively long.[proposal]: https://github.com/WebAssembly/memory64/blob/master/proposals/memory64/Overview.md* Fix some tests* More test fixes* Fix wasmtime tests* Fix doctests* Revert to 32-bit immediate offsets in `heap_addr`This commit updates the generation of addresses in wasm code to alwaysuse 32-bit offsets for `heap_addr`, and if the calculated offset isbigger than 32-bits we emit a manual add with an overflow check.* Disable memory64 for spectest fuzzing* Fix wrong offset being added to heap addr* More comments!* Clarify bytes/pages

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Thu, 12 Aug 2021 14:40:20 +0000</pubDate>
        <dc:creator>Alex Crichton &lt;alex@alexcrichton.com&gt;</dc:creator>
    </item>
<item>
        <title>7a1b7cdf - Implement RFC 11: Redesigning Wasmtime&apos;s APIs (#2897)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#7a1b7cdf</link>
        <description>Implement RFC 11: Redesigning Wasmtime&apos;s APIs (#2897)Implement Wasmtime&apos;s new API as designed by RFC 11. This is quite a large commit which has had lots of discussion externally, so for more information it&apos;s best to read the RFC thread and the PR thread.

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Thu, 03 Jun 2021 14:10:53 +0000</pubDate>
        <dc:creator>Alex Crichton &lt;alex@alexcrichton.com&gt;</dc:creator>
    </item>
<item>
        <title>f12b4c46 - Add resource limiting to the Wasmtime API. (#2736)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#f12b4c46</link>
        <description>Add resource limiting to the Wasmtime API. (#2736)* Add resource limiting to the Wasmtime API.This commit adds a `ResourceLimiter` trait to the Wasmtime API.When used in conjunction with `Store::new_with_limiter`, this can be used tomonitor and prevent WebAssembly code from growing linear memories and tables.This is particularly useful when hosts need to take into account host resourceusage to determine if WebAssembly code can consume more resources.A simple `StaticResourceLimiter` is also included with these changes that willsimply limit the size of linear memories or tables for all instances created inthe store based on static values.* Code review feedback.* Implemented `StoreLimits` and `StoreLimitsBuilder`.* Moved `max_instances`, `max_memories`, `max_tables` out of `Config` and into  `StoreLimits`.* Moved storage of the limiter in the runtime into `Memory` and `Table`.* Made `InstanceAllocationRequest` use a reference to the limiter.* Updated docs.* Made `ResourceLimiterProxy` generic to remove a level of indirection.* Fixed the limiter not being used for `wasmtime::Memory` and  `wasmtime::Table`.* Code review feedback and bug fix.* `Memory::new` now returns `Result&lt;Self&gt;` so that an error can be returned if  the initial requested memory exceeds any limits placed on the store.* Changed an `Arc` to `Rc` as the `Arc` wasn&apos;t necessary.* Removed `Store` from the `ResourceLimiter` callbacks. Custom resource limiter  implementations are free to capture any context they want, so no need to  unnecessarily store a weak reference to `Store` from the proxy type.* Fixed a bug in the pooling instance allocator where an instance would be  leaked from the pool. Previously, this would only have happened if the OS was  unable to make the necessary linear memory available for the instance. With  these changes, however, the instance might not be created due to limits  placed on the store. We now properly deallocate the instance on error.* Added more tests, including one that covers the fix mentioned above.* Code review feedback.* Add another memory to `test_pooling_allocator_initial_limits_exceeded` to  ensure a partially created instance is successfully deallocated.* Update some doc comments for better documentation of `Store` and  `ResourceLimiter`.

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Mon, 19 Apr 2021 14:19:20 +0000</pubDate>
        <dc:creator>Peter Huene &lt;peter@huene.dev&gt;</dc:creator>
    </item>
<item>
        <title>2697a18d - Redo the statically typed `Func` API (#2719)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#2697a18d</link>
        <description>Redo the statically typed `Func` API (#2719)* Redo the statically typed `Func` APIThis commit reimplements the `Func` API with respect to statically typeddispatch. Previously `Func` had a `getN` and `getN_async` family ofmethods which were implemented for 0 to 16 parameters. The return valueof these functions was an `impl Fn(..)` closure with the appropriateparameters and return values.There are a number of downsides with this approach that have becomeapparent over time:* The addition of `*_async` doubled the API surface area (which is quite  large here due to one-method-per-number-of-parameters).* The [documentation of `Func`][old-docs] are quite verbose and feel  &quot;polluted&quot; with all these getters, making it harder to understand the  other methods that can be used to interact with a `Func`.* These methods unconditionally pay the cost of returning an owned `impl  Fn` with a `&apos;static` lifetime. While cheap, this is still paying the  cost for cloning the `Store` effectively and moving data into the  closed-over environment.* Storage of the return value into a struct, for example, always  requires `Box`-ing the returned closure since it otherwise cannot be  named.* Recently I had the desire to implement an &quot;unchecked&quot; path for  invoking wasm where you unsafely assert the type signature of a wasm  function. Doing this with today&apos;s scheme would require doubling  (again) the API surface area for both async and synchronous calls,  further polluting the documentation.The main benefit of the previous scheme is that by returning a `impl Fn`it was quite easy and ergonomic to actually invoke the function. Inpractice, though, examples would often have something akin to`.get0::&lt;()&gt;()?()?` which is a lot of things to interpret all at once.Note that `get0` means &quot;0 parameters&quot; yet a type parameter is passed.There&apos;s also a double function invocation which looks like a lot ofcharacters all lined up in a row.Overall, I think that the previous design is starting to show too manycracks and deserves a rewrite. This commit is that rewrite.The new design in this commit is to delete the `getN{,_async}` family offunctions and instead have a new API:    impl Func {        fn typed&lt;P, R&gt;(&amp;self) -&gt; Result&lt;&amp;Typed&lt;P, R&gt;&gt;;    }    impl Typed&lt;P, R&gt; {        fn call(&amp;self, params: P) -&gt; Result&lt;R, Trap&gt;;        async fn call_async(&amp;self, params: P) -&gt; Result&lt;R, Trap&gt;;    }This should entirely replace the current scheme, albeit by slightlylosing ergonomics use cases. The idea behind the API is that theexistence of `Typed&lt;P, R&gt;` is a &quot;proof&quot; that the underlying functiontakes `P` and returns `R`. The `Func::typed` method peforms a runtimetype-check to ensure that types all match up, and if successful you geta `Typed` value. Otherwise an error is returned.Once you have a `Typed` then, like `Func`, you can either `call` or`call_async`. The difference with a `Typed`, however, is that theparams/results are statically known and hence these calls can be muchmore efficient.This is a much smaller API surface area from before and should greatlysimplify the `Func` documentation. There&apos;s still a problem where`Func::wrapN_async` produces a lot of functions to document, but that&apos;snow the sole offender. It&apos;s a nice benefit that thestatically-typed-async verisons are now expressed with an `async`function rather than a function-returning-a-future which makes it bothmore efficient and easier to understand.The type `P` and `R` are intended to either be bare types (e.g. `i32`)or tuples of any length (including 0). At this time `R` is only allowedto be `()` or a bare `i32`-style type because multi-value is notsupported with a native ABI (yet). The `P`, however, can be any size oftuples of parameters. This is also where some ergonomics are lostbecause instead of `f(1, 2)` you now have to write `f.call((1, 2))`(note the double-parens). Similarly `f()` becomes `f.call(())`.Overall I feel that this is a better tradeoff than before. While notuniversally better due to the loss in ergonomics I feel that this designis much more flexible in terms of what you can do with the return valueand also understanding the API surface area (just less to take in).[old-docs]: https://docs.rs/wasmtime/0.24.0/wasmtime/struct.Func.html#method.get0* Rename Typed to TypedFunc* Implement multi-value returns through `Func::typed`* Fix examples in docs* Fix some more errors* More test fixes* Rebasing and adding `get_typed_func`* Updating tests* Fix typo* More doc tweaks* Tweak visibility on `Func::invoke`* Fix tests again

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Thu, 11 Mar 2021 20:43:34 +0000</pubDate>
        <dc:creator>Alex Crichton &lt;alex@alexcrichton.com&gt;</dc:creator>
    </item>
<item>
        <title>15c68f2c - Disconnects `Store` state fields from `Compiler` (#1761)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#15c68f2c</link>
        <description>Disconnects `Store` state fields from `Compiler` (#1761)*  Moves CodeMemory, VMInterrupts and SignatureRegistry from Compiler*  CompiledModule holds CodeMemory and GdbJitImageRegistration*  Store keeps track of its JIT code*  Makes &quot;jit_int.rs&quot; stuff Send+Sync*  Adds the threads example.

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Tue, 02 Jun 2020 18:44:39 +0000</pubDate>
        <dc:creator>Yury Delendik &lt;ydelendik@mozilla.com&gt;</dc:creator>
    </item>
<item>
        <title>9364eb1d - Refactor (#1524)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#9364eb1d</link>
        <description>Refactor (#1524)* Compute instance exports on demand.Instead having instances eagerly compute a Vec of Externs, and bumpingthe refcount for each Extern, compute Externs on demand.This also enables `Instance::get_export` to avoid doing a linear search.This also means that the closure returned by `get0` and friends nowholds an `InstanceHandle` to dynamically hold the instance live ratherthan being scoped to a lifetime.* Compute module imports and exports on demand too.And compute Extern::ty on demand too.* Add a utility function for computing an ExternType.* Add a utility function for looking up a function&apos;s signature.* Add a utility function for computing the ValType of a Global.* Rename wasmtime_environ::Export to EntityIndex.This helps differentiate it from other Export types in the tree, anddescribes what it is.* Fix a typo in a comment.* Simplify module imports and exports.* Make `Instance::exports` return the export names.This significantly simplifies the public API, as it&apos;s relatively commonto need the names, and this avoids the need to do a zip with`Module::exports`.This also changes `ImportType` and `ExportType` to have public membersinstead of private members and accessors, as I find that simplifies theusage particularly in cases where there are temporary instances.* Remove `Instance::module`.This doesn&apos;t quite remove `Instance`&apos;s `module` member, it gets a stepcloser.* Use a InstanceHandle utility function.* Don&apos;t consume self in the `Func::get*` methods.Instead, just create a closure containing the instance handle and theexport for them to call.* Use `ExactSizeIterator` to avoid needing separate `num_*` methods.* Rename `Extern::func()` etc. to `into_func()` etc.* Revise examples to avoid using `nth`.* Add convenience methods to instance for getting specific extern types.* Use the convenience functions in more tests and examples.* Avoid cloning strings for `ImportType` and `ExportType`.* Remove more obviated clone() calls.* Simplify `Func`&apos;s closure state.* Make wasmtime::Export&apos;s fields private.This makes them more consistent with ExportType.* Fix compilation error.* Make a lifetime parameter explicit, and use better lifetime names.Instead of &apos;me, use &apos;instance and &apos;module to make it clear what thelifetime is.* More lifetime cleanups.

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Mon, 20 Apr 2020 20:55:33 +0000</pubDate>
        <dc:creator>Dan Gohman &lt;sunfish@mozilla.com&gt;</dc:creator>
    </item>
<item>
        <title>3c51d3ad - Move all examples to a top-level directory (#1286)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/examples/memory.rs#3c51d3ad</link>
        <description>Move all examples to a top-level directory (#1286)* Move all examples to a top-level directoryThis commit moves all API examples (Rust and C) to a top-level`examples` directory. This is intended to make it more discoverable andconventional as to where examples are located. Additionally all examplesare now available in both Rust and C to see how to execute the examplein the language you&apos;re familiar with. The intention is that as morelanguages are supported we&apos;d add more languages as examples here too.Each example is also accompanied by either a `*.wat` file which isparsed as input, or a Rust project in a `wasm` folder which is compiledas input.A simple driver crate was also added to `crates/misc` which executes allthe examples on CI, ensuring the C and Rust examples all executesuccessfully.

            List of files:
            /wasmtime-44.0.1/examples/memory.rs</description>
        <pubDate>Wed, 11 Mar 2020 20:37:24 +0000</pubDate>
        <dc:creator>Alex Crichton &lt;alex@alexcrichton.com&gt;</dc:creator>
    </item>
</channel>
</rss>
