Origins of the D Programming Language

Adam D. Ruppe destructionator at gmail.com
Tue Dec 4 22:27:06 UTC 2018


On Tuesday, 4 December 2018 at 20:56:43 UTC, Steven Schveighoffer 
wrote:
> So there actually is history before 2009 available publicly.

Yes, you can simply look at the changelog.

http://dlang.org/changelog

It goes all the way to the beginning if you make a few clicks 
(first to 1.0, then to "even older versions"). It also includes 
downloads for most the releases from 0.50 and up.

> It's then probably possible to find the point at which D2 was 
> forked, but I'm not about to dig that much :)

Version D 1.001 Jan 23, 2007 (notable: tail recursion works 
again, New type aware GC. lol how monumental, a regression got 
fixed)


2.000 released Jun 17, 2007 (notable: Added const, invariant, and 
final.)

It is about 6 months later, and yes, const was the 
differentiating feature there... though it didn't actually break 
any existing code until D 2.006, released Oct 16, 2007: 
"Transformed all of string, wstring, and dstring into invariant 
definitions.")

2.006 was the release that majorly broke code, not 2.0. In fact, 
1.0 16 maintained some compatibility:

  Version D 1.016 Jun 14, 2007, "Added aliases string, wstring, 
and dstring to ease compatiblity with 2.0."

And 1.0 wasn't entirely afraid of evolving code... at least for a 
while:

Version D 1.005 Feb 5, 2007
New/Changed Features

     -v now emits pragma library statements and imported file names
     deprecated ===, and !==, tokens no longer recognized
     length can no longer shadow other length declarations
     Added MixinStatements, MixinExpressions, and 
MixinDeclarations.
     Added ImportExpressions.
     Added std.metastrings


(seriously, 1.005 is far more monumental than 1.000 - it added 
mixins!!!)


1.006 added CTFE and the -J switch.



But what I'm trying to say is that 2.0 was not really forked off 
of 1.0! It was 1.0 that got forked off (around D 1.016, Jun 14, 
2007) and only got some selective patches applied while D, now 
rebranded as 2.0, continued down the same path it has always been 
on.


Look at what happened to the D1 fork around the time D2 continued 
the evolution: there was extern(System) after the D2 release 
(1.021 and 2.003, released simultaneously)... but mostly, it was 
stuff under bug fixes, and very rare new features, even rarer 
changed features.


For many years before and after June 2007, D has evolved. The 
anomaly is that there was a branch of it kinda frozen in time 
which we now call D1. And as you can see from the kinda random 
version numbers quoted above, it really was totally arbitrary. It 
was totally arbitrary to call one of them 1.0 (whose only notable 
changes were a regression fix and a GC implementation detail), 
and totally arbitrary to call the bug fix release D 1.017 and the 
feature release D 2.0 instead of calling the feature release D 
1.017 and the bug fix release D 1.016.1 (which is probably what 
we'd call it if using today's system!)


More information about the Digitalmars-d mailing list