A few notes on choosing between Go and D for a quick project
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Wed Mar 18 11:47:36 PDT 2015
On 3/18/15 4:53 AM, 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.
Yah, that's a problem with documentation. Such idioms should be well known.
> 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.
And doesn't work. The code that works is a fair amount less trivial than
that, and actually needs to do pretty much what the algorithms do.
> 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.
No.
> What if this pattern repeats a few times in the code?
So much the better.
> I'd rather have a single function that have the explicit loop than
> having this pattern in slight variations spread in the code.
No.
> Writing code is easy, maintaining it afterwards is costly.
Agreed but works against your point.
Andrei
More information about the Digitalmars-d
mailing list