generational-arena VS goprotobuf

Compare generational-arena vs goprotobuf and see what are their differences.

generational-arena

A safe arena allocator that allows deletion without suffering from the ABA problem by using generational indices. (by fitzgen)
Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
generational-arena goprotobuf
7 13
646 9,546
- 0.8%
0.0 2.8
9 months ago about 1 month ago
Rust Go
Mozilla Public License 2.0 BSD 3-clause "New" or "Revised" License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

generational-arena

Posts with mentions or reviews of generational-arena. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-07-11.
  • Is Rust suitable for representing domain concepts?
    1 project | /r/rust | 17 Apr 2023
    In my experience it is often easier to use indexes instead of copying Rc's. If you want to mutate the graph, then look in to slab and generational-arena
  • My thoughts on Rust for game development
    1 project | /r/rust_gamedev | 29 Mar 2023
    Regarding ECS: yes, but in a deflationary sense. The game has entities, stored in something very similar to GenerationalArena, and it has "systems", which are just functions that operate on these entities. The components themselves are just fields of the Entity megastruct. Having an ECS in the narrow sense doesn't really make a lot of sense for this game, because a lot of its rules are dependent on each other, and there's very little chance to extract parallelism. Also, even the current largest levels have less than 10k entities, so simulation performance is not a bottleneck yet.
  • Freeing slice without knowing it’s size
    2 projects | /r/rust | 11 Jul 2022
    If you cannot inplace construct the slice-dst on heap and your slice is too large to be copied, then I think there are two solutions: - Using Box>, this adds another level of indirection but avoids the copying - Use an arena like slotmap, slab, generational_arena or concurrent_arena to store the Box<[u8]>. It still needs heap allocation, but it allocates in chunks, thus less fragmentation and performs better.
  • Is there an abstract technical name for a map that generates its own keys??
    1 project | /r/learnprogramming | 22 Jul 2021
    I think this is less of a good fit though: the word "arena" doesn't imply iteration is possible to me. I think arenas also conventionally will reuse previously-released handles (unless you implement akin to a generational arena), so the term might be a bit misleading in that regard.
  • Mutability with Arenas?
    2 projects | /r/rust | 14 Jul 2021
    Might wanna check out https://github.com/fitzgen/generational-arena / https://github.com/ArnaudValensi/vec-tree/blob/master/tests/tests.rs.
  • A new ProtoBuf generator for Go
    7 projects | news.ycombinator.com | 3 Jun 2021
    This is far from the only arena allocator written in Rust.

    From the same author, a zero-unsafe arena allocator: https://github.com/fitzgen/generational-arena

    There are many, many arena implementations available with varying characteristics. It's disingenuous to act like Rust requires the author of an arena library to write "unsafe" everywhere.

  • Automatic Struct of Array generation for Rust
    2 projects | /r/rust | 2 May 2021
    If someone wants to adapt it to create computergames, then it would probably be useful to find a way to introduce generational generational indexes

goprotobuf

Posts with mentions or reviews of goprotobuf. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-08-19.
  • Protoc Plugins with Go
    2 projects | dev.to | 19 Aug 2023
    Now let’s take a look at the source code of the protoc-gen-go plugin:
  • How Turborepo is porting from Go to Rust
    7 projects | news.ycombinator.com | 21 Jul 2023
  • The Tragic Death of Inheritance
    2 projects | /r/programmingcirclejerk | 5 Jul 2023
    Wait, you say, in Go you can embed a struct with default method implementations to "inherit" them in your composed struct... sure, except any methods called by those methods are early-bound in the original struct, completely ignoring your wrapper, so the best you can do is "not implemented" rather than actually implement something. It is at least a way to prevent semver-major breakage, which the gRPC generator uses, but that's about as far as it gets you.
  • Protobuf - Go support for Google's protocol buffers
    1 project | /r/github_trends | 27 May 2022
  • Passing large amounts of data between processes via a file?
    1 project | /r/golang | 24 Mar 2022
    The classic answer is protobufs. You can serialize out to binary format.
  • 2022-01-11 gRPC benchmark results
    3 projects | /r/grpc | 12 Jan 2022
    Seems like go is pretty middle of the road. I can only guess as to why but it probably has to do with heavy usage of pointers and reflection which are much slower than other implementations. Gogo/protobuf (RIP) solved this performance with code generation, but the the official go protobuf implementation has essentially eschewed it. I do wonder how the benchmark would look using the new vitess proto library for Go (which has many of the benefits of gogo but with active development and an API built on top of the Google one)
  • A complete yet beginner friendly guide on how to secure Linux
    17 projects | /r/linux | 4 Jun 2021
  • A new ProtoBuf generator for Go
    7 projects | news.ycombinator.com | 3 Jun 2021
    Maybe I'm missing something, but my read of [golang/protobuf#364](https://github.com/golang/protobuf/issues/364) was that the re-organization in protobuf-go v2 was allow for optimizations like gogoprotobuf to be developed without requiring a complete fork. I totally understand that the authors of gogoprotobuf do not have the time to re-architect their library to use these hooks, but best I can figure this generator does not use these hooks either. Instead it defines additional member functions, and wrappers that look for those specialized functions and fallback to the generic ones if not found.

    I am thinking about stuff like the [ProtoMethods](https://pkg.go.dev/google.golang.org/[email protected]/reflec...) API.

    I wonder why not? Did the authors of the vtprotobuf extension not want to bite off that much work? Is the new API not sufficient to do what they want (thus failing some of the goals expressed in golang/protobuf#364?

  • How to Auto Generate JavaScript code using GO
    2 projects | /r/golang | 9 May 2021
    In this case try approach with line by line generation. Very much like what protoc-gen-go does for Go code: https://github.com/golang/protobuf/blob/ae97035608a719c7a1c1c41bed0ae0744bdb0c6f/protoc-gen-go/grpc/grpc.go#L142, need to implement this kind of generator yourself.
  • Writing a code generator in Go
    3 projects | /r/golang | 26 Apr 2021
    Something like this: https://github.com/golang/protobuf/blob/master/internal/gengogrpc/grpc.go

What are some alternatives?

When comparing generational-arena and goprotobuf you can also consider the following projects:

bumpalo - A fast bump allocation arena for Rust

colfer - binary serialization format

vec-tree - A safe tree using an arena allocator that allows deletion without suffering from the ABA problem by using generational indices. https://docs.rs/vec-tree/0.1.0/vec_tree/

gogoprotobuf - [Deprecated] Protocol Buffers for Go with Gadgets

gapid - Graphics API Debugger

jsoniter - A high-performance 100% compatible drop-in replacement of "encoding/json"

go - The Go programming language

cbor - CBOR codec (RFC 8949) with CBOR tags, Go struct tags (toarray, keyasint, omitempty), float64/32/16, big.Int, and fuzz tested billions of execs.

TablaM - The practical relational programing language for data-oriented applications

mapstructure - Go library for decoding generic map values into native Go structures and vice versa.

protobuf-go - Go support for Google's protocol buffers

asn1