Я не могу сказать, почему они не добавили что-то подобное, но в случае с лямбдами, они не были просто добавлены к языку.
Они началиЖизнь как реализация библиотеки в Boost, которая доказала, что
- лямбды широко используются: многие люди будут использовать их, когда они будут доступны, и что
- реализация библиотеки вC ++ 03 имеет ряд недостатков.
Исходя из этого, комитет решил принять некие лямбды в C ++ 0x, и я считаю, что они изначально экспериментировалис добавлением более общих языковых возможностей, позволяющих реализовать лучшую библиотеку, чем у Boost.
И в конечном итоге они сделали ее основной функцией языка, поскольку у них не было другого выбора: потому что она* Можно сделать достаточно хорошей библиотечной реализацией.
Новые возможности базового языка не просто добавляются в язык, потому что они кажутся хорошей идеей.Комитет очень не хочет добавлять их, и рассматриваемая особенность действительно должна проявить себя.Должно быть показано, что эта возможность:
- возможна для реализации в компиляторе,
- собирается решить реальную потребность и
- , что реализация библиотеки нене достаточно хорошо.
В случае, если ключевое слово yield
, мы знаем, что первый пункт может быть решен.Как вы показали, это довольно простое преобразование, которое можно выполнить механически.
Второй момент сложен.Сколько из нужно для этого есть?Насколько широко используются существующие реализации библиотек?Сколько людей попросили об этом или представили предложения для этого?
Кажется, последний пункт тоже прошел.По крайней мере, в C ++ 03 реализация библиотеки имеет некоторые недостатки, как вы указали, что может оправдать реализацию на базовом языке.Может ли быть реализована лучшая реализация библиотеки в C ++ 0x?
Так что я подозреваю, что главная проблема - это отсутствие интереса.C ++ уже огромный язык, и никто не хочет, чтобы он стал больше, если только добавляемые функции не стоят действительно .Я подозреваю, что это просто недостаточно полезно.