A NES emulator written in Odin

(lucypero.com)

72 points | by frostbyte7 5 hours ago

4 comments

  • boltzmann64 3 hours ago
    i love odin.

    - manual memory management

    - arena and pool allocators

    - go style err!=nill style exception handling

    - first class support for soa and vectorized simd, linear algebra and swizzling

    - sanely typed and namespaces

    - explicit unambigious overloading, subroutine context

    - first class support for defer statements

    - zero friction C ffi

    if you haven't heard of odin, you should definitely consider it.

    • jazzypants 2 hours ago
      > - go style err!=nill style exception handling

      Is this not widely considered to be the ugliest part of the language? Why do you prefer having to do this manually?

      • ixwt 2 hours ago
        It is, which is why the or_return[1] keyword was created.

        [1]: https://odin-lang.org/docs/overview/#or_return-operator

      • iaaan 44 minutes ago
        As someone who is primarily a Go dev, I never understood this criticism and have never seen a language do it any better (but I'm open to suggestions). I think try/catch is worse. I kinda like JS's promise syntax with the `.then()` and `.catch()`, but it doesn't appear that different to Go's approach.
        • vips7L 4 minutes ago
          Personally I think Go style is worse, because the runtime and compiler don't force you to handle the error. I just had to fix a critical issue because a dev forgot to check the result coming from a function, exceptions would have forced it to happen.
      • wolttam 22 minutes ago
        Errors as values instead of some special language construct is generally a nice thing (IMO)
        • vips7L 17 minutes ago
          Exceptions are values. There's nothing different between:

              T someFn() throws E;
              fn someFn() -> Result<T, E>;
              func someFn() (T, E)
    • christophilus 3 hours ago
      LLMs are pretty good at it, too. I recently had Haiku rewrite all of my Quickshell Linux UIs (dux) to Odin + an immediate mode GUI library: launcher, Niri bar, WiFi manager, process manager, lock screen, HUD audio/brightness, etc. Did all but the process manager in a day, while I was spending 99% of my time paying attention to my day job.

      Anyway, Odin is my favorite of the new systems languages. Lightweight, ergonomic, decent stdlib. It’s quite good.

    • DASD 2 hours ago
      What's the decision-making in choosing Odin over something similar like C3 or Zig?
      • vconnor 1 hour ago
        I have tried all three, and I chose Odin because I prefer the syntax (especially over Zig) and the vendored libraries are a killer feature for me. You get a lot of graphics, maths and gamedev-adjacent packages with the language, that can take you very far without having to shop for third-party packages.

        Odin for me is the (low level) systems language nirvana, along with Elixir which is my distributed system nirvana. They spark so much joy.

      • Verdex 1 hour ago
        I can't speak for the implementor. And for that matter I also don't know what facilities c3 and zig provide.

        However Odin comes prepackaged with a lot of bindings for helpful 3rd party libraries. Likely makes this sort of work a lot less tedious.

    • phplovesong 1 hour ago
      Did not C3 basically render Odin useless? Its basically C that did not stagnate in the mid 90s.
  • AdmiralAsshat 2 hours ago
    It's always interesting when the article title betrays the author's origins. I assume the author speaks British English rather than American English, because they tended to pronounce "NES" and "SNES" as acronyms ("Ness" and "Sness"), while we Americans tended to treat them as initialisms ("En-ee-ess"). So to my American eyes, I would have expected "An NES emulator" instead of "A NES emulator."
    • forgotpwd16 2 hours ago
      Could also be native vs non-native English speaker. Especially in computing world, it's common for non-native English speakers to utilize American spelling/punctuation while grammar/pronunciation is influenced by their native language. This appears in this post, and, arguably, even the title. In many languages (incl. Spanish, probably author's native language) acronyms are read phonetically.
    • dwb 1 hour ago
      I always heard it “nez” and “snez” actually (south western England)
    • HeavyRain266 56 minutes ago
      Author is Argentinian, I guess they teach British English in schools out there.
      • cubefox 49 minutes ago
        Yeah in Argentina they probably teach the kids that NES is pronounced "ness" during English lessons.
  • anthk 3 hours ago
    Odin needs too recent LLVM versions to work. A pity this Reticulum client it's written on that, because if it were written in Go it would be instantly portable to legacy machines:

    https://github.com/Quad4-Software/Ren-TUI

    Reticulum in Go:

    https://github.com/Quad4-Software/Reticulum-Go

    On Odin itself, it looks really simple, and I'd love it if it were self-bootstrapable or compilable with just a C99 compiler like cparser, cproc or TCC.

  • reilly3000 5 minutes ago
    Among all of those interesting learnings, I suspect they will soon be learning the legal code too. Nintendo of America defends its IP ferociously and too excess.