is not bad

https://godbolt.org/g/bSfubs

On Tue, Oct 3, 2017 at 3:19 PM, SrMordred via Digitalmars-d <digitalmars-d@puremagic.com> wrote:
//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.