Здравствуйте, Геннадий Васильев, Вы писали: ГВ>на фига GC? Здесь вполне достаточно снапшота по значению. Её вообще имеет смысл всю инлайнировать (кстати, я охотно допускаю, что JIT именно так и поступит). И ещё в десятках ситуаций, когда время существования вовлечённых объектов гарантированно превышает время существования лямбды — зачем GC? Зачем GC вообще ставить в известность о том, что ты создаёшь какую-то там лямбду, когда ты на 100% уверен, что она будет удалена до того, как пропадут использованные ей объекты?
Гена, я тебе открою тайну, но GC никто ни в какую известность не ставит. Всё как раз наоборот: это в плюсах нужно что-то "удалять", когда оно больше не нужно.
А GC всего лишь оставляет только те объекты, которые доступны. В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку. Зато "100% уверен" — это как раз в случае с GC: именно он даёт такую гарантию. А в твоём случае 100% — это нечестное округление от 99.9999....%
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Геннадий Васильев, Вы писали:
G>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC. ГВ>Величина этого оверхеда — вопрос с трудно предсказуемым ответом.
Тем не менее он есть.
G>>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским. ГВ>Ой, сомневаюсь.
Не сомневайся. Если бы можно было на С++ сделать хороший сборщик мусора, то его давно бы уже сделали.
G>>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.
ГВ>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то.
Ничего не снимается. Лямбды и там и есть неполноценные. Возможность сымитировать полноценные лямбды эту ситуацию не меняют.
ГВ>А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать.
Тут вопрос не только в скорости работы. Имитирование полноценных лямбд будет порождать громоздкий и\или ненадежный код.
Здравствуйте, Sinclair, Вы писали:
S>В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.
А можно раскрыть мысль? Такая лямбда не обрастет делегатом?
Здравствуйте, Sinclair, Вы писали:
S>Гена, я тебе открою тайну, но GC никто ни в какую известность не ставит. Всё как раз наоборот: это в плюсах нужно что-то "удалять", когда оно больше не нужно.
Антон, спасибо, но это для меня не тайна. Говоря "ставить в известность" я не имел в виду ручное оповещение GC об использовании объекта.
S>А GC всего лишь оставляет только те объекты, которые доступны. В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.
Ну и превосходно. Правда, AFAIK, не во всех языках с "полноценными" лямбдами дело обстоит именно так.
S>Зато "100% уверен" — это как раз в случае с GC: именно он даёт такую гарантию. А в твоём случае 100% — это нечестное округление от 99.9999....%
Да нет, есть случаи как раз тех самых 100%. Я понимаю, что хочется сказать, что я выдаю желаемое за действительное и приплести излюбленные противо-C++-ные аргументы, но смею тебя заверить, это было бы неправильным.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, gandjustas, Вы писали:
G>>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC. ГВ>>Величина этого оверхеда — вопрос с трудно предсказуемым ответом. G>Тем не менее он есть.
Он везде есть — больше или меньше.
G>>>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским. ГВ>>Ой, сомневаюсь. G>Не сомневайся. Если бы можно было на С++ сделать хороший сборщик мусора, то его давно бы уже сделали.
Дык, он как неуловимый Джо:
- Что, никто написать не может?
— Да кому он нужен?
G>>>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд. ГВ>>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то. G>Ничего не снимается. Лямбды и там и есть неполноценные. Возможность сымитировать полноценные лямбды эту ситуацию не меняют.
Понятно. Библиотечная философия C++ тебе претит. Ну что ж, на вкус и цвет...
ГВ>>А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать. G>Тут вопрос не только в скорости работы. Имитирование полноценных лямбд будет порождать громоздкий и\или ненадежный код.
Понятно. Но эту сказку про C++ рассказывают с регулярностью, достойной лучшего применения, всё то время, пока я на нём программирую — все 14 лет. Тут, знаешь, что ни язык, так непременно его апологеты апеллируют к тому, что на C++ всё глюкаво, громоздко и ненадёжно. Так что, не ты первый, не ты последний.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
ГВ>>А Microsoft с Intel-ом и не знают, что они отсебятину несут. VD>Можно ссылку на место где я могу купить компилятор от Microsoft реализующий черновик стандарта?
Дык. Гугль тебя спасёт, ключевые слова "VC10 CTP download". Это действительно бета, как ты правильно заметил (вернее — CTP, я не знаю, как он соотносится с альфа/бета/RC по обычной классификации). Про интеловский компилятор спроси у CreatorCray.
VD>Если нет, то предлагаю вам всем прекратить нести пургу.
Чья б корова...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, gandjustas, Вы писали:
G>>>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC. ГВ>>>Величина этого оверхеда — вопрос с трудно предсказуемым ответом. G>>Тем не менее он есть. ГВ>Он везде есть — больше или меньше.
О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.
G>>>>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским. ГВ>>>Ой, сомневаюсь. G>>Не сомневайся. Если бы можно было на С++ сделать хороший сборщик мусора, то его давно бы уже сделали.
ГВ>Дык, он как неуловимый Джо:
ГВ>
ГВ>- Что, никто написать не может?
ГВ>- Да кому он нужен?
Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.
G>>>>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд. ГВ>>>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то. G>>Ничего не снимается. Лямбды и там и есть неполноценные. Возможность сымитировать полноценные лямбды эту ситуацию не меняют. ГВ>Понятно. Библиотечная философия C++ тебе претит. Ну что ж, на вкус и цвет...
Не в библиотеках вопрос, лексическое замыкание накакими библиотечными функциями не заменишь, там нудно по-другом управлять временем жизни объектов.
ГВ>>>А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать. G>>Тут вопрос не только в скорости работы. Имитирование полноценных лямбд будет порождать громоздкий и\или ненадежный код.
ГВ>Понятно. Но эту сказку про C++ рассказывают с регулярностью, достойной лучшего применения, всё то время, пока я на нём программирую — все 14 лет. Тут, знаешь, что ни язык, так непременно его апологеты апеллируют к тому, что на C++ всё глюкаво, громоздко и ненадёжно. Так что, не ты первый, не ты последний.
Так действительно на С++ все глюкаво и ненадежно. А то что ьты 14 лет на нем пишешь чести тебе не делает.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>Гы-гы.
ГВ>>
ГВ>>auto isWithinRange = [](int x) -> bool { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>
ГВ>>vs.
ГВ>>
ГВ>>inline bool isWithinRange(int x) { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>
ГВ>>Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.
S>Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров.
А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.
"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например
Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Понятно. Но эту сказку про C++ рассказывают с регулярностью, достойной лучшего применения, всё то время, пока я на нём программирую — все 14 лет. Тут, знаешь, что ни язык, так непременно его апологеты апеллируют к тому, что на C++ всё глюкаво, громоздко и ненадёжно. Так что, не ты первый, не ты последний.
Что интересно , как ни язык то все к С++, не друг на друга а именно на С++.
Здравствуйте, gandjustas, Вы писали:
ГВ>>Он везде есть — больше или меньше. G>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.
В каких-то случаях — нет, в каких-то есть. Чудес же не бывает.
G>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.
ИМХО, нельзя.
G>Не в библиотеках вопрос, лексическое замыкание накакими библиотечными функциями не заменишь, там нудно по-другом управлять временем жизни объектов.
Опять двадцать пять.
G>Так действительно на С++ все глюкаво и ненадежно.
Во-во, слово в слово. Все 14 лет.
G>А то что ьты 14 лет на нем пишешь чести тебе не делает.
В чьих глазах?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, samius, Вы писали:
S>>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>>Гы-гы.
ГВ>>>
ГВ>>>auto isWithinRange = [](int x) -> bool { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>>
ГВ>>>vs.
ГВ>>>
ГВ>>>inline bool isWithinRange(int x) { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>>
ГВ>>>Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.
S>>Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров.
M>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.
Ну прям мыслитель.
Как поможет обобщенный код в процитированном примере, если SOMETHING_LOW и SOMETHING_HIGH зависят от контекста?
M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например
M>Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.
Сравнил говно с манной кашей, молодец. такими аналогиями иди пугать детей в детском саду.
Здравствуйте, minorlogic, Вы писали:
S>>Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров. M>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.
Угу, об этом и речь.
M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например
M>Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.
Глобальные переменные — это зараза ещё та, надо тебе сказать. Я когда-то (по очень синеглазой юности) сознательно приучал себя не пользоваться глобальными переменными — в противном случае сопровождаемость рискует упасть ниже плинтуса.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, minorlogic, Вы писали:
M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например
M>Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.
А GOTO удобнее функций. Из любого места в любое и без параметров!
(я так не считаю, только проиронизировал аналогию)
G>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен. ГВ>ИМХО, нельзя.
Обоснования?
G>>Не в библиотеках вопрос, лексическое замыкание накакими библиотечными функциями не заменишь, там нудно по-другом управлять временем жизни объектов. ГВ>Опять двадцать пять.
G>>Так действительно на С++ все глюкаво и ненадежно. ГВ>Во-во, слово в слово. Все 14 лет.
Так за 14 лет ничего не поменялось
С++ и по сей день остается языком, на котором больше всего завалено проектов было.
Здравствуйте, gandjustas, Вы писали:
G>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен. ГВ>>ИМХО, нельзя. G>Обоснования?
Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.
ГВ>>Во-во, слово в слово. Все 14 лет. G>Так за 14 лет ничего не поменялось
Где? В риторике критиков? Угу.
G>С++ и по сей день остается языком, на котором больше всего завалено проектов было.
Пересчитывал?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Sinclair, Вы писали:
S>>В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.
S>А можно раскрыть мысль? Такая лямбда не обрастет делегатом?
Может и обрастет. Только уборка мертвого объекта ничего не стоит, потому пофиг что чем обрастет.
Здравствуйте, gandjustas, Вы писали:
M>>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию. G> G>Ну прям мыслитель. G>Как поможет обобщенный код в процитированном примере, если SOMETHING_LOW и SOMETHING_HIGH зависят от контекста?
Буду предельно откровенен: в случае, когда SOMETHING_LOW и SOMETHING_HIGH зависят от контекста (2/3 параметров), этому коду поможет только Delete. Не знаю уж, обобщённый это будет Delete или нет.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
G>А то что ьты 14 лет на нем пишешь чести тебе не делает.
В чьих глазах?
Вопрос остаётся в силе.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, gandjustas, Вы писали:
G>>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен. ГВ>>>ИМХО, нельзя. G>>Обоснования?
ГВ>Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.
Обосновываю, сейчас в С++ популярны средства неявного управления временем жизни объектов в куче. Но эти способы обладают некоторыми недостатками.
GC, который свободен от этих недостатков, будет очень востребован.
G>>С++ и по сей день остается языком, на котором больше всего завалено проектов было. ГВ>Пересчитывал?
Я — нет, а некоторые фирмы часто занимаются статистическими исследованиями.