Hacker News new | past | comments | ask | show | jobs | submit login
Increasing performance with static polymorphism (and other neat tricks) in D (atilanevesoncode.wordpress.com)
12 points by atilaneves on March 31, 2014 | hide | past | favorite | 5 comments



scopebuffer seems so useful, why is it hidden in internal ?

    /*
     * A destructor is not used, because that would make it not POD
     * (Plain Old Data) and it could not be placed in registers.
     *
     */
Is there a way in D to check at compile time if a type is a POD type ?

Strangely enough I had to implement something similar in C++ very recently. I went with a solution that uses alloca if the size is lower than some limit, else falls back to new. I was torn between whether to allocate an array statically or use alloca, eventually went with alloca although that is usually frowned upon. I expected this function to be called from multiple threads not all of which would need to allocate space, using an array on stack would have wasted space.

Wish C++ committee approved the proposal to have variable sized arrays like the ones C has now.


> Is there a way in D to check at compile time if a type is a POD type ?

http://dlang.org/phobos/std_traits#hasElaborateDestructor

I believe this is what you're looking for. Mayhap you need to combine it with hasElaborateCopyConstructor and/or other functions in std.traits.


scopebuffer's inclusion in Phobos was controversial. Many felt that its unusual design (such as lack of destructor), and ease of misuse, meant it shouldn't be there.


Can't the destructor issue be mitigated by

    hasElaborateDestructor( )
that biotronic pointed me to ?

EDIT: To clarify, one could have two versions one with a destructor for non POD and the current one. The compiler dispatches to the appropriate one at compile time.


No, as that doesn't convert anything to POD.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: