![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
newbee, а если захваченная переменная это ссылка, то что с ней делать ? куда лепить подсчет ? Это сообщение отредактировал(а) mes - 9.11.2011, 22:38 |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
или я чего-то не понимаю, или лямбда таки говорит компилятору не разрушать объекты на стеке?
http://liveworkspace.org/code/c3dfe28c7e25...7b160ded7607854 вывод:
Добавлено через 2 минуты и 41 секунду инкрементировать счетчик ссылок оригинальной переменной. или что? Это сообщение отредактировал(а) boostcoder - 9.11.2011, 22:41 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
а епс.. спать-спать-спать.. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
-------------------- You're face to face With man who sold the world |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Имхо, в принципе логично, что возникает UB при использовании лямбдами локальных переменных функции после выхода из этой функции. Но, блин, какого хрена городить огород, который может приводить к UB?!?
Имхо, вектор развития С++ ведет к тому, что в какой-то момент, тим-лидеры будут радикально ограничивать список доступных группе функций языка, так как 80% программеров не будут знать более 80% свойств языка (числа взяты от балды)... А может в какой-то момент начнется массовая смена языка для новых проектов (хотя, вроде уже сейчас что-то в этом духе идет). Добавлено через 7 минут и 12 секунд Имхо, это все выходит за рамки допустимого для С++. Слишком много сложных действий (причем не очевидных), которые пользователь (читай разработчик) совсем не ожидает. Например, твой подход предполагает выделение в куче контекста и создание умного указателя на него. А если у меня оператор new не работает или им пользоваться нельзя (программа для микроконтроллера, например)? Программист совсем не в курсе, что создание лямбда-функции вызовет такие "подводные" действия. Конечно, это можно прописать в учебниках и стандарте БОЛЬШИМИ КРАСНЫМИ буквами, но, есть подозрение, что книжки читают только тогда, когда все остальные методы оказались бессильны. С другой стороны, текущее поведение тоже не является чем-то правильным. Зато не нарушает идеологию - если не заказывал функциональность, то и не получишь. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ссылка может быть на что угодно, и переедана откуда угодно Добавлено через 1 минуту и 4 секунды вы предлагаете усложнить еще, не получая никакой выгоды взамен.. |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Добавлено через 4 минуты и 16 секунд Ну и? Пихаем ссылку в контест, где проблема? Я предлагаю сделать семантику замыкания такой, какая она есть в большинстве языков. Выгоды с этого вагон, это настоящее расширение парадигм С++. -------------------- You're face to face With man who sold the world |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так я не против, только надо тогда и все остальное делать как в других языках..правда это уже будет совсем не С++ Добавлено через 2 минуты и 43 секунды проблема в том, что объект , с которого сняли ссылку может быть спокойно удален когда-то после выхода из функции, но до вызова лямбды.. |
|||
|
||||
| newbee |
|
||||||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Добавлено через 3 минуты и 46 секунд
На, то же самое, но руками. Код может быть в произвольном порядке разбросан где угодно. Если программист ССЗБ и замыкает ссылки, пусть будет готов к веселой отладке. -------------------- You're face to face With man who sold the world |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
чтоб его побыстрее все бросили ? измени лозунг на "зачем этот калека среди языков" и вступай в ряды под эгидой kemmisto да все в этом языке так.. и лямбдами делу не поможешь.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
по правде сказать, мне с++ нравится почти всем. нет, есть конечно неприятные мелочи. но они настолько незначительны, что на них не стОит обращать внимания.
и такое мнение у меня не из-за того, что я пишу только на с/с++. я пишу и на пайтоне. и если нет категорических требований о том, что задача должна быть реализована исключительно средствами пайтона, то я всю логику пишу на с/с++ и выношу ее в .dll/.so при помощи boost.python, из из пайтона работаю с ней. нет, конечно, бывают дико скучные задачи, которые хочется за###кодить как можно быстрей. ГУЙ на пример. в таких случаях лучше это делать на более подходящем для этого ЯП. Up. кстати пайтоновские лямбды тоже ругают за ограничение в одну строку кода. Добавлено @ 00:23 тема превратилась в сплошной оффтопик. по сабжу, будут идеи? Это сообщение отредактировал(а) boostcoder - 10.11.2011, 00:40 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
в PL-образный монстр он врядли превратится. хотя тенденция - да, нехорошая
newbee, в С++ сборки мусора нет, поэтому использовать (замкнутую) переменную вне ее контекста нельзя: нет простых методов для реализации такого функционала. насколько мне известно, комитет по стандартизации подходит к новшествам с позиции "нельзя ли это сделать имеющимися средствами", синтаксический сахар это не путь С++. путь С++ - создавать синтаксический сахар имеющимися средствами в рамках существующего синтаксиса, т.е. перегрузкой операций и метапрограммированием. что касается замыканий, они реализуются функциональными объектами, основной недостаток которых - необходимость много писать (причем задолго до места использования) что касается лямбда-выражений (заметьте, они не называются лямбда-функциями), они функциональными объектами не являются и заменяют последние в подходящем контексте (типа for_each), обеспечивая более короткую и понятную запись. они, понятно, имеют свои недостатки. на специализированном функциональном языке конечно все это гораздо стройней и изящнее, но за изящество приходится платить. Добавлено через 6 минут и 31 секунду кстати, пример Ваш с struct two_lm нехорош. концептуально нехорош. в этом примере правильно использовать функциональный объект, а идеологическая ниша лямбды - автоматический, локальный контекст. да, С++ позволяет записать лямбду в function<> и и даже сделать при этом замыкание. но он так же позволяет произвольно приводить типы и записывать что угодно по любому адресу. ножик острый, но Вы же на это не жалуетесь. а вообще С++ ужасен))) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |