arsd 10.9 released

Posted 2022-08-22

Core D Development Statistics

In the community

Community announcements

See more at the announce forum.

What Adam is working on

For the first time in two months, I tagged a new arsd version, 10.9. Among the new things:

  • Improved support for 1xx responses in httpclient. 103 Early Hints full support with friendly api coming in a bit to both cgi.d and http2.d.
  • Fixes to automatically ping and pong support in websocket in http2.d that would previously cause some servers to disconnect prematurely
  • http2 can now set maximum number of redirects, max number of cached file descriptors, and respects timeouts on connect requests
  • a http2 request on a data uri will treat it as a pseudo server response, allowing transparent use of it
  • http2 can handle footers better than before, actually processing instead of discarding them. helps with grpc.
  • OpenSSL 3 support in http2.d
  • arsd.jpeg can read more files than before
  • minigui has more property accessors and MainWindows work better without status bars if you want to.
  • simpledisplay's auto-scaling handles xft dpi a bit better (though it still isn't very good, it is more compatible with gnome and retains my custom ARSD_SCALING_FACTOR option to escape per-monitor)
  • simpledisplay has a bug fix with alt+keypresses on Windows after opening and closing the menu with keyboard shortcuts
  • png.d supports more < 8 bpp images now and allows truncated datastreams (which are technically invalid, but libpng allows it with a warning, so i changed my error detection to no longer throw fatal exception either)
  • sqlite3.d actually respects the flags argument to its constructor now (it was originally written when that function wasn't commonly found in the wild, then i left it that way for a decade!)
  • cursor position save/restore functions in terminal.d
  • bmp.d can read more non-standard (yet common) bmps
  • arsd.ico added for reading Windows icon files
  • cgi.d's RequestServer now lets you set fork and thread settings in code in addition to the build version options
  • data uri improvements to both http2.d and cgi.d
  • cgi.d's RequestServer.stop is slightly more reliable. Still not great though, it needs more work.
  • cgi.d's dispatcher supports more enum formatting and the EventServer supports bigger messages
  • arsd.database has changed support for byte blobs in its backends. In sqlite, it now actually stores byte[] as BLOB. It uses BYTEA in postgres. Previously it would call to!string(those_bytes). Please note that when you query a blob column, it returns a string still, but you should just cast it over to const(ubyte)[] and use it then.
  • a few more convenience functions and bug fixes

Quite a big release, two months of my code and other contributions came to about a 3000 line diff, but aside from the byte blob things it shouldn't break anything, and I think if you were relying on the to!string behavior your code was likely already broken there.... so tagging it as a minor release.

I've been leaning more and more toward adding an arsd.core for an 11.0 release though. No timeline but preliminary design discussions continue moving forward. Quite possible I can make it an opt-in module and avoid breakage there too, but with the design I have in mind now, it'd be too useful not to use!

I'll try to write more next week.