Sergey Gromov:

>Different languages require different idioms, that's my strong opinion.<

I agree a lot, but it seems I need quite more than one year to learn most D 
idioms. I am just ignorant and willing to learn.


> One really important benchmark would be something like this:
> results
> D: 5.52s
> C++: 4.96s

I have tested the following D and C++ code (note that the C++ code is a single 
file now):

// D code
class TerminateException {}
void do_stuff(int i) {
    if (i == 1_000_000_000)
        throw new TerminateException;
}
void main() {
    for (int i; ; i++) {
        try {
            do_stuff(i);
        } catch (TerminateException e) {
            break;
        }
    }
}


// C++ code
struct TerminateException {};
void do_stuff(int i) {
    if (i == 1000000000)
        throw TerminateException();
}
int main() {
    for (int i = 0; ; i++) {
        try {
            do_stuff(i);
        } catch (const TerminateException & e) {
            break;
        }
    }
    return 0;
}


My timings are:
N = 1_000_000_000:
  C++: 0.06 s
  D:   5.10 s

Compiled with:
CPU: Core 2 at 2 GHz, 2 GB Ram, Windows XP.

D code compiled with:
  DMD v1.041
  -O -release -inline

C++ code compiled with:
  gcc version 4.3.3-dw2-tdm-1 (GCC)
  -O3 -s

-------------------------------

grauzone:

> Alternatively, one could introduce nullable types:
> int? toInt(char[] s);
> The use of nullable value type int? would be a bit similar to object
> references in D. One can check it for null-ness, and using a null value
> raises a special exception.
> As a third way, one could simply return a tuple:
> (bool, int) toInt(char[] s);

That's nice enough. The return value can be a struct (can contains the result 
plus a bool (or int) error flag/value).


>>Python3 also removes the find() method of strings, and leaves only the 
>>index() method, that is like find(), but raise ValueError when the substring 
>>is not found. So you are forced to use exceptions here too.<<

>I'm shocked. That's beyond stupid. Didn't they consider ease of use?<

As usual you must know many details specific of that situation before 
commenting on a decision (I like the old -1 return value, but Python designers 
are often able to find design ideas better than my ones).
Here are some discussions on the rationale:
http://mail.python.org/pipermail/python-dev/2005-August/055704.html
http://mail.python.org/pipermail/python-dev/2005-August/055705.html
http://mail.python.org/pipermail/python-dev/2005-August/055708.html
http://mail.python.org/pipermail/python-dev/2005-August/055711.html
http://mail.python.org/pipermail/python-dev/2005-August/055712.html
http://mail.python.org/pipermail/python-dev/2005-August/055717.html
http://mail.python.org/pipermail/python-dev/2005-August/055740.html
http://mail.python.org/pipermail/python-dev/2005-August/055748.html
http://mail.python.org/pipermail/python-dev/2005-August/055754.html
And the discussion doesn't stop there...

Bye and thank you,
bearophile

Reply via email to