Ура, лямбды-шаблоны! (пока только в Clang)
От: jazzer Россия Skype: enerjazzer
Дата: 21.12.12 02:14
Оценка: 99 (13) :)
Это которые с auto в параметрах и все такое:
http://isocpp.org/blog/2012/12/an-implementation-of-generic-lambdas-request-for-feedback-faisal-vali

Скопирую самую вкусность оттуда, для тех, у кого линк не откроется:

The current version (12/2012) implements subproposals 2.1, 2.2, 2.3 and 2.5.

2.1 Allow the type-specifier within a parameter declaration of a lambda to be auto (i.e. auto is mandatory)

auto Sum = [](auto a, decltype(a) b) { return a + b; };
int i = Sum(3, 4);
double d = Sum(3.14, 2.77);


2.2 Allow the use of familiar template syntax in lambda expressions
auto NumElements = []<int N>(auto (&a)[N]) { return N; };
int arri[]{1, 2, 3};
double arrd[]{3.14, 2.77, 6.626};
auto total = NumElements(arri) + NumElements(arrd);


2.3 Permit a lambda body to be an expression
int local = 10;
auto L = [&](auto a) a + ++local;


2.5 Autogenerate a conversion to function pointer in captureless generic lambdas
auto L = [](auto a, decltype(a) b) { return a + b; };
int (*fp)(int, int) = L;

jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Ура, лямбды-шаблоны! (пока только в Clang)
От: enji  
Дата: 21.12.12 03:32
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Это которые с auto в параметрах и все такое:

J>http://isocpp.org/blog/2012/12/an-implementation-of-generic-lambdas-request-for-feedback-faisal-vali

эх, когда же они до msvc и gcc доберутся...
Re[2]: Ура, лямбды-шаблоны! (пока только в Clang)
От: jazzer Россия Skype: enerjazzer
Дата: 21.12.12 04:06
Оценка: +1
Здравствуйте, enji, Вы писали:

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


J>>Это которые с auto в параметрах и все такое:

J>>http://isocpp.org/blog/2012/12/an-implementation-of-generic-lambdas-request-for-feedback-faisal-vali

E>эх, когда же они до msvc и gcc доберутся...

Ну, gcc, скорее всего, не заставит себя слишком долго ждать, а вот msvc...
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Ура, лямбды-шаблоны! (пока только в Clang)
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 21.12.12 04:52
Оценка:
Clang из аутсайдеров становится одним из самых передовых компиляторов. При его скорости работы, это просто великолепно
Re: Ура, лямбды-шаблоны! (пока только в Clang)
От: qadmium  
Дата: 21.12.12 11:11
Оценка: 4 (1) :))) :))) :)
auto NumElements = []<int N>(auto (&a)[N]) { return N; };


назовите синтаксическую конструкцию в котрой используются все виды скобочек доступных в c++...
Re[2]: Ура, лямбды-шаблоны! (пока только в Clang)
От: trophim Россия  
Дата: 21.12.12 19:13
Оценка:
а как его пощупать на венде?
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Let it be! — Давайте есть пчелу!
Re[2]: Ура, лямбды-шаблоны! (пока только в Clang)
От: Roman Odaisky Украина  
Дата: 21.12.12 22:35
Оценка: 29 (1) :)
Здравствуйте, qadmium, Вы писали:

Q>auto NumElements = []<int N>(auto (&a)[N]) { return N; };


Q>назовите синтаксическую конструкцию в котрой используются все виды скобочек доступных в c++...


Теперь допустимым C++-кодом будет не только [](){}(), но и []<>(){}()?
До последнего не верил в пирамиду Лебедева.
Re[2]: Ура, лямбды-шаблоны! (пока только в Clang)
От: UA Украина  
Дата: 22.12.12 11:30
Оценка:
Здравствуйте, qadmium, Вы писали:

Q>
Q>auto NumElements = []<int N>(auto (&a)[N]) { return N; };
Q>


Q>назовите синтаксическую конструкцию в котрой используются все виды скобочек доступных в c++...


Я даже боюсь произносить это вслух!
Re[2]: Ура, лямбды-шаблоны! (пока только в Clang)
От: CreatorCray  
Дата: 24.12.12 07:50
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>При его скорости работы, это просто великолепно

А как у него с качеством генерируемого кода?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[3]: Ура, лямбды-шаблоны! (пока только в Clang)
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.12.12 08:52
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>А как у него с качеством генерируемого кода?


FreeBSD и Mac OS X собираются при помощи Clang. Так что, видимо, хорошо В то же время, судя по периодически выходящим тестам, генерируемый код будет несколько проигрывать GCC по скорости.
Но любят Clang не за это, а за его модульность, расширяемость, скорость работы, качество диагноститической информации об ошибках и лицензию.
Re: Ура, лямбды-шаблоны! (пока только в Clang)
От: Кодт Россия  
Дата: 26.12.12 21:55
Оценка:
Здравствуйте, jazzer, Вы писали:

<>

А какой тип скрывается за этими auto?
Или это непервоклассная сущность, которая в каждой точке подстановки превращается в функцию (сишную или std::function) нужного типа?

Что тогда происходит с захватом контекста?
int x = 123;
auto f = [x](auto y) { std::cout << x << " " << y << std::endl; }; // x - по значению
f(1); // 123 1
x = 456;
f(2); // 123 2 или 456 2 - т.е. мы пересоздали функцию или воспользовались старым экземпляром?
f(3.4); // 123 3.4 или 456 3.4 - т.е. мы создали функцию прямо сейчас или захватили контекст предварительно?
Перекуём баги на фичи!
Re[2]: Ура, лямбды-шаблоны! (пока только в Clang)
От: jazzer Россия Skype: enerjazzer
Дата: 27.12.12 01:47
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>А какой тип скрывается за этими auto?

К>Или это непервоклассная сущность, которая в каждой точке подстановки превращается в функцию (сишную или std::function) нужного типа?
К>Что тогда происходит с захватом контекста?

Имхо, единственным правильным решением будет реализовывать такие лямбды как обычные функторы, но с шаблонным оператором().
Т.е. захват будет один (и будет членом функтора).

Заодно ими можно будет гулять по гетерогенным структурам типа boost::fusion::vector, boost/std::tuple, boost::variant.
По крайней мере, я такие писал всегда руками, и все замечательно работало (см. мою старую статью http://rsdn.ru/forum/cpp/2899831.1
Автор: jazzer
Дата: 02.04.08
)

ЗЫ Лямбды уже сейчас реализуются как функторы, так что это довольно маленькое изменение, единственное, что нужно, — разрешить локальным классам иметь шаблонные члены. (Это просто следующий шаг после уже сделанного для обычных лямбд — разрешили инстанцировать шаблоны локальными классами)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.