Just playing with compiler explorer to see assembly line count.

SrMordred patric.dexheimer at gmail.com
Tue Oct 3 13:19:33 UTC 2017


//D compiled with gdc 5.2 -O3

auto test(int[] arr, int cmp)
{
     int[] r;
     foreach(v ; arr)
         if(v == cmp)r~=v;
     return r;
}
// 51 lines of assembly

auto test(int[] arr, int cmp)
{
   return arr.filter!((v)=>v==cmp).array;
}
//1450 lines... what?

Ok let me look also at c++:
//gcc 7.2 -O3

vector<int> test(vector<int>& arr, int cmp) {
     vector<int> r;
     for(auto v : arr)
         if(v == cmp)r.push_back(v);
     return r;
}
//152 lines. more than D :)

vector<int> test(vector<int>& arr, int cmp) {
     vector<int> r;
     std::copy_if (arr.begin(), arr.end(), std::back_inserter(r),
      [cmp](int i){return i==cmp;} );
     return r;
}

//150 lines. That what i expected earlier with D.

Hmm. let me be 'fair' and use std.container.array just for 
curiosity:

auto test(ref Array!int arr, int cmp)
{
     Array!int r;
     foreach(v ; arr)
         if(v == cmp)r.insert(v);
     return r;
}

//5542 lines... what??

Someone interested to discuss about this?

Or point me some grotesque mistake.


More information about the Digitalmars-d mailing list