Re[7]: Что дает template metaprogramming (по сравнению с дру
От: Sergey_BG Россия  
Дата: 26.04.19 15:33
Оценка:
Здравствуйте, B0FEE664, Вы писали:
BFE>Каким же образом можно протестировать метафунцию один раз, когда не известен тип? Такую функцию придётся тестировать с каждым используемым набором типов.

Наверное также как обычную функцию, для проверки, покрывают разными вариантами данных, эту придётся покрыть ещё и достаточным количеством типов.
Сергей
Re[17]: Что дает template metaprogramming (по сравнению с др
От: SomeOne_TT  
Дата: 26.04.19 18:06
Оценка:
Здравствуйте, AlexRK, Вы писали:


ARK>Э, нет. Это принципиальный момент. На Т4 мы генерим только 4 метода со всеми комбинациями для базовых типов данных, и всё. А все векторы-матрицы пишутся обобщенным способом.


<нахожусь где-то в первом десятке страниц обсуждения, дальше еще не читал>

Человек, который промышленный код генерит по T4, должен пройти обследование у психиатра.
Сам не без греха, на T4 у меня была генерация манифест файлов с датой релиза и прочим,
но что бы классы проекта писать — это надо быть отбитым наглухо. Прости, если задел.
Re[11]: Что дает template metaprogramming (по сравнению с дру
От: B0FEE664  
Дата: 29.04.19 12:32
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Я полагаю, что на задачах типа "перелопатить 100500 коротких строк" программа на C++, которая для работы со строками честно использует std::string, сольет даже Питону.


Т.е. вы просто не знаете, как на самом деле устоен std::string, скажем, у MS.
И каждый день — без права на ошибку...
Re: Что дает template metaprogramming (по сравнению с другими яз
От: koenig  
Дата: 29.04.19 12:36
Оценка:
МР>В C++ имеется механизм template metaprogramming. В C#, Java нет какого механизма (нету ведь?). Вопрос в том какие преимущества по сравнению с C#, Java дает плюсам шаблонное метапрограммирование?

МР>Есть ли какие то конкретные задачи которые невозможно или очень трудно решить на C#, Java но сравнительно легко можно решить на плюсах?


expression templates?

особенно восхищает, как давно они появились
я думал, Тодд станет супрзвездой, а он как-то ничего такого больше не придумал
Re[15]: Что дает template metaprogramming (по сравнению с дру
От: B0FEE664  
Дата: 29.04.19 12:41
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Но правильно ли иметь в языке огромный кусок, не предназначенный для 90% пользователей этого языка, но, тем не менее, им доступный?


Да, правильно. (Это утверждение верно не только для языка, а для любой сложной проффесиональной системы.) 90% пользователей могут не знать, как устроен shared_ptr, но успешно и результативно им пользоваться.
И каждый день — без права на ошибку...
Re[16]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.04.19 14:05
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Да, правильно. (Это утверждение верно не только для языка, а для любой сложной проффесиональной системы.) 90% пользователей могут не знать, как устроен shared_ptr, но успешно и результативно им пользоваться.


Слова "сложный" и "профессиональный" не являются синонимами. В них даже букв разное количество.
Re[12]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.04.19 14:13
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

Pzz>>Я полагаю, что на задачах типа "перелопатить 100500 коротких строк" программа на C++, которая для работы со строками честно использует std::string, сольет даже Питону.


BFE>Т.е. вы просто не знаете, как на самом деле устоен std::string, скажем, у MS.


У меня была программа, которую я, правда, компилировал gcc под линухом. Вот она именно это и делала, читала некий входной файл, много думала и выплевывала из себя результаты своих раздумий в виде пары выходных файлов. И в процессе перелопачивала 100500 коротких строк. Так вот, когда я просто тупо перестал их освобождать, время работы программы снизилось с 10 секунд до полсекунды, что весьма чувствительно, надо сказать. Поскольку програграмма была "одноразовая", я так и оставил. Но выводы об эффективности C++'ного аллокатора сделал.
Re[13]: Что дает template metaprogramming (по сравнению с дру
От: B0FEE664  
Дата: 29.04.19 14:23
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>У меня была программа, которую я, правда, компилировал gcc под линухом. Вот она именно это и делала, читала некий входной файл, много думала и выплевывала из себя результаты своих раздумий в виде пары выходных файлов. И в процессе перелопачивала 100500 коротких строк. Так вот, когда я просто тупо перестал их освобождать, время работы программы снизилось с 10 секунд до полсекунды, что весьма чувствительно, надо сказать. Поскольку програграмма была "одноразовая", я так и оставил. Но выводы об эффективности C++'ного аллокатора сделал.


Если мне не изменяет память, то никогда в жизни мне не удавалась написать такой код, который бы не успевал отработать за время ожидания новых данных от файла с диска.
И каждый день — без права на ошибку...
Re[17]: Что дает template metaprogramming (по сравнению с дру
От: B0FEE664  
Дата: 29.04.19 14:38
Оценка:
Здравствуйте, Pzz, Вы писали:

BFE>>Да, правильно. (Это утверждение верно не только для языка, а для любой сложной проффесиональной системы.) 90% пользователей могут не знать, как устроен shared_ptr, но успешно и результативно им пользоваться.


Pzz>Слова "сложный" и "профессиональный" не являются синонимами. В них даже букв разное количество.

Более того, понятие "сложный" не поддаётся формализации, однако трезво оглядевшись вокруг можно заметить, что всякий профессиональный инструмент сложен в своём устройстве.
И каждый день — без права на ошибку...
Re[4]: Что дает template metaprogramming (по сравнению с другими языками)?
От: B0FEE664  
Дата: 29.04.19 15:25
Оценка:
Здравствуйте, rg45, Вы писали:

  Скрытый текст
R>https://ideone.com/TOyuvM

R>
R>#include <array>
R>#include <iostream>
R>#include <numeric>
R>#include <type_traits>
R>#include <utility>

R>template <typename T, typename U>
R>using ProductType = decltype(std::declval<T>() * std::declval<U>());

R>template <size_t N, typename T = double>
R>using Vector = std::array<T,N>;

R>template <size_t N, typename T, typename U>
R>ProductType<T,U> dotproduct(const Vector<N, T>& t, const Vector<N, U>& u)
R>{
R>  return std::inner_product(t.begin(), t.end(), u.begin(), ProductType<T,U>());
R>}

R>int main()
R>{
R>  const Vector<3, short> v1 { 1, 2, 3 };
R>  const Vector<3, signed char> v2 { 1, 2, 3 };
R>  auto res = dotproduct(v1, v2);

R>  static_assert(std::is_same<int, decltype(res)>::value, "Unxpected return type");

R>  std::cout << res << std::endl;
R>}
R>


Сдаётся мне, что такой код легко написать на JavaScript.
И каждый день — без права на ошибку...
Re[2]: Что дает template metaprogramming (по сравнению с другими языками)?
От: LuciferSaratov Россия  
Дата: 29.04.19 16:10
Оценка:
Здравствуйте, rg45, Вы писали:

R>Для этого нужно попытаться решить какую-нибудь практическую задачу. Например, реализацию векторно матричных операций для игровых/графических движков. Например, в C++ достаточно реализовать пару тройку наблонных классов и операций между ними:

>[...]
R>Получается компактно и максимально эффективно.

я, в общем-то, ничего против шаблонного программирования не имею, но справедливости ради хочу заметить, что пример с игровым движком весьма неудачен.
"в реальной практической задаче" и "максимально эффективно" в случае игрового движка это примерно так:
static inline __m128 lincomb_SSE(const __m128 &a, const Mat44 &B)
{
    __m128 result;
    result = _mm_mul_ps(_mm_shuffle_ps(a, a, 0x00), B.row[0]);
    result = _mm_add_ps(result, _mm_mul_ps(_mm_shuffle_ps(a, a, 0x55), B.row[1]));
    result = _mm_add_ps(result, _mm_mul_ps(_mm_shuffle_ps(a, a, 0xaa), B.row[2]));
    result = _mm_add_ps(result, _mm_mul_ps(_mm_shuffle_ps(a, a, 0xff), B.row[3]));
    return result;
}

void matmult_SSE(Mat44 &out, const Mat44 &A, const Mat44 &B)
{
    __m128 out0x = lincomb_SSE(A.row[0], B);
    __m128 out1x = lincomb_SSE(A.row[1], B);
    __m128 out2x = lincomb_SSE(A.row[2], B);
    __m128 out3x = lincomb_SSE(A.row[3], B);

    out.row[0] = out0x;
    out.row[1] = out1x;
    out.row[2] = out2x;
    out.row[3] = out3x;
}
Re[18]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.04.19 16:40
Оценка:
Здравствуйте, B0FEE664, Вы писали:

Pzz>>Слова "сложный" и "профессиональный" не являются синонимами. В них даже букв разное количество.

BFE>Более того, понятие "сложный" не поддаётся формализации, однако трезво оглядевшись вокруг можно заметить, что всякий профессиональный инструмент сложен в своём устройстве.

Универсальный гаечный ключ куда как более сложен в своем устройстве, чем набор качественных ключей из хорошей стали, и куда как менее профессионален.
Re[14]: Что дает template metaprogramming (по сравнению с дру
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.04.19 16:41
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Если мне не изменяет память, то никогда в жизни мне не удавалась написать такой код, который бы не успевал отработать за время ожидания новых данных от файла с диска.


Ну так и запишем, пишет простые программы и поучает тех, кто пишет сложные
Re: Что дает template metaprogramming (по сравнению с другими яз
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.05.19 12:42
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>В C++ имеется механизм template metaprogramming. В C#, Java нет какого механизма (нету ведь?). Вопрос в том какие преимущества по сравнению с C#, Java дает плюсам шаблонное метапрограммирование?

МР>Есть ли какие то конкретные задачи которые невозможно или очень трудно решить на C#, Java но сравнительно легко можно решить на плюсах?

Только сейчас увидел интересную старую, но интересную статью на эту тему: поиск по значениям. Там цикл статей, но именно в этой про метапрограммирование.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.