D Project Updates

This website is meant to be something between a chat and a blog post. You talk about stuff you are doing without the expected effort of a blog post, but also without the expected real-time answer of a chatroom.

Just write a few words (or more if you feel like it) about what you are doing or thinking about doing with D! Don't worry if you talk about something that goes nowhere, this is just a brainstream from the D community.

Post your own update

You will be automatically logged in if already registered, or automatically registered if not.

The registration is just to help search and to give you edit and me a bit of spam control. You should just use a random password you don't mind losing if it leaks; this website is probably not secure. Let your browser remember it for convenience.

The email address is not currently used but might be later for emailed updates or something. Totally optional.

D Programming Language. Put those words in the following box to pass my primitive captcha.

Recent updates

spoofer3 2020-09-16 21:23:19.495142-04

I had several itches to scratch. Play with Forth, Pandoc, github user pages, etc. Adam's numbers code inspired me.

Adam D. Ruppe 2020-09-15 22:23:13.997651-04

And my minesweeper on webassembly too: http://webassembly.arsdnet.net/minesweeper and with it came mouse support. These simple games are pretty easy to run on it now.

Adam D. Ruppe 2020-09-15 14:40:09.132626-04

New webassembly program! The 15 puzzle number sliding game: http://webassembly.arsdnet.net/number

Took me just a few minutes to port over since it uses most the same functions as the tetris game.

Adam D. Ruppe 2020-09-14 12:50:28.209431-04

I'm finally in the process of refactoring cgi.d's api to make it work not only with string[] args, but a config struct as well.

CrazyPython 2020-09-12 10:53:23.88731-04

Getting new users for Dwidder.

Currently the link to Dwidder is deeply linked in a forum post.

Announcements and D Twitter could be places to post Dwidder at.

CrazyPython 2020-09-12 10:28:11.244729-04

I made a userstyle for D Forums which uses a quattrospace font, which is a balance between monospace fonts (good for close reading) and variable width fonts (good for reading quickly).

Screenshots and code at:

Let me know if you use it.

Adam D. Ruppe 2020-09-11 23:31:03.117999-04

What I'm considering for the next draft of the tuple interpolation dip:

        The interpolation spec is represented by a value of a unique type with a compile-time accessible property, `strings`, that lists all the string-literal parts of the
        interpolation spec. This list has a property `.length` and can be indexed with the [] operator. All elements are of type `string`.

        It is guaranteed that `strings.length == args.length + 1`. Exactly one arg goes after each string, except the last.

        n.b.: if we add support for wstring and dstring, then those will be the types of `strings[x]`.
struct InterpList(Strings...) {
        alias strings = Strings;

struct InterpObject(strings, Args...) {
        Args args;
        this(Args args) {
                this.args = args;

        string toString() {
                return idup(strings(), args);

        alias toString this;

        isInterpList is a guaranteed public symbol given by `core.interpolation`.

        n.b.: if we add support for wstring and dstring, its second parameter would be used to
        specify which kind we want to use. Passing `void` will allow any.
        (we may remove this if not concerned about forward compat)
template isInterpList(I, ElementType = string) {
        static if(is(I == InterpList!T, T...))
                enum isInterpList = is(ElementType == void) || is(typeof(T[0]) == ElementType);
                enum isInterpList = false;

auto idup(InterpList, Args...)(InterpList interp, Args args, char[] buffer = null) if(isInterpList!InterpList) {
        // implementation note: without the format strings of the old version,
        // we need not pull Phobos anymore for most cases. easy to do quite a few types in druntime.
        import std.conv;
        string ret;
        foreach(idx, arg; args) {
                ret ~= interp.strings[idx];
                ret ~= to!string(arg);
        ret ~= interp.strings[args.length];
        return ret;

void main() {
        import std.stdio;
        import std.string;
        // writeln(idup(i"hello ${"my"} ${"friend"}")) would translate to this:
        writeln(idup(InterpList!("hello ", " ", "")(), "my", "friend"));
        writeln(replace(InterpObject!(InterpList!("hello ", " ", ""), string, string)("my", "friend"), "friend", "enemy"));

CrazyPython 2020-09-11 10:51:02.312901-04

I submitted my talk proposal on JavaScript's fast compilation and some thoughts on how Dlang can learn from it. EEK! So cringe. Would appreciate help on how to give a talk. I wish the talk was live, so I could ask questions like "Raise your hand, how many of you think Node.js is a horrible and slow programming language?" then sit to correct misconceptions.

Jacob Carlborg 2020-09-10 11:23:29.794074-04

I'm currently working on implementing support for Objective-C protocols. Most of it is implemented, just finishing up a few final things.

ttk 2020-09-10 01:02:31.866008-04

I'm still a D newbie, and don't get to practice it as much as I'd like, but have really enjoyed acquainting myself with it so far. I originally sought D to find a happy middle ground between my two favorite languages: C (highly performant) and Perl (highly expressive, comparable to Python). I've been thinking more recently that I'd like to make D my go-to language instead of Perl.

To get from here to there, I'll need to learn D better, and close the practical expressiveness gap between it and Perl. Fortunately Adam's arsd repo already implements some of the things I'd need for that -- arsd.jsvar, arsd.cgi, etc

Beyond that, there are about a dozen other modules I'll want to port over, add regular expressions to arsd.jsvar, and maybe write something that makes for convenient functionality equivalent to perl's bash-like builtins.

Beyond that, I also want to port my "select" ETL utility from Perl to D. It needs a performance boost, and could benefit tremendously from D's multithreading support (Perl kind of sucks for threads). http://ciar.org/ttk/codecloset/select/

I have some open-source projects, but "select" is the only one with any users to speak of (besides myself). It is in dire need of a redesign, having started life as a throwaway script and evolved organically into the highly useful monstrosity it is today. Perl has the features that makes implementing it easy, but not performant. C would be fast and allow use of pthreads, but implementing it in C proved too painful. Hopefully D will prove the best of both worlds.

ThisIsNotSpencer 2020-09-09 21:32:11.719599-04

I'm Not Sure.

ponce 2020-09-09 10:21:02.634735-04

Started work on ARM support for intel-intrinsics: https://github.com/AuburnSounds/intel-intrinsics/issues/45

Adam D. Ruppe 2020-09-08 20:14:50.564504-04

Making of this website on my blog:


Steven Schveighoffer 2020-09-08 12:57:59.066483-04

Working on an SQL builder. Essentially, to make it so I don't have to build SQL when the damn compiler already knows enough to build it for me. An example usage:

   auto ds = DataSet!SomeRow
   auto query = select(ds, ds.otherset) // otherset defined declaratively
      .where(ds.id, " = " id.param)
   foreach(somerow, otherrow; connection.fetch(query))
      writeln("somerow: ", somerow, " otherrow: ", otherrow);

in that code sample, somerow is typed as SomeRow, and otherrow is a relation that is declared inside SomeRow, and is typed as that relationship's row type.

I have this working with mysql-native, and intend for it to work for any SQL-based system, just by importing the right dialect (current targets are PostgreSQL and SQLite).

I have inserts, updates, and deletes working too. There is also the potential to define more complex table relationships, but haven't got that far yet.

aberba 2020-09-08 11:16:52.027914-04

Hello, working on validation library for web development called nnipa on dub. More validation functions will be added. Pull requests are welcomed

1 comment
Adam D. Ruppe 2020-09-08 10:11:41.221958-04

Adding overload resolution to script.d broke tons of code. ugh.

CrazyPython 2020-09-08 10:01:37.713582-04

I'm working on a talk proposal, but I observe that the rest of my life is pretty demanding, so I feel stressed to get the proposal right without the rest of my life for the proposal or vice versa.

1 comment
Adam D. Ruppe 2020-09-08 09:04:19.968264-04

In your posts and comments, the supported syntax is deliberately light since the point here is to be kinda low effort, but you can still paste links, use markdown style `code` and markdown style


1 comment
Adam D. Ruppe 2020-09-08 08:42:32.2001-04

Source code for this website available here: https://github.com/adamdruppe/dupdates/ will lag a bit what is live since I edit stuff directly too.

WebFreak 2020-09-08 02:52:41.720802-04

To show dates on dwidder in your local timezone & locale you can add this simple script:

var dates = document.querySelectorAll(".date");
for (var i = 0; i < dates.length; i++)
dates[i].textContent = new Date(dates[i].textContent + ":00").toLocaleString();

Just copy paste the content into the console or tell Adam to add this to the end of the page.

1 comment
WebFreak 2020-09-08 02:35:47.120033-04

If you are in the Czech Republic, Germany, Netherlands, Austria, Switzerland, Finland, Sweden or Bulgaria and like to go to Burger King using their app but don't like their app, try out my free and open source D app clone which supports much more devices because it's a web app. (unsupported old android, linux phones, etc)

The app also respects your privacy a lot more and is completely free of analytics. As a client you never even communicate with Burger King APIs, everything is cached and global to all users.


anond 2020-09-08 00:03:08.59209-04

Modifying std.uni.decodeGrapheme to accept bidirectional ranges has more implications than previously believed. Kind of fun

God 2020-09-07 22:46:00.576251-04

There is no proof that PHP is a bad language.

anonymous 2020-09-07 21:26:11.348494-04

`sformat` not being `@nogc` is !$%&?*# ridiculous.

1 comment
Dweeb101 2020-09-07 19:30:46.973054-04

I don’t have Twitter, but I jumped at the chance to get one of these Dwidder accounts! This is going to be the next biggest thing! #dwidderpated

1 comment
Adam D. Ruppe 2020-09-07 16:58:58.58265-04

lol cgi.d's new auto-spawn server support needs to detach somehow, otherwise it can leave the session server listening to the port I want to use. `posix_spawn` apparently doesn't close any fds :(

1 comment
Adam D. Ruppe 2020-09-07 16:50:34.462355-04

Just making the #first post!

1 comment