Solod: Go can be a better C

(solod.dev)

27 points | by koeng 3 days ago ago

7 comments

  • aarvin_roshin 5 minutes ago

    The author's original blog post, which goes into some more detail: https://antonz.org/solod

  • bb88 an hour ago

    How does it deal with pointers if everything is stack based? You can't really return a pointer to something on the stack because it could get overwritten between when you return it and when you access it.

    • wrs 3 minutes ago

      Exactly as well as C does, it seems.

          func newPerson() *Person {
              p := Person{Name: "Alice", Age: 30}
              return &p
          }
      
      becomes

          static main_Person* newPerson(void) {
              main_Person p = (main_Person){.Name = so_str("Alice"), .Age = 30};
              return &p;
          }
      
      Quoting the FAQ: "So itself has few safeguards other than the default Go type checking. It will panic on out-of-bounds array access, but it won't stop you from returning a dangling pointer or forgetting to free allocated memory. Most memory-related problems can be caught with AddressSanitizer in modern compilers, so I recommend enabling it during development by adding -fsanitize=address to your CFLAGS."
    • zabzonk 37 minutes ago

      Well, it does say:

      "Everything is stack-allocated by default; heap is opt-in through the standard library."

      So it supports both stack and heap, and I guess static allocation too.

  • jay_kyburz 3 minutes ago

    I've been using Go and Raylib to make a game lately and I really don't have a problem with garbage collection. It's so fast that it's not having an impact on my frame rate.

    I was a little worried at the start because nobody would normally consider Go for games, but I did a bunch of tests and found it's just no big deal.

    (I'm focused on game play and not interested in pushing hardware to its limits.)

  • leecommamichael 2 hours ago

    I really like this idea. I was reading a post earlier about how Go generics are implemented, and how they're sort of leveraging root GC-types in the "runtime" to avoid the same bloat as monomorphization causes in, say, C++. I wonder how Solod will do that? I guess plain monomorphization? I guess that's fine since C compilers are so speedy.

  • heyitsdaad 20 minutes ago

    Insert Look What They Need To Mimic A Fraction Of Our Power meme here.