LINUX.ORG.RU
Ответ на: комментарий от anonymous

Видимо сие добавляет к каждому обьекту, хранимому в векторе, число 4.

И чего только люди не придумают, лишь-бы STL не учить...

anonymous
()
Ответ на: комментарий от anonymous

> И чего только люди не придумают, лишь-бы STL не учить...

Как на STL-е сделать, чтобы работала аналогичная конструкция.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Не, именно чтобы использовались векторные машинные команды (SSE, MMX или как их там) и синтаксис *отличался* от обычного, т.е. чтобы читая код это бросалось в глаза.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Swing вроде портируют, причём автоматическим транслятором. Если я ничего не путаю, конечно.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

А gcc и так может развернуть в simd инструкции, однако придется это более явно указать, чем просто копирование через итератор, либо смотреть есть ли сейчас в gnu c++ lib такие низкоуровневые оптимизации. intel c++ вообще без вариантов развернет в sse команды.

anonymous
()

а ссылку можно, а то на Planet D вроде бы ничего не было?
операторы для таких операций отдельные?

bik ★★
()
Ответ на: комментарий от Legioner

> Не, именно чтобы использовались векторные машинные команды (SSE, MMX или как их там) и синтаксис *отличался* от обычного, т.е. чтобы читая код это бросалось в глаза.

Ты издеваешься? :) Разница между С и С++ как между Earth Simulator и пентиумом-1 без ммх, плюсовцы, бедняги, какой год жрут этот софтовый симулятор компилятора с кактусами вперемешку.

Gharik
()
Ответ на: комментарий от Legioner

man функторы и алгоритмы из STL-я.

Будет ли данный код оптимизирован - другой вопрос, это уже зависит от конкретной реализации STL-я (сами плюсы позволяют проделать такую оптимизацию, через частичную инстанцинацию шаблонов).

В частности, как это делается и делалось 100 лет назад в плюсах, через STL (могу в мелких деталях напутать):

vector<int> a;

..

transform(a.begin(), a.end(), a.begin(), bind1st(plus<int>(), 4));

"Красивше" это можно так-же сделать, примерно так:

template<typename T>
class CustomVector : public std::vector<T>
{
public:
CustomVector& operator+= (const T& v)
{
transform(begin(), end(), begin(), bind1st(plus<T>(), v));
}
}

тогда, если использовать CustomVector вместо std::vector, то можно будет использовать operator+= прямо к вектору.

Предвидя ваши выпадки, сразу наперед скажу: std::transfrorm обладает большими возможостями, чем вышеназванный D-шный a[] += 4, в частности через transfrom можно сделать += только заданному диапазону вектора, а не всему, если такая возможность понадобится, или например можно добавить число к первой половине вектора, а результат положить во вторую.

P.S. Капча norent намекает, что пора думать об ипотеке.

anonymous
()
Ответ на: комментарий от anonymous

Я знаком с С++ и STL, и хотел не это увидеть (впрочем я не ожидал иного). Абсолютно всё вышеперечисленное можно сделать и в D, там тоже есть шаблоны, частичная специализация и перегрузка операторов.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

А ещё там есть замыкания и анонимные функции, с которыми использование for_each и прочих функциональных радостей становится комфортным :)

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

> Я знаком с С++ и STL, и хотел не это увидеть (впрочем я не ожидал иного). Абсолютно всё вышеперечисленное можно сделать и в D, там тоже есть шаблоны, частичная специализация и перегрузка операторов.

А в чем тогда тайный смысл a[] += 4? Уж не в том-ли, что разработчики языка D стараются впихнуть в него столько синтаксического сахара, сколько в него влезет, а потом еще мешок? Это ни к чему хорошему ни приведет.

anonymous
()
Ответ на: комментарий от anonymous

> А в чем тогда тайный смысл a[] += 4?

1. оптимизация.
2. сразу видно, что производится операция с массивом.

> разработчики языка D стараются впихнуть в него столько синтаксического сахара, сколько в него влезет, а потом еще мешок? Это ни к чему хорошему ни приведет.

Кстати мне это тоже интересно. Вроде душой понимаю, что сахар вреден, но реально на нём писать достаточно приятно и этот сахар только на пользу. Тем более что ничего криминального не случится, если вместо сахара использовать аналогичный более длинный код.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Вот прийдет C++0x, и раздавит D, т.к. в нем все это тоже будет

Да нечего ещё давить :) Придёт - посмотрим. Но сложность С++ уже, скорее всего, ничего не исправит.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> это вы еще haskell'я не видели =)))

да видел, видел, там сахар разумно сыплется.

// Да, палюсь, я регистрат млин.

fmj
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.