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

weaselcat via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 18 11:54:20 PDT 2015


On Wednesday, 18 March 2015 at 11:53:06 UTC, Elazar Leibovich 
wrote:
> On Friday, 13 March 2015 at 17:31:09 UTC, Andrei Alexandrescu 
> wrote:
>>
>> For example the expression (assuming s is e.g. a string)
>>
>>  File("/tmp/a").byChunk(4096).joiner.startsWith(s)
>>
>> opens a file, progressively reads chunks of 4KB, stitches them 
>> together at no cost, compares against a prefix until it makes 
>> a decision, then closes the file and returns the result. A 
>> putative Go user wouldn't even dream of using HasPrefix 
>> directly on a stream coming from a file; the whole endeavor 
>> would be a function that painstakingly takes all of these 
>> steps by hand.
>
> I personally, would have no idea what this piece of code is 
> doing
> upon first sight. I'll have to look at the documentation of
> at least two functions to understand that, and I'll have to
> think carefully about what and who would throw in case of an 
> error.
>
> Something like
>
>     while (n != EOF) {
>         n = read(fd, buf, sizeof(buf));
>         if (n==-1) throw(...);
>         if (strcmp(buf, PREFIX) == 0) {
>              return buf;
>         }
>     }
>     return NULL;
>
> Requires no prior knowledge, and have similar effect.
>
> I'd rather have a loop written by hand in my production code 
> any day,
> so that when debugging it, and reading it I'll have easier time
> to understand it, even though it would cost me a few more lines
> when writing the code.
>
> What if this pattern repeats a few times in the code?
>
> I'd rather have a single function that have the explicit loop 
> than
> having this pattern in slight variations spread in the code.
>
> Writing code is easy, maintaining it afterwards is costly.

I don't want to come off as rude, but your response sounds like 
someone who has little to no experience with functional 
programming(i.e, a C background given your example.)

One of the major ways D parts with the C-family is it has a 
strong foothold in functional programming and blends it together 
extremely well. IMO using D like a better C is hurting only 
yourself - functional programming is great. : )


More information about the Digitalmars-d mailing list