opend tested on more hardware, ships dcompute and with(auto x = thing), arsd library preparing for 12.0

Posted 2025-04-14

A lot has been happening, but between my day job and other life matters, I haven't had time to write for a while!

New hardware availability

I acquired some new hardware for code testing work last month, most notably, a computer with a newer Intel cpu and nvidia gpu, and an Apple M2 mac. These computers join my older computers in my test kit.

With them, I was able to reproduce some bugs reported and fix them fairly quickly. Which brings me to the next section:

OpenD work

I used the new hardware to help with some OpenD work and other OpenD contributors' work and some upstream improvements also shipped.

  • FreeBSD support in the build script is fixed, so gmake should now work once you set up a host D compiler and install the llvm dependency. If other problems come up, let me know, as I have a working FreeBSD 14 vm on the new hardware.
  • OpenD resynced with the LDC backend from upstream, bringing LLVM 18 support (in theory) and merging their bug fixes for arm mac for our exter(Objective-C) support back into opend.
  • The opend command line program had bugs on the apple M-series computer as well that got fixed thanks to the new test systems as well.
  • mixin ident = templ; syntax was pulled from upstream.
  • with(auto x = expr) is now supported in OpenD.
    void main() {
    	with(auto x = new Object()) {
    		assert(toString() == "object.Object");
    	}
    }
  • DCompute now ships with OpenD's standard distribution. I tested it so far on Linux on that new nvidia chip and will continue work on it in the near future.
  • We started @ctfeOnly and continued work on if(auto x; foo(x)) but both had trouble and could not be shipped yet. Stay tuned though, we'll come back to them.
  • Upstream had disagreement about order of evaluation for named arguments. OpenD's position is the top to bottom, left to right source order makes sense, but we haven't implemented it yet.

I am hoping to get more work merged on the Emscripten version soon, and I plan to do more work on the opend command line program - it needs a few more error messages and I might implement opend fetch to grab updated third party libraries soon.

arsd library work

May is coming up soon, and with it, arsd 12 is scheduled to be tagged. There's a lot of things happening, though we'll see how much of my wishes actually get finished. Nevertheless, some progress so far:

  • more Mac support in arsd core, simpledisplay, and minigui. minigui's custom widgets now almost work with the Cocoa backend. The main bugs remaining have to do with the Mac text apis working in floats, and simpledisplay's working in ints, truncating the fractions. This can lead to compounding errors when small text parts are measured together.

    I don't know the solution to this yet. I might have to break the measurement apis with version 12 to return floating point types.

    On the other hand, integrating the arsd.core api with Mac's "grand central dispatch" wasn't too hard so far, so I'm happy with that.

    At some point, I want to make it use primarily native controls on the mac as well, but this is surely far down the line.

  • arsd.xlsx has expanded enough in capability to be useful for at least some real world programs now.
  • arsd.email got a bug fix relating to multipart/mixed content with a pdf in the first position being skipped when it could have been classified as an attachment.
  • arsd.minigui got more work. After my rant about tooltips last month, I started implementing a minigui tooltip widget that works with my preferred guidelines.
  • arsd.minigui_addons.terminal_emulator_widget started using similar observable properties to the webview_widget for things like title and icon change. I want to make it so you can add them in a generic tab control and it can hook right in.
  • arsd.core's event loop integration with simpledisplay is working fairly well now, and I'm almost ready to enable it by default. That is a goal for the 12.0 release.

Meta note about this blog

The name has been "this week" since it started in 2015, but I've rarely actually kept up with weekly posts. Even when I would post weekly before, the content would often be bare minimum most weeks; in practice, I really just do one good post a month (and sometimes even that is hard to keep up with, it takes hours to write a good post!).

As such, I've decided to embrace the reality and rename it to "this month", and I'll try to give more meaningful content once a month rather than posting something just to check a box saying i posted something that week.