Здравствуйте, VladD2, Вы писали:
AVK>>В смысле? В Москве намного хуже?
VD>В штатах маки — это помойки.
Что то мне кажется что бигмаки везде одинаковы. Другое дело что местный макдональд последнее время продает и нетрадиционные для них блюда, но имхо это дела не меняет.
Здравствуйте, VladD2, Вы писали:
Д>>посмотрим, что они реально в Лонгхорне сделают. хотя избавляться от теперешнего WinAPI давно уже пора
VD>Современная рекламма ЛХ, как ни странно, самя адекватная из слышанных мной от МС.
Здравствуйте, bwowa, Вы писали:
B>Здравствуйте, alexkro, Вы писали:
A>>А толмуда с названием "Coding guidelines" у вас нет? Перегнули вы тут явно. B> Есть, только не талмуд, которому никто следовать не будет, а небольшой внутрифирменный документ, стандартизирующий написание кода. Над проектом работает 10 человек, ...
Команда из десяти человек, а сколько бюрократии. Я видел группы побольше, и никаких формальных документов не требовалось. Разумные люди сознательно не будут бардак создавать.
A>>Самодокументированность липовая, так как проблемы в этом смысле абсолютно такие-же как и в Java, когда в одной функции спецификация меняется, и это заставляет поменять все функции, её вызывающие, а дальше и все функции их вызывающие, и т.д. В конце концов это приводит к бардаку. B> Тоже самое с модификатором const, сделав одну из функций неконстантной, вам прийдёться модифицировать все функции исполюзующие её. Но вы ведь не будете отрицать необходимость этого модификатора.
Это совсем не тоже самое. Во-первых, твоё утверждение о "модификации всех функций" неверно. Во-вторых, ответь мне, почему const входит в сигнатуру функции, а спецификация исключений нет? Я удивлен, что тебе вообще пришла идея такого сравнения в голову.
B>>> К тому же, уже по моему мнению, информация об исключениях, может быть использована компилятором для оптимизаций, A>>Как раз таки, компилятор должен кучу кода награмаздить, чтобы проверить соответствие спецификации исключения. Тут уж ни о какой оптимизиции речи не идёт, за исключением опять-же пустого throw(). B> На то он и компилятор, чтобы громоздить код вместо человека. Вы же не обижаетесь на автоматически код пролога и эпилога функций, и на автоматические деструкторы и операции копирования.
Ты говорил про оптимизации или про что? А теперь перекинулся на то, как компилятор облегчает генерацию кода. Да-с.
B> К тому же, компиляторы эволюционируют
>>> или для автоматической генерации кода обработки исключения. A>>Автоматическая генерация обработчика? std::unexpected()? Кому такая нужна? B>Кому не нужна, тот и не использует. Кому понадобиться, тот будет рад что такое возможно.
Вот и объясни мне, кому такое понадобится и зачем. Иначе, в твоих словах нет аргументов.
B>Во всех крупных проектах, в которых я участвовал, к конце концов формировалась своя иерархия классов-исключений.
Мы кажется говорим про спецификации исключений, а не про иерархии классов-исключений. Почему-то тебя все время в сторону тянет.
B>Хлтя если вы вообще противник технологии исключений, то можем прикратить нашу дисскусию.
Я не противник технологий, я противник их бездумного применения. Далее прошу оставаться в рамках спецификации исключений и не перепрыгивать на смежные вопросы.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, alexkro, Вы писали:
A>>Кроме "throw()", который достаточно важен, так как указывает на то, что функция не порождает исключений.
VD>И как без нее в дотнете живут?
В .NET исключение может на ровном месте произойти. Вот так и живут. В C++ можно гарантировать то, что функция не выбросит. Это, кстати, очень полезно в некоторых случаях.
Здравствуйте, AndrewVK, Вы писали:
AVK>Не полностью. Если вспомнить про индигу то ...
Ну, я как бы тут поглядел презенташки про ее. Мне кажется очень даже красивая штука получается. Как раз то что про нее бредит коробкин даже хуже того что будет на самом деле. Просто он слишком долго пролежал в мыльной ванне.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndreyFedotov, Вы писали:
AF> А то! Есть хорошая традиция разделяемая почти всеми программистами: услышав заклинание "Visual Basic" дружно орать: "Фу! Остой!", трясти бубном и совершать другие ритаульно-оскорбительные действия в отношении VB.
Есть такое. Но это от стадного чувства и неумения его готовить. Сейчас с появлением Шарпа ВБ 6 конечно не актуален. А ВБ 7 мало чем отличается от Шарпа. Но раньше связка VC+VB была очень продуктивной.
AF>Причём что меня удивило больше всего, эта традиция распространена и среди самих программистов на VB...
Ну, это уже побочный эффект стадного чувства.
AF>Не экономично. В драйвере гораздо проще этого добиться например так: AF> *( ( DWORD* ) 0x0000000C ) = 0;
Не, мы тут о эстетике, а ты со своей экономией
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
VD>>В штатах маки — это помойки.
AVK>Что то мне кажется что бигмаки везде одинаковы. Другое дело что местный макдональд последнее время продает и нетрадиционные для них блюда, но имхо это дела не меняет.
Бигмаки то одинаковые, а вто люди и качество заведений разные. Я собственно сам не видел, но пра друзей приехавших оттуда рассказывали.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, desperado_gmbh, Вы писали:
_>6.1.3 Implicit enumeration conversions _>An implicit enumeration conversion permits the decimal-integer-literal 0 to be converted to any enum-type.[/q]
Да это я посмотрел сразу после догадки.
_>Из-за флаговых enums. Любой здравомыслящий человек при работе с флагами в случае, если ни один из флагов не установлен, захочет передавать литеральный 0, вместо того чтобы явно приводить его или заводить Default = 0,
Видимо я или не любой, или не здравомыслящий. Я как раз бы скорее ввел нечто вроде None.
_> как, скажем, в CommandBehavior. А грабли из-за того, что создателям компилятора было лень проверять FlagsAttribute (он проверяется только в рантайме — Enum.ToString), и все эти 0, |, &, ^, ~ работают даже с нефлаговыми enums.
Уверен? Это форменный бардак.
Мля, что стоило ввести какой нить None в стандарт и приклеивать его ко всем энумам что помечены как флаг?
А еще лучше не брать плохие примеры вроде С, а содрать решение с Дельфи. Set- все таки очень грамотно сделаны были.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, postmaster, Вы писали:
P>Не забудь про деструкторы, в которых разрушаются PNDIS_PACKET и PNDIS_BUFFER. P>Именно в них огромнейшее преимущество C++ перед plain C в данном случае.
Ну, тут ничего не попишешь. Я о другом... я о том, что грамотная обертка упращает код даже если она не на С++ написана.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, alexkro, Вы писали:
A>>В .NET исключение может на ровном месте произойти.
VD>В С++ тоже. Помечай не помечай а аппаратный сбой или где-нить в недрах...
Аппаратный сбой не является исключением C++.
A>>Вот так и живут.
VD>Очень неплохо надо сказать.
A>> В C++ можно гарантировать то, что функция не выбросит.
VD>Кудаж оно детется то? Деление на ноль или еще что и приплыли тапочки...
Деление на ноль не является исключением C++. Я уж не говорю про то, что код можно гораздо более надёжно писать.
A>> Это, кстати, очень полезно в некоторых случаях.
VD>Скорее вредная. Я как-то ни разу на практике необходимости в этом не испытал.
Наверняка испытывал, только не задумывался над этим. Вот типичный код, в котором требуется невыбрасывающая операция:
void Update( ref SomeObject obj )
{
// create a copy
SomeObject copy = obj.Clone();
// update copy (connect to DB, etc), may throw
...
// commit with non-throwing ops
obj = copy;
}
Здравствуйте, Maxim S. Shatskih, Вы писали:
MSS>Флаг вот только в руки реализовывать __CxxFrameHandler в ядре. На DISPATCH_LEVEL же это вообще невозможно, потому как exceptions основаны на thread local storage (сегмент FS), а на DISPATCH_LEVEL это понятие размыто. Запачкаешь FS:[0] какой-то нити, спасибо за это никто не скажет
Смотри ссылку http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/other_23zb.asp, в kernel mode есть SEH, то есть FS:[0] можно свободно "пачкать". Кстати FS:[0] меняется не __CxxFrameHandler, а любой функцией в которой создаётся exception handling frame, например если в функции есть локальный объект класса с деструктором. А зачем обязательно C++ exception handling, можно и SEH использовать:
ExRaiseStatus() вместо throw и
__try/__except/__finally вместо try/catch (он только не может быть в той же функции где используются локальные объекты с деструкторами).
Здравствуйте, alexkro, Вы писали:
A>Наверняка испытывал, только не задумывался над этим. Вот типичный код, в котором требуется невыбрасывающая операция: A>
A>void Update( ref SomeObject obj )
A>{
A> // create a copy
A> SomeObject copy = obj.Clone();
A> // update copy (connect to DB, etc), may throw
A> ...
A> // commit with non-throwing ops
A> obj = copy;
A>}
A>
Честно говоря по твоему коду этого не видно, а try .. finally в дотнете никто не отменял.
Здравствуйте, VladD2, Вы писали:
_>>Из-за флаговых enums. Любой здравомыслящий человек при работе с флагами в случае, если ни один из флагов не установлен, захочет передавать литеральный 0, вместо того чтобы явно приводить его или заводить Default = 0, VD>Видимо я или не любой, или не здравомыслящий. Я как раз бы скорее ввел нечто вроде None.
Вообще да, 0, наверное, сишная привычка — для указателей я уже привык использовать null. Кстати, default в Whidbey — это именно то, хотя и сделан для других целей. Жаль, уже поздно — есть много кода с нулем и ломать его, запрещая преобразование нуля в enum, не захотят.
VD>А еще лучше не брать плохие примеры вроде С, а содрать решение с Дельфи. Set- все таки очень грамотно сделаны были.
Enums часто напрямую соответствуют параметрам API-функций, и нужна бинарная совместимость значений флагов. Кроме того, бывают хитрые случаи, когда часть битов — флаговая, а часть — число, например, System.Drawing.Drawing2D.PathPointType. Естественно, это можно считать плохим дизайном, но при попытке сделать по-другому обертки над такими API-функциями усложняются и замедляются, почти не выигрывая в удобстве.
Здравствуйте, desperado_gmbh, Вы писали:
_>Вообще да, 0, наверное, сишная привычка — для указателей я уже привык использовать null. Кстати, default в Whidbey — это именно то,
Гы уже не default, а default(...). Они переделали его во встроенную функцию. Вроде sizeof() в С.
_>хотя и сделан для других целей.
Как раз именно для этих.
_> Жаль, уже поздно — есть много кода с нулем и ломать его, запрещая преобразование нуля в enum, не захотят.
Почему поздно? Именно под таким соусом и гробится С++. Мол поздно... совместимость...
_>Enums часто напрямую соответствуют параметрам API-функций, и нужна бинарная совместимость значений флагов.
Полная фигня. Энумы никак (семантически) не соотвествуют С-шным. В С энумы ни чем от констант не отличаются. Тут же это разумный тип.
Кстати, можно было бы и наследование для энумов ввести. Чтобы константы можно было выделять в подтипы...
_> Кроме того, бывают хитрые случаи, когда часть битов — флаговая, а часть — число, например, System.Drawing.Drawing2D.PathPointType.
Это все флаговое... просто есть маски. Не более того. К нулю это отношения не имеет. Ноль — это ошибка разработчиков языка. Разумно ее обяснить нельзя.
_> Естественно, это можно считать плохим дизайном, но при попытке сделать по-другому обертки над такими API-функциями усложняются и замедляются, почти не выигрывая в удобстве.
Ничего не усложняется. Разделять понятие флаков и обычных энумов. Ввести предопределенное значение None. И вск будет ОК. А еще лучше ввести set-ы как в Дельфи.
Для бинарной же совместимости есть интероп. Вот пусть он все несоотвествия и решает. А язык поганить по этому поводу смысла не было.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, alexkro, Вы писали:
A>Аппаратный сбой не является исключением C++.
Но ловится try-ем С++. Некоторая неувязочка.
A>Деление на ноль не является исключением C++. Я уж не говорю про то, что код можно гораздо более надёжно писать.
Куда уж надеженее? Надежность и С++ бизницы браться. Прям как Иванов, Петров и сидоров.
VD>>Скорее вредная. Я как-то ни разу на практике необходимости в этом не испытал.
A>Наверняка испытывал, только не задумывался над этим.
Не испытывал и задумывался... Глядя на извращения явы...
A> Вот типичный код, в котором требуется невыбрасывающая операция:
Нечиво тут не трубуется. И вообще описывать то что не требуется натуральный маразм. Эдак можн описать что для этого кода бензина не требуется.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>Мы сторонники правильных исключенией. А ISupportErrorInfo — это не исключения, это слёзы. Единственно, кто их умеет нормально эмулировать как C++ исключения — это #import.
Не, ну на Шарпе и в Васике им тоже можно пользоваться. В общем, оборачиваем в нормальные исключения и живем как белые люди.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Шахтер, Вы писали:
Ш>>
Ш>>Типа, .Net rulezzzzzzzzzzzzzzzdox. Где-то тут была дуракоустойчивость...
VD>Какое-то странное окошко. Что-то в нем не то. Расскажи как его повторить и поглядим что это такое.
К сожалению, эффект наблюдал только один раз. Так что насчет повторить -- не знаю как. Вылетело, когда я закрывал Янус.