Информация об изменениях

Сообщение Re[14]: фреймворки на C++ от 05.09.2015 20:38

Изменено 05.09.2015 20:44 m2l

Здравствуйте, alex_public, Вы писали:

_>Начинать сравнивать синтаксис можно после проверки приблизительного равенства функциональности. Можно увидеть аналог на C# для данного http://coliru.stacked-crooked.com/a/ce0de866fa9e05bc простейшего кода с полиморфными лямбдами? ) Как только увижу его, можно будет начать разговор об удобстве синтаксиса...


Чудный образчик:
g++ --version && g++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
g++ (GCC) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

8 7 6 5 4 3 2 1


clang++ --version && clang++ -std=c++1y -O2 -Wall -pedantic -pthread main.cpp && ./a.out
clang version 3.6.0 (tags/RELEASE_360/final 235480)
Target: x86_64-unknown-linux-gnu
Thread model: posix
1 2 3 4 5 6 7 8


Intel C++ 2015:
error : "auto" is not allowed here
1>    auto tuple = [](auto... args)
error : identifier "args" is undefined
1>        return [=](auto f){ return f(args...); }; 
: error : expected a ")"
1>    auto map = [](auto... args)

И т.д., 46 ошибок. VS 2013 тоже не осилила, 15 не держу.

Как работать то должно? Какую задачу (кроме демонстрации лямбд) этот код должен решить, что на входе, что на выходе?

_>Фраза "исправили старый косяк" подразумевает, что в тоже время было известно правильное решение. Можно узнать в каком именно языке оно присутствовало? )

Ха! Нужно поискать язык где бы оно отсутствовало. Сам факт лишних копирований был вызван таким подходом к семантике ссылок и увлечением абстракциями ООП. За абстракции всегдла надо платить.

_>Так вот не стоит путать метапрограммирование и обобщённое программирование — это абсолютно разные парадигмы, предназначенные для решения совершенно разных задач. И да, обобщённое программирование в C# и C++ не сильно отличается. Но здесь то речь не о нём. Хотя возможно кого-то путает тот факт, что для метапрограммирования в C++ в основном используются те же самые шаблоны, что и для обобщённого (и как раз поэтому МП в C++ достаточно кривое, т.к. изначально шаблоны разрабатывались именно для ОП), хотя и по другому. Но из этого точно невозможно сделать вывод о наличие МП в C# — там нет ничего похожего в принципе. )))

Технически метапрограммирование есть и в чистом С, через препроцессор. Что ты подразумеваешь под метапрограммированием. Особенно интересно в плане метапрограммирование vs кодогенерация (T4), метапрограммирование vs препроцессор и метапрограммирование vs метаморфизм в реалтайме.
Re[14]: фреймворки на C++
Здравствуйте, alex_public, Вы писали:

_>Начинать сравнивать синтаксис можно после проверки приблизительного равенства функциональности. Можно увидеть аналог на C# для данного http://coliru.stacked-crooked.com/a/ce0de866fa9e05bc простейшего кода с полиморфными лямбдами? ) Как только увижу его, можно будет начать разговор об удобстве синтаксиса...


Чудный образчик:
g++ --version && g++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
g++ (GCC) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

8 7 6 5 4 3 2 1


clang++ --version && clang++ -std=c++1y -O2 -Wall -pedantic -pthread main.cpp && ./a.out
clang version 3.6.0 (tags/RELEASE_360/final 235480)
Target: x86_64-unknown-linux-gnu
Thread model: posix
1 2 3 4 5 6 7 8


Intel C++ 2015:
error : "auto" is not allowed here
1>    auto tuple = [](auto... args)
error : identifier "args" is undefined
1>        return [=](auto f){ return f(args...); }; 
: error : expected a ")"
1>    auto map = [](auto... args)

И т.д., 46 ошибок. VS 2013 тоже не осилила, 15 не держу.

Как работать то должно? Какую задачу (кроме демонстрации лямбд) этот код должен решить, что на входе, что на выходе?
Ну и как выше подметили, не хотелось бы видеть такое в реальных проектах.

_>Фраза "исправили старый косяк" подразумевает, что в тоже время было известно правильное решение. Можно узнать в каком именно языке оно присутствовало? )

Ха! Нужно поискать язык где бы оно отсутствовало. Сам факт лишних копирований был вызван таким подходом к семантике ссылок и увлечением абстракциями ООП. За абстракции всегдла надо платить.

_>Так вот не стоит путать метапрограммирование и обобщённое программирование — это абсолютно разные парадигмы, предназначенные для решения совершенно разных задач. И да, обобщённое программирование в C# и C++ не сильно отличается. Но здесь то речь не о нём. Хотя возможно кого-то путает тот факт, что для метапрограммирования в C++ в основном используются те же самые шаблоны, что и для обобщённого (и как раз поэтому МП в C++ достаточно кривое, т.к. изначально шаблоны разрабатывались именно для ОП), хотя и по другому. Но из этого точно невозможно сделать вывод о наличие МП в C# — там нет ничего похожего в принципе. )))

Технически метапрограммирование есть и в чистом С, через препроцессор. Что ты подразумеваешь под метапрограммированием. Особенно интересно в плане метапрограммирование vs кодогенерация (T4), метапрограммирование vs препроцессор и метапрограммирование vs метаморфизм в реалтайме.