On Sunday, 21 December 2014 at 09:34:33 UTC, bearophile wrote:
This sounds more ambitious than the hypothetical D3 language :-)

Feature complete should be ambitious! I am only asking for something a little bit better than C++ ;-) I am not asking for fringe features like "multiple alias this"...

Modular arithmetics is handy, when you want it.

But you always get it… you can just use the modulo-operator.

I don't understand enough some of your points, so you should popularize better your ideas :-)

Which points? I assume point 1 was clear, more on point 2 and 3:

On point 2, AVX:

LLVM is getting AVX auto vectorization. AVX uses masks so that you can vectorize loops with conditionals, when the mask goes to zero then the instruction is turned into NOP. So with the proper constructs you can get branch-free vectorized inner loops.

If D wants to stay competitive as a system level language, D need to make sure that programs get efficient AVX auto vectorization out-of-the-box.

I find this poster from the last LLVM meeting interesting:

http://llvm.org/devmtg/2014-10/Slides/Nis-AVX-512ArchPoster.pdf


On point 3, allocators:

If you want reasonable and fast ref counting without code bloat you need to standardize how ref-counting is done. The simple solution is to put the ref count on a negative offset and make sure that all ref-countable class objects are allocated as separate objects.

Then you need a fast allocator. That means you need a pool where alloc/free is O(1) in the common case. By profiling allocation patterns the compiler can generate code that makes objects available when needed. Since most applications have uneven load you can initialize objects to defaults and restructuring the free memory in thread local/global heap when you are having cycles to spare.

If the compiler controls allocations it can also reuse objects when they are dead (by liveness analysis) rather than freeing/allocating, put it on the stack etc…

Reply via email to