Category Archives: D Foundation

Funding code-d

At the DConf 2018 Hackathon, I announced that the D Language Foundation would be raising money to further the development of the suite of tools comprising code-d, the Visual Studio Code plugin. The project is developed and maintained by Jan Jurzitza, a.k.a. Webfreak001.

The plan was that if we reached $3,000 in donations on our Open Collective page, we’d make the money available to Jan. When we finally reached the goal, I was quite happy to tweet about it:

Jan and I still hadn’t finalized the details at that point, but we finally got it all sorted a few days later. Before I show how we’ll be using the money, I’d first like to talk about why we’re doing this.

The motivation

As the D programming language community has grown, so has the amount of work that needs to be done. Since D is a community-driven language, much of the work that gets completed is done by volunteers. Unfortunately, the priorities for those who actively contribute aren’t necessarily aligned with those of everyone else, and this can lead to some users feeling that there is little progress at all, or that their concerns are being deliberately ignored. That’s just the nature of the beast. More potential pain points and unfulfilled wishlists means there’s a continual need for more manpower.

Therein lies one of the most fundamental issues that has plagued D’s development for years: how can more people be motivated to directly participate so we can keep pace with the consequences of progress?

To be clear, everyone involved in the core team is aware that lack of manpower is not the only negative side effect we suffer from growth, but it is certainly a big one. Part of my role these days is to figure out, along with Sebastian Wilzbach, ways to mitigate it. My inbox is littered with conversations exploring this topic, along with recommendations from Andrei to research how other projects handle one thing or another for inspiration.

To that end, in early February I launched the #dbugfix campaign with the goal of increasing community participation in the bug fixing process by providing a simple way for folks to bring attention to their pet peeve issues (keep it going people – participation has slowed and we need to pick it up!). We also announced the State of D Survey, initiated by Seb, at the end of February to get an idea of what some of the personal pain points are and where people think things are going swell. We’ve got other ideas in development, one of which I’ll be telling you about in the coming days.

Among the data that jumped out at us from the survey is that Visual Studio and Visual Studio Code were the most popular IDEs/editors among participants. The plugins for both Visual Studio (Visual D) and VS Code (code-d/serve-d/workspace-d) are each maintained by solo developers.

That’s a heavy workload for each of them. Look at the issues list for code-d and you’ll find several there (39 open/132 closed as I write), but the PR list is much shorter (1 open/21 closed as I write). What I infer from that is that the demand for improvements is higher than the supply for implementing them. And from personal experience, I know there are projects like code-d whose maintainers would love to add new features, or improve existing ones, but simply can’t (or aren’t motivated to) make the time for it.

Here then is a good place for a little experiment. What if the D Language Foundation started raising money to help fund the development of specific projects like code-d? By creating the opportunity for those with extra money but little time to directly contribute toward fixing their personal pain points and shrinking their wishlists, can development be focused toward getting bugs fixed and improvements implemented more quickly?

Long story short, I picked the VS Code plugin for our trial run because it was prominent in the survey data, it’s cross-platform, and the serve-d component can be beneficial to other IDE/editor plugins. Open Collective launched their goal system just as I was trying to determine how best to go about it, so it seemed the obvious choice (though we didn’t learn until after our announcement that it wasn’t the system we thought it was, i.e. it’s not a system of multiple, targeted fund raising goals but instead a milestone on the global donation progress bar at the top of our Open Collective page). I contacted Jan just before DConf to gauge his interest, then finally had a meeting with the Foundation board the night before the Hackathon to get approval and decide how to go about doling out the money (we decided the money should be paid out in increments based on completion of milestones, with the option to provide money as needed for targeted development costs, e.g. a Windows license, bug bounties, etc). It all came together fairly quickly.

We plan to continue this initiative and raise money for more work in the future. Some will be like this trial run, with the goal of motivating project maintainers to focus development and spend that extra hour or two a day to get things done. Some will be aimed at specific development tasks, as bounties or as payment for a single part-time or full-time developer. We’ll experiment and see what works.

We won’t be using Open Collective’s goals for this (or any other service) going forward. Instead, we’re going to add a page to the web site where we can define targets, allow donations through Open Collective or PayPal, and track donation progress. Each target will allow us to lay out exactly what the donations are being used for, so potential donors can see in advance where their money is going. We’ll be using the State of D Survey as a guide to begin with, but we’ll always be open to suggestions, and we’ll adapt to what works over what doesn’t as we go along.

As long as there are people willing to put either time or money into the D language, community, and ecosystem, this will surely pay off in the long run with more visible progress, hopefully solving a wider range of pain points than currently happens in our “what-I-want-to-work-on” system of community development. We’re looking forward to see the synergy that results from this and other initiatives going forward.

The milestones

Jan has some specific ideas about how he wants to improve his plugin tools and was happy to take this opportunity to put them all front and center. I asked him to make a list, then estimate how much time it would take to complete each task if he were working on it full time, then divide that list into roughly equal milestones of 3–4 weeks each. That does not mean he will be working full time, nor that each milestone will take 3–4 weeks; payment is not dependent on deadlines. It was simply a means of organizing his task list.

We ended up with two sets of tasks as a starting point and agreed to a $500 payout upon completion of both milestones. Once all the tasks in a milestone are completed, the $500 will be paid. At the end of the second milestone, we’ll determine what to do next – another milestone of feature improvements, a heavy round of bug fixing, or something else – and how to make use of the remaining $2000.

Following is a list of the tasks in both of the initial milestones, with a brief description of each directly from Jan (lightly edited).

Improvements & maintainence

  • add automated tests for windows 7, 10, archlinux, ubuntu, fedora, osx for startup, from scratch project initialization, reloading, adding dependencies
    There are automated tests in the workspace-d repo which test different scenarios and combinations with dub, DCD, and d-scanner, ranging from general usage to weird setups. Identifying more issues (especially on windows), creating more tests and especially running all the tests on several platforms would be a good first step towards a less buggy version of serve-d which should work on all platforms equally well.
  • Single file mode
    A requested feature and one which makes the usage of the plugin a lot easier would be single file usage. Currently, single file usage is very limited and without an open workspace it doesn’t work at all. Adding this (with quick startup time and low resource usage) will make code-d a good alternative to vim or notepad for quickly editing a D file.
  • fix unknown DDoc macro parsing
    Currently, if any unknown DDoc macros are used, they are omitted from the documentation renderer, which makes some documentation unreadable and weird. For this, libddoc needs to be worked on by identifying where exactly the macros are discarded, how they could be kept track of, and how to make it more obvious in the API without breaking backwards compatibility.
  • project template creator as separate plugin (with standardized template format if possible)
    Currently the “Create Project” command is a very static command reading from a directory in the plugin. Making this a separate VS Code plugin with an API for other plugins to extend with more functionality would make it more flexible and open it to new platforms and APIs. Also, research on if there are already some standards for this and if we can parse other template formats.
  • detect used imports & add command to remove unused ones & add Remove unused imports + sort command
    Add a way to find out if imports are used and add a command to remove unused ones. DCD could probably be extended for this.
  • code folding on grammar
    The expand/collapse feature on arrays & functions (bracket based) and lambdas. (Instead of indentation based)
  • parse dub commandline arguments
    Dub command line arguments should be able to be passed into the build buttons and future tasks. This will require parsing them because dub is used as an API and not as a program.
  • experiment with adding a mode to DCD to make all symbols available
    A mode to always give all public symbols regardless of imports and additionally provide the import where the symbol comes from (so when completing it, the IDE adds an import)

UX & Tools for beginners

  • improve UI/UX for building and running projects (implement tasks api) 
    As the tasks API is now actually released, I can incorporate the different build types into the task system of VS Code. This would include having build (debug, release), run, test for each detected dub project and submodule.
  • make workspace symbol search show more symbols
    The workspace symbol search (Ctrl-P -> #) currently is using just DCD to find exact matches for types. I would include DScanner ctag/etag results in this response to make the search better.
  • code action: improve implement interface (parse existing functions and not include them)
    Test cases need to be written, existing interfaces must be parsed, cross-file it should all still work, inherit documentation, etc. Need to check in real world applications where interfaces and classes are used. Also add support for abstract classes.
  • auto complete in diet templates (both HTML tags and D code)
    Add static HTML auto completion for tags & attributes and create a virtual D file for D code for DCD for autocompletion.
  • code action: create getter/setter for variable
    For code like int _foo;, create the property functions int foo() @property const { return _foo; } int foo(int value) @property { return _foo = value; } with automatic detection if const can be used. This makes writing classes easier (snippets already exist, but this is more intuitive) and shows beginners how properties are created. The property should be added where other properties are. It could check the comments for “Getters”, “Setters” and “Properties” if possible, otherwise just put it after a block of members.
  • code action: convert boolean parameter to Flag (+import)
    This should change the definition of a function void foo(bool createDirectory) to alias CreateDirectory = Flag!"createDirectory"; void foo(CreateDirectory createDirectory) and add the appropriate import if it doesn’t exist yet.
  • code action: make foreach parallel (with import if neccessary)
    Replace a foreach (a; array) with foreach (a; parallel(array)) and import std.parallelism.
  • code action: convert enum to bitflag enum (isBitFlagEnum assert + modify values)
    Convert any enum enum Foo { a, b, c } to enum Foo { a = 1 << 0, b = 1 << 1, c = 1 << 2 }, add static assert(isBitFlagEnum!Foo); and import std.typecons if neccessary.
  • search for unknown symbol or import online
    Use dpldocs.info. Example: import mongoschema; -> Error importing -> Search online code fix -> Add dub package mongoschemad, etc. For undefined symbols the same: check local projects for symbols, otherwise see if online providers know anything.
  • show local references from DCD & local rename
    Highlight a symbol in the document when hovering on a member and provide the ability to rename it (not cross-file, because DCD doesn’t support that).

Thank you

Thanks again to all of the donors who pushed us over the goal line for this. Though we realize not everyone will be entirely pleased with the milestone list, and that it would have been better if we had finalized everything before asking for donations rather than coming at it haphazardly like we did, we hope that most of you find more here to like than not.

It will be a little while yet before we set up the new system and announce the next goal, as we’ve got other initiatives taking priority at the moment. So please be patient. We haven’t forgotten about the State of D Survey, nor are we going to let the results sit and bitrot. This train may be slow sometimes, but it’s rolling on.

DMD 2.081.0 Released

DMD 2.081.0 is now ready for download. Things that stand out in this release are a few deprecations, the implementation of a recently approved DIP (D Improvement Proposal), and quite a bit of work on C++ compatibility. Be sure to check the changelog for details.

Improving C++ interoperability

D has had binary compatibility with C from the beginning not only because it made sense, but also because it was relatively easy to implement. C++ is a different beast. Its larger-than-C feature set and the differences between it and D introduce complexities that make implementing binary compatibility across all supported platforms a challenge to get right. Because of this, D’s extern(C++) feature has been considered a work in progress since its initial inception.

DMD 2.081.0 brings several improvements to the D <-> C++ story, mostly in the form of name mangling bug fixes and improvements. The mangling of constructors and destructors in extern(C++) now properly match the C++ side, as does that of most of D’s operator overloads (where they are semantically equivalent to C++).

Proper mangling of nullptr_t is implemented now as well. On the D side, use typeof(null):

alias nullptr_t = typeof(null);
extern(C++) void fun(nullptr_t);

The alias in the example is not required, but may help with usability and readability when interfacing with C++. As typing null everywhere is likely reflexive for most D programmers, nullptr_t may be easier to keep in mind than typeof(null) for those special C++ cases.

Most of the D operator overloads in an extern(C++) class will now correctly mangle. This means it’s now possible to bind to operator overloads in C++ classes using the standard D opBinary, opUnary, etc. The exceptions are opCmp, which has no compatible C++ implementation, and the C++ operator!, which has no compatible D implementation.

In addition to name mangling improvements, a nasty bug where extern(C++) destructors were being placed incorrectly in the C++ virtual table has been fixed, and extern(C++) constructors and destructors now semantically match C++. This means mixed-language class hierarchies are now possible and you can now pass extern(C++) classes to object.destroy when you’re done with them.

Indirectly related,  __traits(getLinkage, ...) has been updated to now tell you the ABI with which a struct, class, or interface has been declared, so you can now filter out your extern(C++) aggregates from those which are extern(D) and extern(Objective-C).

The following shows some of the new features in action. First, the C++ class:

#include <iostream>
class CClass {
private:
    int _val;
public:
    CClass(int v) : _val(v) {}
    virtual ~CClass() { std::cout << "Goodbye #" << _val << std::endl; }
    virtual int getVal() { return _val; }
    CClass* operator+(CClass const * const rhs);
};

CClass* CClass::operator+(CClass const * const rhs) {
    return new CClass(_val + rhs->_val);
}

And now the D side:

extern(C++) class CClass
{
    private int _val;
    this(int);
    ~this();
    int getVal();
    CClass opBinary(string op : "+")(const CClass foo);
}

class DClass : CClass
{
    this(int v)
    {
        super(v);
    }
    ~this() {}
    override extern(C++) int getVal() { return super.getVal() + 10; }
}

void main()
{
    import std.stdio : writeln;

    writeln("CClass linkage: ", __traits(getLinkage, CClass));
    writeln("DClass linkage: ", __traits(getLinkage, DClass));

    DClass clazz1 = new DClass(5);
    scope(exit) destroy(clazz1);
    writeln("clazz1._val: ", clazz1.getVal());

    DClass clazz2 = new DClass(6);
    scope(exit) destroy(clazz2);
    writeln("clazz2._val: ", clazz2.getVal());

    CClass clazz3 = clazz1 + clazz2;
    scope(exit) destroy(clazz3);
    writeln("clazz3._val: ", clazz3.getVal);
}

Compile the C++ class to an object file with your C++ compiler, then pass the object file to DMD on the command line with the D source module and Bob’s your uncle (just make sure on Windows to pass -m64 or -m32mscoff to dmd if you compile the C++ file with the 64-bit or 32-bit Microsoft Build Tools, respectively).

This is still a work in progress and users diving into the deep end with C++ and D are bound to hit shallow spots more frequently than they would like, but this release marks a major leap forward in C++ interoperability.

DIP 1009

Given the amount of time DIP 1009 spent crawling through the DIP review process, it was a big relief for all involved when it was finally approved. The DIP proposed a new syntax for contracts in D. For the uninitiated, the old syntax looked like this:

int fun(ref int a, int b)
in
{
    // Preconditions
    assert(a > 0);
    assert(b >= 0, "b cannot be negative");
}
out(result) // (result) is optional if you don't need to test it
{
    // Postconditions
    assert(result > 0, "returned result must be positive");
    assert(a != 0);
}
do
{
 	// The function body
    a += b;
    return b * 100;
}

Thanks to DIP 1009, starting in DMD 2.081.0 you can do all of that more concisely with the new expression-based contract syntax:

int fun(ref int a, int b)
    in(a > 0)
    in(b >= 0, "b cannot be negative")
    out(result; result > 0, "returned result must be positive")
    out(; a != 0)
{
    a += b;
    return b * 100;
}

Note that result is optional in both the old and new out contract syntaxes and can be given any name. Also note that the old syntax will continue to work.

Deprecations

There’s not much information to add here beyond what’s already in the changelog, but these are cases that users should be aware of:

The #dbugfix campaign

The inaugural #dbugfix round prior to the release of DMD 2.080 was a success, but Round 2 has been much, much quieter (few nominations, very little discussion, and no votes).

One of the two nominated bugs selected from Round 1 was issue #18068. It was fixed and merged into the new 2.081.0 release. The second bug selected was issue #15984, which has not yet been fixed.

In Round 2, the following bugs were nominated with one vote each:

I’ll hand this list off to our team of bug fixing volunteers and hope there’s something here they can tackle.

Round 3 of the #dbugfix campaign is on now. Please nominate the bugs you want to see fixed! Create a thread in the General Forum with #dbugfix and the issue number in the title, or send out a tweet containing #dbugfix and the issue number. I’ll tally them up at the end of the cycle (September 28).

And please, if you do use the #dbugfix in a tweet, remember that it’s intended for nominating bugs you want fixed and not for bringing attention to your pull requests!

DConf 2018 Ex Post Facto

When I was ten years old, I broke a small hand mirror. For some years after, my moderately superstitious grandmother would remind me of it any time I suffered a bit of misfortune, providing me with periodic updates on how many of my seven years of bad luck I had yet to face. Two days before DConf 2018, I couldn’t help but think of her when my wife and I, having encountered a black cat the evening before, found ourselves in the wrong train car at Frankfurt station.

The train

It was an easy mistake to make. We were supposed to be in car 28, so we boarded at a door that was branded “38/28”. Inside, 2nd class was to the right and 1st class to the left. Our reservation was for the latter. We found our seats, stowed our luggage, and settled in for our trip to Munich and DConf. It was a few minutes before I noticed the big “38” on the screen of the monitor hanging from the ceiling.

I asked the first uniformed person I could find, “Are we in the right place?”. Of course, we weren’t. He informed me we couldn’t just cut through the cars to get to the correct place — we had to disembark and get back on at the other end of the train. Only, there was no time to do so, as the train was leaving in a few seconds.

“Don’t worry,” he said. “It happens.”

When the conductor came around, he assured us that all was well. The seats weren’t reserved and the whole train was going to Munich anyway. I laughed, thinking the last bit was a joke. I later learned that two trains are sometimes linked to share part of a journey and will split somewhere along the way to head to different final destinations. He was being serious!

The pre-conf jitters

A Toastmasters class I won in an essay contest after high school cured me of my fear of public speaking (prior to that, I couldn’t say two words in front of five people without going into convulsions), and after 24 years of teaching in Korea I’m perfectly comfortable speaking to groups of a few people in a small class or a few hundred at an assembly. I always know what I want to say and I’m confident in my ability to read the crowd. So when I accepted the offer to be the DConf emcee this year, I wasn’t concerned at all. Short bursts of speaking in front of 80 people? I could do that in my sleep.

But the train incident was the first in a series of unfortunate events that continued right up until a few minutes before the conference, including two embarrassing instances of my mishearing introductions and thinking a person I’d just met was someone else. By the time I had the mic in my hand, I could hear my grandmother’s voice in my head, reiterating every bit of “bad luck” I’d had since that cat had crossed my path in Frankfurt (it was actually a kitten, not entirely black, and my wife had found it adorable enough that she briefly entertained ideas on how to take it with us to Korea).

Of course, I’m not superstitious. At all. But apparently my lizard brain felt these were extraordinary circumstances. As Walter and I were chatting while we waited for the clock to countdown, I was attacked by the worst case of jitters I’ve had since high school.

It was going to be the worst DConf ever.

The conference

After the first few words were out of my mouth, the jitters evaporated. My grandmother left me alone for the rest of the conference. Barring a few minor glitches and one rather severe one, it all went rather well, though I couldn’t really tell from my perspective.

This was my first time being on the other side. Everything went by in a blur. During the talks, there were emails and Facebook messages to respond to, IRC & the livestream feed to check in on (though Sebastian Wilzbach kept a fulltime eye on them), tweets to write, and the constant concern about how to politely keep speakers in their time budget. Without the Foundation’s intern, Maria Marginean, running the mic to audience members with questions, I would have been frazzled.

Between talks, there were problems getting speakers’ laptops to display properly, questions about things I didn’t immediately have an answer for, and people to track down to resolve one issue or another. Then there were the numerous things I had planned to say each time I got up in front of everyone, only to realize after I sat back down that I had completely forgotten.

In all, I had a great time. I had less time to mingle this year, but I still caught up with some familiar folks and met several new ones. That’s always the best part of DConf for me, and that held true this year, even though many of the conversations I had were brief.

The display issues turned out not to be as troublesome as they threatened to be on the first day. The A/V team was using a bluetooth device. Plug it in to a USB port, install a driver, press the big button on the device, and you’re projecting. But a few speakers had no USB ports, some were using Linux (for which there was no driver), and some struggled to get the proper desktop to display. On the second day, the A/V guys were prepared with every adapter imaginable and, where those failed, they simply unplugged the HDMI cable from the bluetooth receiver and plugged it directly into the laptops. We still had problems sometimes with the wrong desktop showing, but in the end it all worked out.

The biggest glitch, the one we regret most of all, was the loss of the video of the first three talks. It’s something that could have been prevented with a bit of forethought. The best thing I can say about it is that it taught a valuable lesson that will be applied at future DConfs. No matter who is organizing or who is managing the A/V, the Foundation will ensure steps are taken to minimize the chance of this happening again.

In the periods that I was able to pay attention to the talks, there was a lot to enjoy.

Vang Le presented on D in genomic bioinformatics.

We’ve heard in the forums about D being used in bioinformatics, but this year was the first time we’ve witnessed a DConf talk about it. The talk sparked enough interest in the subject that Vang Le was able to get some collaboration at the Hackathon that will hopefully continue beyond as he works to expand D in the field. I look forward to seeing more talks related to this industry at future conferences.

In contrast, the topic of game development is a DConf staple (DConf 2015 was the only edition without a gamedev talk). But this year was the first time someone from Ubisoft presented (Igor Česi), and the first we’ve learned about a project some folks from the company took on as a proof-of-concept, porting D to a platform Igor wasn’t allowed to name just yet. I’ve been interested in game development as a hobby for over a couple of decades now and I don’t get to meet too many game developers in my normal line of work (the first time I met Ethan Watson in Berlin I grilled him mercilessly about his job throughout dinner), so the conversation the trio from Ubisoft had with Andrei and me (mostly Andrei) about the company and their interest in D was one of the highlights of the conference for me.

Another highlight for me was meeting Martin Odersky, our invited keynote speaker this year. I’ve followed Scala from a distance for some time; it was the first place I turned when I needed to correct my lack of experience with functional programming after std.algorithm and friends came along. Our introduction was a bit rushed, though. Five minutes before he was supposed to speak, he wasn’t anywhere in or around the conference room. Walter hadn’t seen him. Andrei hadn’t seen him. Someone reported seeing him in the restaurant. That’s where I found him, banging away at the keys on his laptop. He had realized at breakfast that his talk about abstracting over context needed a bit more context to make it more understandable, given how most of us wouldn’t have the Scala background he referenced. He was just finishing his edits as I arrived, and we got him set up right on time. I ignored my emails and FB messages for most of that talk (and actually understood quite a lot of it).

Martin Odersky was the invited keynote speaker on Day 3.

Some DConf veterans talked about work they’ve been doing, like Jonathan Davis’s dxml library, Ethan Watson’s progress on Binderoo, Dimitry Olshansky’s report on his attempt to create a unified concurrent D runtime, and Steven Schveighoffer’s experience porting a LAMP application to vibe.d. Johan Engelen expanded on a blog post he wrote earlier this year, presenting a talk on some LLVM-backed goodies in LDC that people might not be aware of.

Kai Nacke talked about using D for the blockchain.

Kai Nacke presented another first for DConf, a talk about D for the blockchain, where he did a great job simplifying a complex topic. Luís Marques’s talk on breaking away from OOP orthodoxy was immediately followed by first-time DConf speaker Jean-Louis Leroy’s related talk on open methods. And live-ask.com, the subject of Stefan Dilly’s presentation on scalable webapp development in D with Angular and vibe.d, was actually put to use during the conference — it became our primary source for taking questions online, particularly during Walter and Andrei’s Ask Us Anything session at the end of Day One.

The D Language Foundation’s scholarship recipients (a.k.a. Andrei’s Students, a.k.a. The Romanian Crew) were back to present updates on their work. We heard from Razvan Nitu on the trials and tribulations of contributing to DMD, Eduard Staniloiu on a new approach to generic collections in D, and Alexandru Jercaianu on Project Blizzard, a means of performing safe memory allocation and deallocation in D. The first two of those talks came on Day Two, which was opened by Andrei’s keynote. He had been scheduled to present on static introspection, but changed his mind and instead did a deep dive on things that are vital to D’s future in a talk titled, “Up and Coming”.

Of the three talks for which we have no video, a version of Walter’s keynote on using D in existing C codebases will be available eventually – he gave the same talk at Code Europe Kraków not long after DConf. The picture is not as rosy for the other two talks. Mario Kröplin and Stefan Rohe presented an entertaining report on their experience using D for 10 years at Funkwerk and Jon Degenhardt used his first DConf talk to update us on the performance of eBay’s TSV utilities, following up on a blog post he wrote for the D Blog on the same topic. Sadly, the videos for those talks are forever lost.

Evidence that Jon Degenhardt really did give a talk about eBay’s TSV utilities.

We did another round of lightning talks this year. It was organized as the conference progressed, and given that everyone was using their own laptops, I was sure that trying to get them shifted on and off the lectern and properly configured would be a disaster. In the end, it all came off successfully. A couple of presenters went over their five-minute time budget and two were unable to get their displays configured, but we had just enough time to get everyone in and the display-less folks improvised and presented without their slides anyway.

Liran Zvibel (whose name I can now absolutely properly pronounce) wrapped up the last full day of talks with a closing keynote. He regaled us with a report on Weka.IO’s experience with D in the development of their storage system. It was followed the next day by Shachar Shemesh’s announcement of Mecca, Weka.IO’s container/reactor library, to kick off the Hackathon. Actually, after Shachar saw that a significant number of the audience didn’t raise their hands when I asked how many would be sticking around for the Hackathon, he requested a slot in the lightning talks for an early, abbreviated announcement.

At the Hackathon, we had audio in the room for Shachar’s talk but no video, so I set up a livestream from my MacBook (though it has poor audio quality). Ali Çehreli made sure it kept rolling and he repositioned it as needed. After the talk and the group photo (which Andrei missed!), I saw a lot of folks with their heads together, but I only know of what a couple of them were doing (maybe we’ll hear more about that in future blog posts).

The big announcement at the Hackathon was that the D Language Foundation will now start funding projects via targeted donations. The VS Code plugin code-d (and its companion, serve-d) is the first project selected. Once we achieve $3000 in donations, the project maintainer will be eligible to get that money as he meets specific milestones. Unfortunately, the new goals system at Open Collective isn’t what we expected it to be. We’ll make do with it for now, but we’ll likely be moving to an approach that allows us to set up multiple fundraising targets and count donations through Open Collective, PayPal, and elsewhere. Until then, if you’re a code-d user (or just want to support the project), head to our Open Collective page to show your appreciation and make a financial contribution to its development.

Videos of the talks are starting to appear on HLMC’s YouTube channel. Once they’re all online, we’ll set up a playlist on the D Language Foundation’s channel (you can find playlists of all the previous conferences there now).

Until next year…

Thanks to everyone who attended DConf 2018 in Munich, to everyone who supported it with time or money, and to QA Systems and HLMC Events for putting it all together.

Some of the DConf 2018 crew.

It’s too early to say where DConf 2019 will be hosted, but plans regarding some of the generic organization details are already in the works. I expect some announcements will start coming out a little bit earlier than in the past. Stay tuned!

Communal Benevolence Required

DConf 2018 is coming up fast. The final pieces of preparation are soon to fall into place and then the day will be upon us. Already, we’re looking at what comes next.

We recently put out a survey to gather a good deal of feedback from the community. At that time, we promised that the survey results would be used to guide some initiatives going forward. Though we’ve been silent on that front, it’s still in the works. You should be hearing an announcement at DConf about the first such initiative, and a subsequent blog post will lay out the framework we’ll be following going forward.

One thing all of our initiatives will have in common is that they will require resources. That, unfortunately, is not something the D Language Foundation has in large quantities. Whether we’re talking about time, money, or manpower, D’s development is constrained by the limited resources available. Fortunately for us, one can be used to drum up the other two, so in the absence of enough folks able to donate their time and manpower, we’ll be relying on donations of money to buy what we need to meet the community’s goals.

The same holds for DConf. In order to keep the registration fees relatively affordable, reimburse the speakers, buy the T-shirts, and fund all of the costs associated with the event, the Foundation uses money from the donation pool to cover what the registrations don’t. That’s exactly the sort of thing the donations are for, of course, but the more we dip into the pool for the conference, the longer it takes to replenish after.

So if you’re looking to help the D community, this is an excellent way to do it. You can head over to our OpenCollective page, or choose one of the alternatives on our donation page at dlang.org, and throw a few dollars at us. Leave a note on the donation form letting us know you’re doing this to support DConf 2018.

As a reminder, if you haven’t registered for DConf and aren’t planning to, the Hackathon on May 5th is open to all. So if you’re in the area that day, come on in and see us!

Announcing the DConf 2018 Hackathon Pass

As I write, General Admission for DConf 2018 in Munich has been open for one week. The conference runs from May 2–5, with three days of talks capped off by a day-long Hackathon. We’ve heard there are some in the area who would like to attend, but just can’t get away from work for three days for the full conference. So we’ve decided to do something about it.

This year,  the Hackathon is open, free of charge, to anyone interested in hanging out with us on Saturday, May 5th, the final day of the conference. You’ll have to bring your own lunch, but you’ll get access to the full day. This time around, it’s more than just hacking on and talking about D code.

We’ve added one more new item to the list this year: the Hackathon will be kicked off with a talk by Shachar Shemesh from WekaIO. His talk, Announcing Mecca, introduces the company’s open source D project to the world, a perfect way to get us started on an event intended to motivate hacking on open source D projects.

Last year, our inaugural Hackathon was a great success. It’s not a hackathon in the traditional sense, but an opportunity for D programmers to come together and spend the day working on the projects that they think matter, improve the D ecosystem, or learn more about D programming.

Any attendee with an open source D project is welcome to seek out collaborators to help them get work done on site, or to hunker down and help others hack features and bug fixes into their own projects, or any project in the D ecosystem. Some may simply want to sit and code by themselves, getting instant feedback from others on site when it’s needed, and that’s fine, too. Last year’s event proved to be quite a productive day, particularly for the core D projects.

Those not in the mood for coding, or who aren’t yet up to speed on D programming, are covered, too. Last year, groups gathered to hold brainstorming sessions on ideas for new projects, or for solving complex issues in the core. Others, D’s BDFL Walter Bright among them, took some time during the day to tutor less experienced D programmers, on specific language features and other programming topics, in informal sessions that came about because a few people sitting near each other started asking questions.

In short, the DConf Hackathon is a day of getting things done in a friendly and collaborative environment full of people with shared interests. It’s a loosely organized event, the direction of which is determined by those participating. We’ll throw some ideas out there for you to work on if you need the cues, but you’re free to go your own way.

Last year’s Hackathon fell on a Sunday, and some of the conference attendees had to skip it or leave early in order to get back home for work on Monday. This year, it’s on a Saturday, so we hope that if you weren’t able to stick around last year you can do so this time around.

If you’ve never been to a DConf or don’t know much about the D language, the Hackathon Pass is a great remedy for both ailments. So if you’re in or near Munich Saturday, May 5th, we invite you come on by and hear about a great new open source project, spend a day with a friendly crowd of interesting people, and learn a little about the D programming language in the process.

DConf 2018 Programme & Open Registration

The programme for DConf 2018, May 2–5 in Munich, has been published and general registration is now open.

As always, we’ve got keynotes from Walter and Andrei, and an invited guest speaker, this time in the form of Martin Odersky, professor at EPFL and creator of the Scala language. Our closing keynote comes in the pleasant shape of Liran Zvibel, CEO of WekaIO. In between we’ve got another strong lineup of speakers this year, covering a number of topics from the familiar to the new.

We’ve got experience reports, both commercial and personal, web app development, design methodology, the runtime, tooling, and more. Two topics not seen at DConf before include using D for blockchain application development and in genomic bioinformatics. Some of the Foundation’s scholarship students are back for their progress reports, we’ve got our traditional round of Lightning Talks, and Walter and Andrei will be taking the stage in an Ask us Anything session at the end of Day One!

Don’t forget, we’re running another Hackathon this year. Those who stick around on May 5 (and we hope everyone does) can get together for the morning and afternoon sessions to mingle, talk, hack, and squash bugs. It’s not a hackathon in the traditional sense, but one that is driven by those who attend. Find D coders to help you with your projects, contribute to other D projects, hack at some bugs from the D bug tracker, brainstorm ideas for making the D programming experience better… just go where it takes you.

21 hours of talks and an all-day Hackathon are nothing to sneeze at, but there’s much more to DConf than that. It’s the meetup of meetups for members of the D community, a chance to put faces to names and establish real-world relationships with those we’ve only met online. It’s an opportunity to introduce the language to those who don’t know it well and welcome them into the community. Some of the best DConf memories are made in between the talks, in the restaurants at dinner, and in the hotel lobby, where you’ll find an ongoing stream of interesting and intelligent conversation. And don’t forget the great German beer!

So book your flights and your rooms, pack your bags, and register for Four Days of DLang at DConf 2018 in Munich!

The D Language Foundation at Open Collective

In its work guiding the development of D and promoting its adoption, the D Language Foundation is driven primarily by donations big and small. The money comes in from different sources, the most visible being those listed on the website’s donation page, and is put to use in different ways.

Donors typically receive an email thanking them for their generosity. Recently, we added a sponsors page to shine a light on those who have given and who are willing to have their names on public display. That and a line in the Vision Document about average monthly expenses are the only obvious bits of transparency in the process.

Today, the D Language Foundation is opening a new chapter in the donation story with our Open Collective page. According to OpenCollective.com, an open collective is,

A group of people with a shared mission that operates in full transparency.

The site allows us to set up packages that donors can choose from, with or without rewards, for one-time and recurring donations, at levels within reach of individuals and those more suited for corporate budgets. Donors can leave notes with their donations to tell us what they think of our work or what’s important to them. We can submit expenses to show how the money is being used, and set up fund drives for specific targets.

In short, Open Collective gives us new possibilities in raising money, spending it, and showing how it’s spent, while also providing more opportunities for D community members to participate. We could, for example, designate a specific amount to put toward the development of a particular language or ecosystem feature of importance to the community and ask community members to help us meet that goal. A perfect opportunity to contribute for those eager to see progress in areas that matter to them. Crowd-sourcing for a niche crowd.

Those who wish to remain in the shadows can still donate behind the scenes via our other sources. Additionally, I wouldn’t expect all Foundation expenses to be listed at Open Collective. We’re inexperienced with this platform yet, so it will take us a bit of time to learn how to make it work best for all of us, but we have high hopes that it will prove beneficial in the long run.

On a related note, if you shop at Amazon, you can help us out by making your purchases via smile.amazon.com and choosing the D Language Foundation as your charity. A small percentage of your purchases through smile.amazon.com will go to the Foundation as long as it is selected as your charity. From now until March 31, the donation percentage is tripled.

Amazon Smile

Don’t forget, the State of D Survey is still open for a couple more days. If you haven’t completed it yet, please take the time to do so. We’re looking forward to see what comes from it.

DConf 2018 Munich: The Venue

The deadline for DConf 2018 submissions is this Sunday. If you’re on the fence about sending in a proposal, don’t still be poised there when midnight AOE strikes on the 25th! Come down before then on the submission side. If you’re selected to speak, you may be eligible for reimbursement for your hotel and travel expenses (reasonable expenses will be covered). This is our first time in Munich, and if you can pad out your visit by two or three days, there’s a lot to see while you’re there.

The venue is the NH Munich Messe hotel, located in the Zamdorf area of the city.

There’s a bus stop right outside that will get you to the Marienplatz and the New Town Hall, the world-famous center of the Bavarian capital, in short order. Not far from there, you’ll find the original Hofbräuhaus, where servers in traditional costumes pamper thousands of daily visitors from Munich and around the world, who come for the regional cuisine, music, folk dances, and historic atmosphere.

After you see the Old Town, be sure to make time for the modern world. The Deutsches Museum, which according to Wikipedia is the world’s largest science and technology museum, is a good place to start. With over 28,000 exhibits, it may be difficult to pull yourself away.

There are plenty of daytrip destinations outside of the city. One must-see spot is Neuschwanstein castle, one of the most recognizable structures in the world. World War II history buffs may be interested in a trip to Nuremburg. There are plenty of options for guided tours that can get you to these and other locations and back in a day, but it’s not difficult to get there on your own. Sites like TripAdvisor can help with the planning.

As for the hotel:

All the 253 rooms have just been refurbished, so you can expect stylish, comfortable bases. Nice touches include free Wi-Fi and pillow menus. Other highlights include a restaurant serving Bavarian dishes, a stylish lobby bar, and a compact fitness center. The Hotel also has Sky TV, allowing you to catch up on the day’s sporting events.

There’s a bar with a terrace which has the look and feel of a typical Bavarian beer garden. It’s surrounded by a little garden and is a great spot to enjoy a glass of wine or a light meal in the sunshine.

For the health-conscious, they also have a gym that’s open from 2:00 pm to 11:00 pm, and it can be opened at other times upon request. It was refurbished in 2015 and includes a sauna.

Most importantly for us, they are offering DConf attendees a discount on single rooms. Drop a line to reservierungen@nh-hotels.com to take advantage of this offer.

When the submission deadline passes this weekend, the next date to focus on is March 17th. That’s when the early-bird registration discount ends. Head over to the registration page before then!

DConf 2018: Register Now!

It was the middle of November when DConf 2018 was announced here on this blog in a Q & A session with Andrei Alexandrescu. Since then, the DConf train has slowly been building up steam as things have been happening behind the scenes. Now it’s full steam ahead!

 

The venue

DConf 2018 is being hosted at the NH München Messe hotel. They’re offering a discount (single room, breakfast included) to all conference attendees. If you’d like to cut out the commute time between your hotel and DConf, everything you need to take advantage of the discount and get to the hotel is over at the DConf 2018 venue page.

The registration fees

The cost of general admission to DConf 2018 is US $400. A 15% early-bird discount is available from now until March 17. This year, there’s a special deal for past attendees. If you signed up for DConf 2017, the 15% discount doesn’t go away in March. For you, it applies right up to the regular registration deadline. Whenever you’re ready to sign up, head on over to the DConf 2018 registration page where you can pay via PayPal or Eventbrite.

The invited keynote speaker

The D Language Foundation is excited to announce that Martin Odersky, the inventor of the Scala language, a professor at EPFL in Lausanne, Switzerland, and a founder of Lightbend, is this year’s invited keynote speaker. He’ll be presenting a talk titled, “How to Abstract Over Context”, in which he’ll “argue that implicit parameters as they are found in Scala are a canonical way to express context and that implicit function types are the right way to abstract over it.” We’re looking forward to it!

The partners

The time around, the conference is being hosted by QA Systems, a provider of tools for automating unit testing, code coverage, integration testing, and static analysis, in conjunction with HLMC, a company specialized in the organization of IT events. They’re working hard to ensure DConf 2018 is a success. We know it will be.

The call for submissions

Don’t forget, we’re taking submissions for D-language related papers, talks, demos, panels, and research reports until February 25. We’re eager to hear about what’s happening out there in the world of the D programming language. Put your proposal together and send it to foundation@dlang.org for consideration. If you’ve never submitted to DConf before, please give the guidelines a look over before you do so.

The uninitiated

We’re eager to see new faces this year, especially those who know little or nothing about the D programming language. If you or someone you know hasn’t yet figured out what all the fuss is about, we want a chance to show you. The D language community are a friendly bunch, happy to partake in engaging and intelligent conversation well into the night. And we love to meet new people! Every DConf is a chance to reinforce old bonds and forge new ones. You may arrive as a stranger, but you’ll leave as a friend.

The months ahead

As May 2 draws closer, keep an eye on this blog for more DConf 2018 updates, including posts from our partners, scheduled speakers, and the D Language Foundation.

DConf 2018: Assemblage in Bavaria

It’s official! The D Language Foundation has put out a call for submissions for the next iteration of the annual gathering of D programming language enthusiasts. DConf 2018, hosted by QA Systems, is taking place in Munich from May 2nd to the 5th, 2018.

This time around, there’s a focus on growth and outreach. DConf has always been open to all, but past editions largely targeted those already “in the know”. For DConf 2018, the D Language Foundation is actively reaching out, encouraging anyone with little or no D language experience to stop by and see what all the fuss is about.

In the coming months, the D Blog will feature a series of posts related to DConf 2018. To get us started, Andrei Alexandrescu, Vice President and Treasurer of the D Language Foundation, sat down to answer a few questions about the event.


Q: Thanks for taking time out of your schedule for this, Andrei. The first thing I want to get to is the choice of location. At the end of DConf 2017, there was a lot of speculation about where the next edition would be held. We’ve seen two in Menlo Park, California, one in Orem, Utah, and two in Berlin. What led to the choice of Munich?

A: It has a lot to do with my recent visit there. I had mentioned a while ago to our tireless collaborator Sebastian Wilzbach (who studies at both the Technical University of Munich and Ludwig Maximilian University) about the annual classes I teach in neighboring Stuttgart. He suggested I make two trips in one and give a talk in Munich as well.

Once we committed to a date, I was shocked by the earnestness of everybody involved with organizing. The event filled within an hour of opening, in comparable amounts by existing D programmers (there’s a strong D community in Munich) and by curious programmers coming from other languages. There was even some competition among companies willing to host the event.

We ended up holding it at Brainlab’s new headquarters (check it out, they are a great innovator in medical technology). The event was a triumph! The folks in the audience were that combination of smart, receptive, and inquisitive that makes for an amazing interaction. We started at 6:30 and quite a few of us segued into beers, dinner, and of course more chatting, to finally part around midnight.

At that point I thought, Munich sounds like a perfect place for DConf. Later I spoke to my business partner (Andreas Sczepansky, owner of QA Systems) about the great reception the talk got in Munich. He got intrigued and agreed to work with us on DConf 2018. And here we are.

Q: What can attendees expect to see at DConf 2018?

A: We’re counting on a strong technical program, as has been the case in the past events. Also, last year’s day-long hackathon (a largely unstructured “let’s work on cool stuff in small groups” day) was surprisingly successful and enjoyed by everyone involved. So we’re making it bigger and hopefully better this year. It will be on the last day of the event, May 5th.

This year we also want to promote a growth theme. We’re working on bringing a strong outside keynote speaker, and QA Systems will help us to market to companies and grass-roots coders who are currently using other languages. We believe D offers many strategic advantages to the high-tech milieu in Bavaria and beyond.

Q: What do you mean by that? What makes Bavaria special?

A: I noticed there’s a strong IT industry in the area built around automotive, industrial machinery, healthcare, scientific computing, and more. Really serious software with difficult demands and high stakes. We’re talking about systems ranging from memory-constrained embedded systems to high-performance desktop software to large systems that take a long time to design, build, and test. D is all about building fast software, fast. So we have a great opportunity to make the strong case that the D language could help these application domains.

Q: You and Walter Bright have traditionally given the opening and closing keynotes at every DConf. What are you guys planning to talk about this time?

A: I know Walter is considering giving a talk on Project Detente – a multifaceted approach to smooth interoperation with C and C++ that also allows easy incremental migration of large projects from those languages to D. As for me, I haven’t decided yet. I’m really excited by the opportunities opened by this Design by Introspection thing I discussed in my DConf 2017 keynote [Also, see the blog post he wrote about his presentation at Google’s Tel Aviv campus – Ed.].

Q: Last question: what’s the elevator pitch for DConf? If you only had 30 seconds to sell a prospective attendee on the event, what would you say?

A: D is a language with depth. Richness. It has unique solutions to some difficult problems, such as reconciling compile-time computation, partial evaluation, domain-specific languages, and metaprogramming all together in a wholesome manner. Such matters are so fundamental to the way we design, build, and execute our programs that we either consider them solved or unsolvable. Chances are, attending DConf will make you like the D language more. But more importantly, your view of your own métier will be improved regardless of your languages of choice.


Be sure to keep an eye on this space for more details about DConf 2018 as they are released. And if you’re planning to submit a talk, don’t procrastinate. The submission deadline is Feb 25th.

See you in Munich!