A few notes on choosing between Go and D for a quick project

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Thu Mar 19 22:17:07 PDT 2015

On 3/19/2015 9:59 AM, "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= 
<ola.fosheim.grostad+dlang at gmail.com>" wrote:
> On Thursday, 19 March 2015 at 00:42:51 UTC, weaselcat wrote:
>> On Wednesday, 18 March 2015 at 12:59:17 UTC, bearophile wrote:
>>> High level constructs in D are often slower than low-level code, so in some
>>> cases you don't want to use them.
>> I actually found that LDC does an _amazing_ job of optimizing high level
>> constructs and converting "low level" code to higher level functional code
>> resulted in minor speedups in a lot of cases.
>> (Other performance benefits include the algorithm primitives being extensively
>> optimized in phobos.)
> If the code/compiler generates suboptimal code in the first place then
> improvements can be somewhat random. But if you write code with good cache
> locality, filling the pipeline properly then there is no alternative to going
> low level.
> Btw, take a look at this:
> http://stackoverflow.com/questions/28922323/improving-line-wise-i-o-operations-in-d
> That's really bad marketing...

Sigh. The Python version:
import sys

if __name__ == "__main__":
     if (len(sys.argv) < 2):
     infile = open(sys.argv[1])
     linect = 0
     for line in infile:
         linect += 1
     print "There are %d lines" % linect
does not allocate memory. The splitLines() version:
import std.stdio;
import std.string;
import std.file;

int main(string[] args)
   if (args.length < 2) {
     return 1;
   auto c = cast(string) read(args[1]);
   auto l = splitLines(c);
   writeln("There are ", l.length, " lines.");
   return 0;
allocates memory for all the lines and an array of them. No wonder it's slow! 
The allocations are slow, and filling them all when they are cold-cached - 
AWFUL! (It also uselessly and maddeningly auto-decodes, a misfeature of Phobos 
if there ever was one.)


More information about the Digitalmars-d mailing list