Remix.run Logo
eatonphil 2 hours ago

They are indeed different. In Zig you might get the allocator via a struct field or just via importing the global allocator.

  const std = @import("std");

  fn makeBuffer(n: usize) ![]u8 {
      return std.heap.page_allocator.alloc(u8, n);
  }
Here are a few examples from the last release of Bun before the rewrite into Rust.

https://github.com/oven-sh/bun/blob/bun-v1.3.14/src/install/...

https://github.com/oven-sh/bun/blob/bun-v1.3.14/src/shell_pa...

The allocator via function parameter is only a convention and only even one convention. It is certainly a strong convention (throughout the standard library anyway) but it is just a convention.

Recent Rust also has the ability to pass allocators but that's the same thing. And even if you use no_std in Rust you might call into some other library's no_std function that allocates and you wouldn't be able to grep for that.