Re[49]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 13:09
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Я признаю наличие в других языках других реализаций лямбд. Но я не считаю "единственно нормальной" реализацию лямбд в каком-то определённом языке, или их наборе. Например, то, что лямбды в "других" языках непременно требуют вовлечения GC я считаю изъяном их реализации, пусть и повсеместно встречающимся. Я, например, знаю, что использование лямбда-выражений не всегда требует отдельного управления жизненным циклом замкнутых переменных. Отсюда, я не думаю, что непременное привлечение GC — "нормально", т.е., сродни эталону.

G>>А другие варианты есть? Явное управление временем жизни не подойдет, надеюсь это понятно.

ГВ>Да варианты-то самые обыкновенные: от отсутствия специального управления, до подсчёта ссылок и опционального (!) GC. Пойми, я не против GC самого по себе, я не люблю, когда мне его навязывают в обязательном порядке. Вот в маленькой локальной лямбде:


ГВ>
ГВ>int upper = ...;
ГВ>it = find_if(v.begin(), v.end(), [=](int x) -> bool { return x >= 0 && x <= upper; })
ГВ>


ГВ>на фига GC? Здесь вполне достаточно снапшота по значению. Её вообще имеет смысл всю инлайнировать (кстати, я охотно допускаю, что JIT именно так и поступит). И ещё в десятках ситуаций, когда время существования вовлечённых объектов гарантированно превышает время существования лямбды — зачем GC? Зачем GC вообще ставить в известность о том, что ты создаёшь какую-то там лямбду, когда ты на 100% уверен, что она будет удалена до того, как пропадут использованные ей объекты?


Простые случаи мало интересуют, они будут отлично оптимизироваться JIT. Наличие или остуствие GC там никакой роли не играет.
В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.
Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.

В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.