4 comments

  • Rochus 2 hours ago
    Cool project. Good idea to use SDL3; it brings along much more than SDL2 where you had to use a lot of other libraries to become platform independent with all features. The disadvantage might be that SDL3 itself (as SLD2) is pretty big. Ada got a bit out of fashion (unfortunately) but it's still an impressive, excellent language. Still an interesting choice. Maybe you can give more information about your choice and plans with the GUI library.
    • ovenpasta 54 minutes ago
      Thanks!

      You can watch the talk at Ada Developers Workshop Vasteras 2026, where I explain some of your questions:

      https://www.youtube.com/watch?v=d-RISfK9Sy8

      I should write more details in the repo's README file.

      Basically, I was quite frustrated with the available solutions vs. my requirements and ended up making my own, and this process took me many years.

      Ada is a language that I always admired, but at the time I didn't feel comfortable depending on the available open-source toolchains. GNAT has actually been open source for decades, but a few years ago, with the increasingly accessible FSF GNAT ecosystem, things changed dramatically.

      I think people in the embedded world should really consider Ada/SPARK, where you can formally prove program correctness in Ada itself, going much beyond simple memory safety. Also, Ada's mapping of records directly to registers with bit and read/write semantics granularity is unbeatable. I could go on, but plenty of information is readily available online. BTW, I still consider myself a beginner in Ada; I'm perhaps leveraging 10% of its potential. I really recommend giving Ada (or yourself) a chance.

      Why not Rust? I considered it, but dropping support for versions earlier than Windows 10 scared me away. It is not an option for my use case, where industrial customers have old operating systems.

      SDL3 was a perfect fit as a backend since it abstracts away the hardware perfectly and allows me to focus on my own business. It remains to be seen whether I can abstract it away and let the user choose the backend. I use as few features as I can; for example, for rendering, I use the good old SDL_Renderer API, which does not require specific GPU drivers or features and falls back nicely to software rendering. Drop shadows are simply software-rendered and cached; the same applies to SVG images and Lottie animations. In this way, I simplified the requirements a lot. Then the SDL3_ttf was god send for text.

  • nicoburns 6 hours ago
    I'm going to ask the obvious question: why ADA?

    ---

    My framework (Dioxus Native - https://github.com/dioxuslabs/blitz) would fit quite nicely into your comparison table:

    - Compiles to self-contained OS-native app bundle

    - <10 MB (compiled with Oz) or ~15MB (with O3) (can be golfed smaller)

    - GPU or CPU rendering

    - Windows 10+ / macOS / Linux / mobile / wasm / (+ web DOM with Dioxus Web)

    - Rust

    - Memory safety: borrow checked

    - Styling: CSS (support matrix: https://blitz.is/status/css)

    • ovenpasta 6 hours ago
      Hi! Interesting! Your frameworks seems to be a kind of web browser, with dynamic content. Adi2 takes a different approach. Your entire app is static code. Every widget, every style is built at compile time. No interpreters or parsers at runtime.

      -- Why Ada, well and why Rust? I guess it depends on your taste...

      You can know more about Ada here: https://learn.adacore.com/courses/intro-to-ada/chapters/intr...

      It is a language with a long history, completely defined both the language and it's runtime library, it is an ISO standard, it is readable, it is modern, it has many features both for embedded and general purpose use, it has 1st class support on GCC as a frontend. Maybe it does not have a borrow checker as of today, but if you need to harden you can use the Ada/SPARK subset, a very interesting language, that can prove program correctness at compile time.

      • nicoburns 6 hours ago
        > Every widget, every style is built at compile time.

        Huh. That does sound cool. Does that mean that the XML and CSS is parsed and resolved at compile time? How does that handle dynamic content changes (e.g. content changes in response to user input).

        Note that while Blitz applies CSS and runs layout at runtime, the scripting layer (equivalent of JS in the browser or Dart in flutter) is AOT-compiled Rust.

        • ovenpasta 6 hours ago
          The XML is just a layer, it gets compiled to normal code that creates / operates on the widget tree. On any user input callbacks are just Ada code that can again apply changes to widgets, like states, or add / remove widgets or set properties like label text etc. The CSS is also converted to Ada constants that are used by the styling engine at runtime. You can check the getting started, it shows how it is done both as pure Ada or as XML/CSS.
  • tosti 6 hours ago
    There's so much repetition in there. E.g.: (adi-json.adb)

        if not W.After_Key (W.Depth) then
            -- things
        else
            W.After_Key (W.Depth) := False;
        end if;
        -- ...more things...
        W.After_Key (W.Depth) := False;
    
    And what's the deal with those filenames? If you replace adi- with TIMMEH, you'll see what I mean.

    Code should be more DRY (don't repeat yourself).

    • OneWingedShark 3 hours ago
      GNAT (not Ada) has an implementation restriction that you cannot have multiple compilation-units in a single file; I believe that the dot-replacement is a holdover from when GNAT/GCC was dealing with DOS.
    • ovenpasta 6 hours ago
      I agree on the repetitions those need cleanup. Regarding filenames, it is a GNAT convention (the GCC's ada compiler) where we need to have the package name on it separated by -
      • OneWingedShark 3 hours ago
        Ada has some excellent GENERICs, you can use them to great effect for reducing code-size.
  • switchbak 6 hours ago
    Why would anyone choose XML for a modern GUI layout in 2026? That seems like a mis-step.
    • ovenpasta 6 hours ago
      Author here, the library itself is pure Ada, the XML UI is just a convenience layer on top of it, there is a code generator that picks it and writes ada packages. happy to hear better alternatives!
      • switchbak 15 minutes ago
        I suppose it depends what audience will be editing it. XUL used it because that was the fashion at the time, but it wouldn't be something I'd want to hand edit. Qt used its own QWT (now dated) which was a lot easier for a human to edit, albeit a bit ad-hoc.

        If it's mostly consumed and edited by a machine/LLM, xml might actually be ok. Otherwise, I think something a bit less ceremonial. Obviously there's lots of options, and I imagine you may even miss much of the tooling of XML (schemas and such).

        Kind of a drive-by comment, I admit, but it just struck me as a little surprising.

        Also: it's been some 3 decades since I was playing with Ada ... very cool to see it getting some GUI love!

      • OneWingedShark 3 hours ago
        I'd recommend ASN.1 for almost everything that XML is used for. Unfortunately, is a [semi-] human-readable file is in your list of 'needs', then that is "mostly" ruled out.

        (So, what you could do is use the XML-encoding of ASN.1, and then use _that_ in the place of your (current) XML, and then simply allow eg DER encoded objects.)