arsd 11.0 finally tagged

Posted 2023-08-07

Despite being behind on features, I decided it is good enough to tag the release anyway to get dub caught back up to git. Some details below.

Core D Development Statistics

In the community

Community announcements

The newsgroup backend has been down most of this week, so near zero activity. It came back up shortly before I started writing this post.

See more at the announce forum.

arsd 11 tagged

arsd 11 was scheduled for release in mid May. Despite things looking promising in March, many other things came up that required my attention in April and onward, making me miss that goal, and while it still isn't all where I want it, I did continue some development work and have some nice stuff to release. I believe the remaining things can be done in an additive fashion in minor releases.

I did document some of the new things as destabilized with the 11.0 release. arsd.database and arsd.game are old modules that are now in flux. arsd.minigui's default theme is going to change soon (minimally, I'll change the font on linux). These have possible breakage not included in 11.0 per se, but until further notice, you should not depend on every detail being the same. (I will, of course, try to limit actual breakage from here.)

The new arsd.core library is currently designated for internal use only with no public stable api. You are free to play around with it, but don't expect anything to even actually work right now, and changes are likely. If you tell me something is broken, my likely answer will be "I know, don't use it then". I will likely declare certain parts stable in the coming months, but the module as a whole is still intended for internal use and I will deliberately introduce some clashing symbols to enforce arsd policy. If you do use it, I recommend you static import it to avoid these clashes (unless you also want to follow my policy whims).

Anyway, among the working, stable things in this release:

  • arsd.archive now includes gzip support, link convenience getters for tar files, and an easier to use api for lzma.
  • arsd.game is now exposed to dub, but please note it is unstable at this time.
  • Assorted documentation improvements, including, but not limited to, some more examples in cgi.d.
  • arsd.cgi can now listen to multiple interfaces at once, including ipv6 interfaces.
  • cgi.d can handle http/2 connect requests without spamming error logs.
  • cgi.d's dispatcher is a bit more efficient at compile time. Some of this included a breaking change, see the documentation of presentExceptionAsHtml.
  • cgi.d's automatic form has some support for multiple file uploads
  • cgi.d's serveStaticFileDirectory can now be recursive instead of just loading files immediately under the directory.
  • cgi.d's dispatcher can include checks on the dispatcher level, such as a single-point permission check for an admin section, similar to other frameworks' middleware.
  • arsd.core was introduced, which includes scaffolding for a combined event loop supporting file watchers, external process management, and more, and error handling helpers and general utility functions. It compiles and links in a fraction of a second.
  • arsd.database (and its associated drivers in mysql.d, postgres.d, sqlite.d, and mssql.d) has started to support richer types instead of all just strings. This work is not complete, so most the implementation works the same as before, but it opens up room for enhancement in future minor releases.
  • arsd.dom's parser has a "pure xml mode" which turns off special treatment for script and style tags. Previously, it would special case those, even for an XmlDocument. Now it only does for a regular Document, which is meant to be html. This is a breaking change, but probably closer to what you intended anyway if you were using XmlDocument.
  • dom.d has a facility to process nodes in a streaming fashion so you can avoid actually adding them to a dom. This allows you to use it on larger files more efficiently. See processNodeWhileParsing in Document subclasses.
  • dub.json got some modifications. This might warn on dub test due to a bug in dub which I have a PR open to work around upstream.
  • game.d redid its inner game loop to more decouple the render and update loops and to help organize your game as a number of "screens" instead of just one big class. It also has new input functions. This is not fully stable or complete yet, but it is now available on dub for the first time.
  • arsd.http2's Client class can now have default headers, it has a more complete FormData class based on the web standard, its websockets can now connect in a non-blocking manner and got bug fixes in its close function with code and reason to be standards compliant.
  • arsd.ico now has save support for creating ico files and also added support for reading and writing .cur files. This module is not currently on dub but will be added in a future version.
  • arsd.jni got some bug fixes to avoid some Java/D keyword mismatches
  • arsd.joystick got some minor bug fixes when using an XBox360 controller as a PS1 controller, and gained support for the XInput keystroke event on Windows. This will be used by game.d's new input functions.
  • arsd.jpeg got a bug fix in loading certain files.
  • arsd.minigui got support for larger border widths, various bug fixes in its custom scrollbars (mostly seen on Linux), partial support for scaled standard icons on Windows, improved automatic data controller widget reflection, and an overhauled text edit class on Linux based on the new arsd.textlayouter module, which brings numerous behavior fixes and improvements in general feel. TextEdit on Linux is no longer a general embarrassment!
  • arsd.simpleaudio has a new SampleController class to give you more control over how it plays mp3s, oggs, etc. You can modify playback speed, pause, seek, etc. instead of just set it and forget it like in previous versions. You can also receive notifications when a given operation completes.
  • arsd.simpledisplay got some event loop modifications in preparation for the arsd.core integration, improved keyboard handling on Linux systems with ICCCM-compliant delegation to child windows, multithreaded opengl bug fixes, improved error messages from exceptions, bug fixes in double click detection, and some documentation tweaks.
  • arsd.terminal got a termination helper in embedded emulator mode, to prevent a zombie background process when the UI exited but the main thread didn't, improved grapheme handling in cursor tracking, new functions to clear to end of line, a way to prefill data when calling Terminal.getline, and a way to update cursor position on Linux terminals for more accurate tracking.
  • arsd.textlayouter was added, which powers custom text controls. minigui's new TextEdit on Linux uses this. It supports rich text layout with mixed fonts, styles, etc., and interfacing with the user and with apis in a structured manner.

The diff between this and the previous tag is some twenty thousand lines long. Some of that is just whitespace changes (a contributor ran a trimmer to remove some trailing whitespace), but much of it is real code and documentation, so it was time to stop delaying the tag and get this out. Even if parts aren't done yet, I think there's enough to gain here that people might enjoy these.