Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a59acbe

Browse filesBrowse files
authored
N43: blink-alloc (rust-gamedev#1298)
1 parent a9e63cf commit a59acbe
Copy full SHA for a59acbe

File tree

1 file changed

+51
-0
lines changed
Filter options

1 file changed

+51
-0
lines changed

‎content/news/043/index.md

Copy file name to clipboardExpand all lines: content/news/043/index.md
+51Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,57 @@ generated Metal/GLSL preview.
314314
[web demo]: https://not-fl3.github.io/miniquad-samples/shadertoy_cross.html
315315
[macroquad-shadertoy]: https://github.com/not-fl3/macroquad/blob/master/examples/shadertoy.rs
316316

317+
### [blink-alloc]
318+
319+
[blink-alloc] is a brand new arena-allocator with bunch of improvements
320+
over existing solutions that is
321+
tested with [Miri] and follows ["Strict Provenance Rules"][strict-provenance].
322+
323+
> Arena-allocators offer extremely fast allocations and deallocations.
324+
> Allocation is just a few pointer arithmetic operations.
325+
> And deallocation is nearly no-op.
326+
> In exchange arena-allocator requires a point in time when all
327+
> previous allocations are unused to reset state.\
328+
> Rust's borrow-checker ensures the requirement for reset making
329+
> it 100% safe to use.
330+
>
331+
> TL;DR great for games, servers, cli tools and more.
332+
333+
blink-alloc provides thread-local and multi-threaded allocators -
334+
`BlinkAlloc` and `SyncBlinkAlloc`.
335+
Single-threaded version [performs many times faster than `bumpalo`][blink-bench].
336+
The author couldn't find another implementation to compare
337+
the multi-threaded version's performance.
338+
339+
It also provided ouf-of-the-box to fetch `BlinkAlloc` in task/thread
340+
and return it back when done, keeping multiple `BlinkAlloc` instanced warmed.
341+
342+
On top of raw allocations blink-alloc provides `Blink` type
343+
that works as safe allocator adaptor.
344+
`Blink` can allocate memory and initialize it with values provided by user.
345+
User may provide values as-is, as closures or iterators.
346+
`Blink`'s API is safe with few exception for niche use cases.
347+
348+
Those familiar with `bumpalo` may think of `Blink` as of `bumpalo::Bump`.
349+
Though `Blink`
350+
351+
- drops all placed values on reset,
352+
which makes it usable with any kind of types without resource leaks.
353+
- Accepts any iterator type, not just `ExactSizeIterator` implementations.
354+
- Is configurable to use any `BlinkAllocator` implementation, thus not
355+
tied to `Global`.
356+
357+
Currently Rust's standard collection types may use custom allocators
358+
only one nightly and with `allocator_api` feature enabled.
359+
blink-alloc uses `allocator-api2` crate to work on both stable and nightly.
360+
Integration with other crates is simple and doesn't require depending on
361+
blink-alloc, only on `allocator-api2`.
362+
363+
[blink-alloc]: https://github.com/zakarumych/blink-alloc
364+
[blink-bench]: https://github.com/zakarumych/blink-alloc/blob/main/BENCHMARKS.md
365+
[Miri]: https://github.com/rust-lang/miri
366+
[strict-provenance]: https://github.com/rust-lang/rust/issues/95228
367+
317368
## Popular Workgroup Issues in Github
318369

319370
<!-- Up to 10 links to interesting issues -->

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.