История изменений
Исправление pr849, (текущая версия) :
костыль
Нет, это один из изначально задекларированных способов использования лямбд.
Одно другому не мешает. :-/ Печально, что костыли изначально декларируются там, где можно было сразу сделать нормально. Потому что функционально этот способ экивалентен expression statement, но expression statement – это тривиальная конструкция в духе ФП «всё – выражение», а лямбда – лишняя сущность на ровном месте, причём ещё и временный объект. А что в итоге он optimized out – во-первых пофиг, а во-вторых получается что это уже не одна, а две лишних единицы информации: что это временный объект, и что он optimized out.
Я именно потому считаю это костылями, что подход «всё – выражение» проще, красивее, выразительнее, универсальнее, понятнее с точки зрения знакомых с ФП, и включает эти костыли как частный случай. Вместо частных случаев могли бы и поуниверсальней чего забабахать. Даже такую ерунду и то задизайнили наполовину: вместо if (int a = f(); int b = g(); ...; a == b)
надо писать if (auto [a, b, ...] = std::tuple{f(), g(), ...}; a == b)
. Идиотизм же. Туда-сюда временный тупл на ровном месте.
А могли бы вообще if {expression statement без обвязки} ...
. Пока ещё своими костылями вообще все возможности впихнуть в этот многострадальный синтаксис что-то полезное не исчерпали.
Нет, они не стоят изменений в языке
Почему нет? В gcc же сделали.
и проблем, связанных с их особенностями.
Каких проблем? Мне не встречались. Бесит только нагромождение скобок ({ ... })
и что нельзя отключить индивидуально warning при включённом pedantic.
Исправление pr849, :
костыль
Нет, это один из изначально задекларированных способов использования лямбд.
Одно другому не мешает. :-/ Печально, что костыли изначально декларируются там, где можно было сразу сделать нормально. Потому что функционально этот способ экивалентен expression statement, но expression statement – это тривиальная конструкция в духе ФП «всё – выражение», а лямбда – лишняя сущность на ровном месте, причём ещё и временный объект. А что в итоге он optimized out – во-первых пофиг, а во-вторых получается что это уже не одна, а две лишних единицы информации: что это временный объект, и что он optimized out.
Я именно потому считаю это костылями, что подход «всё – выражение» проще, красивее, выразительнее, универсальнее, понятнее с точки зрения знакомых с ФП, и включает эти костыли как частный случай. Вместо частных случаев могли бы и поуниверсальней чего забабахать. Даже такую ерунду и то задизайнили наполовину: вместо if (int a = f(); int b = g(); ...; a == b)
надо писать if (auto [a, b, ...] = std::tuple{f(), g(), ...}; a == b)
. Идиотизм же. Туда-сюда временный тупл на ровном месте.
А могли бы вообще if {expression statement без обвязки} ...
. Пока ещё своими костылями вообще все возможности впихнуть в этот синтаксис что-то полезное не исчерпали.
Нет, они не стоят изменений в языке
Почему нет? В gcc же сделали.
и проблем, связанных с их особенностями.
Каких проблем? Мне не встречались. Бесит только нагромождение скобок ({ ... })
и что нельзя отключить индивидуально warning при включённом pedantic.
Исправление pr849, :
костыль
Нет, это один из изначально задекларированных способов использования лямбд.
Одно другому не мешает. :-/ Печально, что костыли изначально декларируются там, где можно было сразу сделать нормально. Потому что функционально этот способ экивалентен expression statement, но expression statement – это тривиальная конструкция в духе ФП «всё – выражение», а лямбда – лишняя сущность на ровном месте, причём ещё и временный объект. А что в итоге он optimized out – во-первых пофиг, а во-вторых получается что это уже не одна, а две лишних единицы информации: что это временный объект, и что он optimized out.
Я именно потому считаю это костылями, что подход «всё – выражение» проще, красивее, выразительнее, универсальнее, понятнее с точки зрения знакомых с ФП, и включает эти костыли как частный случай. Вместо частных случаев могли бы и поуниверсальней чего забабахать. Даже такую ерунду и то задизайнили наполовину: вместо if (int a = f(); int b = g(); ...; a == b)
надо писать if (auto [a, b, ...] = std::tuple{f(), g(), ...}; a == b)
. Идиотизм же. Туда-сюда временный тупл на ровном месте.
А могли бы вообще if {expression statement без обвязки} ...
. Пока ещё своими костылями вообще все возможности впихнуть в этот синтаксис что-то полезное не исчерпали.
Нет, они не стоят изменений в языке
Почему нет? В gcc же сделали.
и проблем, связанных с их особенностями.
Каких проблем? Мне не встречались. Бесит только нагромождение скобок ’({ … })` и что нельзя отключить индивидуально warning при включённом pedantic.
Исправление pr849, :
костыль
Нет, это один из изначально задекларированных способов использования лямбд.
Одно другому не мешает. :-/ Печально, что костыли изначально декларируются там, где можно было сразу сделать нормально. Потому что функционально этот способ экивалентен expression statement, но expression statement – это тривиальная конструкция в духе ФП «всё – выражение», а лямбда – лишняя сущность на ровном месте, причём ещё и временный объект. А что в итоге он optimized out – во-первых пофиг, а во-вторых получается что это уже не одна, а две лишних единицы информации: что это временный объект, и что он optimized out.
Я именно потому считаю это костылями, что подход «всё – выражение» проще, красивее, выразительнее, универсальнее, понятнее с точки зрения знакомых с ФП, и включает эти костыли как частный случай. Вместо частных случаев могли бы и поуниверсальней чего забабахать. Даже такую ерунду и то задизайнили наполовину: вместо if (int a = f(); int b = g(); ...; a == b)
надо писать if (auto [a, b, ...] = std::tuple{f(), g(), ...}; a == b)
. Идиотизм же. Туда-сюда временный тупл на ровном месте.
А могли бы вообще if {expression statement без обвязки} ...
. Пока ещё своими костылями вообще все возможности впихнуть в этот синтаксис что-то полезное не исчерпали.
Нет, они не стоят изменений в языке
Почему нет? В gcc же сделали.
и проблем, связанных с их особенностями.
Каких проблем? Мне не встречались.
Исправление pr849, :
костыль
Нет, это один из изначально задекларированных способов использования лямбд.
Одно другому не мешает. :-/ Печально, что костыли изначально декларируются там, где без них вполне можно было бы обойтись. Потому что функционально этот способ экивалентен expression statement, но expression statement – это тривиальная конструкция в духе ФП «всё – выражение», а лямбда – лишняя сущность на ровном месте, причём ещё и временный объект. А что в итоге он optimized out – во-первых пофиг, а во-вторых получается что это уже не одна, а две лишних единицы информации: что это временный объект, и что он optimized out.
Я именно потому считаю это костылями, что подход «всё – выражение» проще, красивее, выразительнее, универсальнее, понятнее с точки зрения знакомых с ФП, и включает эти костыли как частный случай. Вместо частных случаев могли бы и поуниверсальней чего забабахать. Даже такую ерунду и то задизайнили наполовину: вместо if (int a = f(); int b = g(); ...; a == b)
надо писать if (auto [a, b, ...] = std::tuple{f(), g(), ...}; a == b)
. Идиотизм же. Туда-сюда временный тупл на ровном месте.
А могли бы вообще if {expression statement без обвязки} ...
. Пока ещё своими костылями вообще все возможности впихнуть в этот синтаксис что-то полезное не исчерпали.
Нет, они не стоят изменений в языке
Почему нет? В gcc же сделали.
и проблем, связанных с их особенностями.
Каких проблем? Мне не встречались.
Исходная версия pr849, :
костыль
Нет, это один из изначально задекларированных способов использования лямбд.
Одно другому не мешает. :-/ Печально, что костыли изначально декларируются там, где без них вполне можно было бы обойтись. Потому что функционально этот способ экивалентен expression statement, но expression statement – это тривиальная конструкция в духе ФП «всё – выражение», а лямбда – лишняя сущность на ровном месте, причём ещё и временный объект. А что в итоге он optimized out – во-первых пофиг, а во-вторых получается что это уже не одна, а две лишних единицы информации: что это временный объект, и что он optimized out.
Я именно потому считаю это костылями, что подход «всё – выражение» проще, красивее, выразительнее, универсальнее, понятнее с точки зрения знакомых с ФП, и включает эти костыли как частный случай. Вместо частных случаев могли бы и поуниверсальней чего забабахать. Даже такую ерунду и то задизайнили наполовину: вместо if (int a = f(); int b = g(); ...; a == b)
надо писать if (auto [a, b, ...] = std::tuple{f(), g(), ...}; a == b)
. Идиотизм же. Туда-сюда временный тупл на ровном месте.
Нет, они не стоят изменений в языке
Почему нет? В gcc же сделали.
и проблем, связанных с их особенностями.
Каких проблем? Мне не встречались.