Beta List

bearophile bearophileHUGS at lycos.com
Sat May 7 03:54:48 PDT 2011


Jonathan M Davis:

> Just a reminder in case you didn't know, but there is a beta list (dmd-beta) 
> for posting and discussing beta releases of dmd prior to actual releases.

I am not yet a subscriber there. Here are some notes on 2.053beta.

This little program:

int foo(int x, int y) {
    return x / y;
}
void main() {
    foo(1, 0);
}


Produces the stack trace:

object.Error: Integer Divide by Zero
----------------
...\test.d(5): _Dmain
----------------


While this similar Python2 program:

def foo(x, y):
    return x / y
def main():
    foo(1, 0)
main()


Gives the stacktrace (feel fee to ignore the first global call to main()):

Traceback (most recent call last):
  File "...\temp.py", line 5, in <module>
    main()
  File "...\temp.py", line 4, in main
    foo(1, 0)
  File "...\temp.py", line 2, in foo
    return x / y
ZeroDivisionError: integer division or modulo by zero


On Python the stacktrace is reversed compared to the D one, maybe this is better.

And as first line it prints this, that's useful for D too:
Traceback (most recent call last):

And the Python stacktrace shows the line/function where the division by zero happens too, instead of just all the frames of the functions up to the one that has called the function that has generated the division by zero. I'd like to see foo() too in the D stacktrace.

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

Bugzilla 1330 is fixed, I have done a little CTFE benchmark:


import std.c.stdio;

size_t counter(size_t v) {
    size_t c;
    for (c = 0; v; c++)
        v &= v - 1; // clear the least significant bit set
    return c;
}

int[] tabler(int n) {
    int[] result = new int[n];
    foreach (i, ref x; result)
        x = counter(i);
    return result;
}

const int N = 4000;
const int[] t = tabler(N);

void main() {
    for (size_t i = N - 5; i < N; i++)
        printf("%u %u\n", i, t[i]);
}


Results:
2.052:     0.78 seconds, about  70 MB committed.
2.053beta: 1.56 seconds, about 140 MB committed.

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

The traits.html docs don't seem to contain the new "parent".

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

This little program:


import std.stdio, std.container;
void main() {
    auto t = redBlackTree(0, 7, 5, 2);
    writeln(t);
    writeln(t[]);
}


Prints:
std.container.RedBlackTree!(int).RedBlackTree
[0, 2, 5, 7]


But I'd like one of the two (the first, if possible) to print instead:
redBlackTree(0, 2, 5, 7)

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

This line is present two times in the changelog:

Added parent to __traits for QtD support

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

Regarding this bug:
http://d.puremagic.com/issues/show_bug.cgi?id=4298


This little program:

enum int[] arr = [1, 2, 3];
void main() {
    assert(arr.ptr == arr.ptr);
}


Generates this asm:


__Dmain comdat
L0:     push    EAX
        mov EAX,offset FLAT:_D11TypeInfo_Ai6__initZ
        push    EBX
        push    ESI
        push    3
        push    2
        push    1
        push    3
        push    EAX
        call    near ptr __d_arrayliteralT
        add ESP,014h
        mov ECX,EAX
        push    ECX
        sub ESP,4
        mov EDX,offset FLAT:_D11TypeInfo_Ai6__initZ
        push    3
        mov EBX,3
        push    2
        push    1
        push    3
        push    EDX
        call    near ptr __d_arrayliteralT
        mov ECX,EAX
        add ESP,014h
        add ESP,4
        mov ESI,ECX
        mov EAX,3
        pop ECX
        cmp ECX,ESI
        je  L55
        mov EAX,3
        call    near ptr _D4test8__assertFiZv
L55:        xor EAX,EAX
        pop ESI
        pop EBX
        pop ECX
        ret

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

Bye,
bearophile


More information about the Digitalmars-d mailing list