Benjamin Shropshire: > Anyone care to add more details? > http://stackoverflow.com/questions/1109995/do-getters-and-setters-impact-performance-in-c-d-java/1110324#1110324
I think DMD is currently unable to de-virtualize virtual getters and setters. Virtual calls are a bit slower by itself, but they also don't allow inlining, so successive standard optimizations can't be done. So if such accesses to the attribute is a virtual call and this happens in a "hot" part of the code, then it may slow down your code significantly. (if it happens in non-hot parts of the code it has usually no effects. That's why Java Hot Spot doesn't need optimize all your code to produce a very fast program anyway). I have encouraged Frits van Bommel to improve the devirtualization capabilities of LDC: http://www.dsource.org/projects/ldc/changeset/1506%3A76936858d1c6 Now LDC is able to do that in few very simple situations, but most times the situation is unchanged compared to DMD. Eventually LLVM will improve, so this situation can improve by itself. But the front-end too may do something about this. Some documentation about this topic, something older: http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=B26C4304DB1DA05ECBD67CA7D9313511?doi=10.1.1.7.7766&rep=rep1&type=pdf Some more modern: http://ols.fedoraproject.org/GCC/Reprints-2006/namolaru-reprint.pdf Bye, bearophile