собственно можно использовать сипласплас но только без исключений
есть класс его методы активно работают с кучей также есть группа функций
создающая объекты этого класса и вызывающая его методы очень много раз
линейно формируются пакеты особого формата что бы упростить обработку
ошибок вшил в каждый объект jmp_buf
в методе если получили отказ в памяти пишем в лог (надеемся что получится так как память при этом не выделяется просто вызов WriteFile с хендлом Mailslot'а он сам заботится о синхронизации записей и пересылка сообщения об ошибке в другой процесс) и делаем longjmp в итоге вызывающая функция бросает формировать пакет и завершается
вопрос: что думаете обо всем об этом ?
P.S nt 5.1 x86 msvc 2008
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>вопрос: что думаете обо всем об этом ?
Это не есть хорошо, т.к. при таких джампах никто деструкторы локальных объектов, которые удалились бы при кидании обычного исключения, никто не вызовет
Здравствуйте, kpcb, Вы писали:
K>Это не есть хорошо, т.к. при таких джампах никто деструкторы локальных объектов, которые удалились бы при кидании обычного исключения, никто не вызовет
во первых при вызове longjmp деструкторы все таки вызываются это чисто MS фича а во вторых этот класс у меня единственный порождающий объекты в этой мини подсистеме всей программы так что по этому поводу не стоит беспокоиться
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>Всем привет
J>собственно можно использовать сипласплас но только без исключений J>есть класс его методы активно работают с кучей также есть группа функций J>создающая объекты этого класса и вызывающая его методы очень много раз J>линейно формируются пакеты особого формата что бы упростить обработку J>ошибок вшил в каждый объект jmp_buf
J>в методе если получили отказ в памяти пишем в лог (надеемся что получится так как память при этом не выделяется просто вызов WriteFile с хендлом Mailslot'а он сам заботится о синхронизации записей и пересылка сообщения об ошибке в другой процесс) и делаем longjmp в итоге вызывающая функция бросает формировать пакет и завершается
J>вопрос: что думаете обо всем об этом ?
хотелось бы услышать мотивацию.
я понимаю в чистых сях, там деваться некуда. но чем плюсовые исключения не угодили?
Здравствуйте, night beast, Вы писали: NB>хотелось бы услышать мотивацию. NB>я понимаю в чистых сях, там деваться некуда. но чем плюсовые исключения не угодили?
да просто компилятор начинает неявно привязываться к _cxxhandler'ам всяким а мне надо что бы статического импорта не было импорт у меня устроен особым образом но для того что бы он не был статическим надо все импортируемые функции вызывать явно что бы во время компиляции они подменились на нужные мне механизмы через макросы
и еще хотел дополнить деструкторы при вызове longjmp вызываются только когда включены исключения поэтому когда они отключены естественно не вызываются а когда включены то проще заюзать исключения напрямую у меня просто функции из которых надо выпрыгивать (методы) не владеют объектами никакими чтобы надо было вызывать деструкторы именно поэтому я и заюзал longjmp
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>да просто компилятор начинает неявно привязываться к _cxxhandler'ам всяким а мне надо что бы статического импорта не было импорт у меня устроен особым образом но для того что бы он не был статическим надо все импортируемые функции вызывать явно что бы во время компиляции они подменились на нужные мне механизмы через макросы J>и еще хотел дополнить деструкторы при вызове longjmp вызываются только когда включены исключения поэтому когда они отключены естественно не вызываются а когда включены то проще заюзать исключения напрямую у меня просто функции из которых надо выпрыгивать (методы) не владеют объектами никакими чтобы надо было вызывать деструкторы именно поэтому я и заюзал longjmp
ну, если тебя интересует, как эмулировать работу исключений, то недавно обсуждали
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>Здравствуйте, night beast, Вы писали: NB>>хотелось бы услышать мотивацию. NB>>я понимаю в чистых сях, там деваться некуда. но чем плюсовые исключения не угодили?
J>да просто компилятор начинает неявно привязываться к _cxxhandler'ам всяким а мне надо что бы статического импорта не было импорт у меня устроен особым образом но для того что бы он не был статическим надо все импортируемые функции вызывать явно что бы во время компиляции они подменились на нужные мне механизмы через макросы J>и еще хотел дополнить деструкторы при вызове longjmp вызываются только когда включены исключения поэтому когда они отключены естественно не вызываются а когда включены то проще заюзать исключения напрямую у меня просто функции из которых надо выпрыгивать (методы) не владеют объектами никакими чтобы надо было вызывать деструкторы именно поэтому я и заюзал longjmp
(офтопик)
Ты бы хоть иногда знаками препинания пользовался, я уж заглавных букв и не прошу...
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>Здравствуйте, night beast, Вы писали: NB>>хотелось бы услышать мотивацию. NB>>я понимаю в чистых сях, там деваться некуда. но чем плюсовые исключения не угодили?
J>да просто компилятор начинает неявно привязываться к _cxxhandler'ам всяким а мне надо что бы статического импорта не было импорт у меня устроен особым образом но для того что бы он не был статическим надо все импортируемые функции вызывать явно что бы во время компиляции они подменились на нужные мне механизмы через макросы J>и еще хотел дополнить деструкторы при вызове longjmp вызываются только когда включены исключения поэтому когда они отключены естественно не вызываются а когда включены то проще заюзать исключения напрямую у меня просто функции из которых надо выпрыгивать (методы) не владеют объектами никакими чтобы надо было вызывать деструкторы именно поэтому я и заюзал longjmp
Пару слов для начинающих программистов: все, что здесь описывается — это просто ужасно.
Ключевое архитектурное решение обусловленно способом линковки! Это уже катастрофа.
Далее, код сразу и навсегда проектируется не кроссплатформанным.
Еще, крупные проекты на С++ без использования исключений — это убогость, такие проекты никогда не будут хорошими.
А теперь обсуждаем, как из запроектированного гов.. сделать, так чтобы хоть как-то работало.
Вот и не знаю что поставить: + или —
Z>Пару слов для начинающих программистов: все, что здесь описывается — это просто ужасно.
Плюс, топикстартер сам себе придумывает проблемы чтоб героически их преодолевать.
Z>Ключевое архитектурное решение обусловленно способом линковки! Это уже катастрофа.
Плюс, без вариантов.
Z>Далее, код сразу и навсегда проектируется не кроссплатформанным.
Минус.
Ну хватит уже фапать на кроссплатформ!!! Далеко не всё должно быть кроссплатформенным, далеко не всем это нужно, далеко не все проекты вообще когда либо будут перенесены на другую платформу.
Имел сомнительное удовольствие наблюдать эпический факап, когда погнались за "должны" а не за реальной необходимостью и вместо того чтоб написать то что надо клиенту прямо сейчас завязли в обеспечении кроссплатформа в его худшем варианте: используем только тот функционал, что есть везде, куда мы теоретически можем портануться, а для всего чего нет — пишем врапперы.
В итоге: гигантский слой врапперов, который ацки глючит, время и полимеры просраны на обеспечение никому не нужного функционала в ущерб нужному. Заказчик помучившись с "изделием" плюнул и ушел к конкурентам. Зато продукт мог запускаться на винде, убунту и солярке. Реально он был нужен только на винде.
Другой эпический факап с "всё должно быть кроссплатформенно" привёл к тому, что проект и вовсе исдох, не дотянув до релиза хотя бы на одной платформе. Кода разного рода врапперов было просто дофигища. Багов в них было тоже богато.
Проект, над которым я сейчас работаю, изначально был нацелен на 2 платформы. Но кроссплаторфменная часть в нём это только ядро с базовой логикой. Вся остальная куча функционала пишется строго под конкретную платформу, там никто и не пытается дёргаться, ибо для обеспечения кроссплатформа придётся написать и отладить врапперов чуть ли не больше чем написать и отладить отдельные узкозаточенные реализации под каждую платформу. Гуй у нас так и вовсе на C# и только под винду.
Z>Еще, крупные проекты на С++ без использования исключений — это убогость, такие проекты никогда не будут хорошими.
Минус.
Это стереотип. Совсем без исключений в крупном проекте конечно вряд ли получится. Но используя по минимуму и только там где без них ну никак — вполне нормальная практика.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, zakharov75, Вы писали:
>>Ключевое архитектурное решение обусловленно способом линковки! Это уже катастрофа.
странный вы человек если способ линковки диктует код то значит мне нужна именно
такая линковка это первоочередная задача а код подстроить поудобней
второстепенная вы об этом не думали ? какой то однобокий взгляд
>>Далее, код сразу и навсегда проектируется не кроссплатформанным.
это тоже непонятно к чему сказано я Вас еще больше огорчу там очень много
ассемблерных хаков полагающихся на сгенерированный ABI от мелкософт
компиляторов так что теперь чисто заточенные хак тулзы под конкретную ось
пересали быть нужнми ? вы бы хоть поинтересовались что за программа
прежде чем делать какие то умозаключения
On 12/17/2011 02:21 PM, jyuyjiyuijyu wrote:
> странный вы человек если способ линковки диктует код то значит мне нужна именно > такая линковка это первоочередная задача а код подстроить поудобней > второстепенная вы об этом не думали ?
Это заблуждение. Код первичен, построение вторично.
Здравствуйте, Banned by IT, Вы писали:
BBI>Здравствуйте, zakharov75, Вы писали:
BBI>Вот и не знаю что поставить: + или -
Z>>Пару слов для начинающих программистов: все, что здесь описывается — это просто ужасно. BBI>Плюс, топикстартер сам себе придумывает проблемы чтоб героически их преодолевать.
Z>>Ключевое архитектурное решение обусловленно способом линковки! Это уже катастрофа. BBI>Плюс, без вариантов.
Z>>Далее, код сразу и навсегда проектируется не кроссплатформанным. BBI>Минус. BBI>Ну хватит уже фапать на кроссплатформ!!! Далеко не всё должно быть кроссплатформенным, далеко не всем это нужно, далеко не все проекты вообще когда либо будут перенесены на другую платформу.
BBI>Имел сомнительное удовольствие наблюдать эпический факап, когда погнались за "должны" а не за реальной необходимостью и вместо того чтоб написать то что надо клиенту прямо сейчас завязли в обеспечении кроссплатформа в его худшем варианте: используем только тот функционал, что есть везде, куда мы теоретически можем портануться, а для всего чего нет — пишем врапперы. BBI>В итоге: гигантский слой врапперов, который ацки глючит, время и полимеры просраны на обеспечение никому не нужного функционала в ущерб нужному. Заказчик помучившись с "изделием" плюнул и ушел к конкурентам. Зато продукт мог запускаться на винде, убунту и солярке. Реально он был нужен только на винде.
BBI>Другой эпический факап с "всё должно быть кроссплатформенно" привёл к тому, что проект и вовсе исдох, не дотянув до релиза хотя бы на одной платформе. Кода разного рода врапперов было просто дофигища. Багов в них было тоже богато.
BBI>Проект, над которым я сейчас работаю, изначально был нацелен на 2 платформы. Но кроссплаторфменная часть в нём это только ядро с базовой логикой. Вся остальная куча функционала пишется строго под конкретную платформу, там никто и не пытается дёргаться, ибо для обеспечения кроссплатформа придётся написать и отладить врапперов чуть ли не больше чем написать и отладить отдельные узкозаточенные реализации под каждую платформу. Гуй у нас так и вовсе на C# и только под винду.
Ок. Если это не серверный код, то возможно кроссплатформенность необязательна.
О твоем примере. кроссплатформенность — это не значит рапперы. То, что ты описал, это просто плохой проект, без относительно кроссплатформенности. Поверь (у меня есть много опыта), тот чувак нашел бы причину намазать гигантский слой врапперов.
Z>>Еще, крупные проекты на С++ без использования исключений — это убогость, такие проекты никогда не будут хорошими. BBI>Минус. BBI>Это стереотип. Совсем без исключений в крупном проекте конечно вряд ли получится. Но используя по минимуму и только там где без них ну никак — вполне нормальная практика.
Проблема в следующем:
исключения не используются потому, что кому-то не понятно на фига они нужны, ведь и без них можно. Значит, он не понимает концепции исключений, не понямает что такое безопасный код. НО, это С++ детка, а там где-то ВСЕГДА кто-то использует исключения. Хотя бы в stl. А раз начальник не врубается в исключения, то и команда такая же. А исключения все равно есть, даже если ты их не видишь
И иногда, после дождичка в четверг, сервачек лежит, потому что "unhandled exception has occurred".
Здравствуйте, zakharov75, Вы писали:
BBI>>Проект, над которым я сейчас работаю, изначально был нацелен на 2 платформы. Но кроссплаторфменная часть в нём это только ядро с базовой логикой. Вся остальная куча функционала пишется строго под конкретную платформу, там никто и не пытается дёргаться, ибо для обеспечения кроссплатформа придётся написать и отладить врапперов чуть ли не больше чем написать и отладить отдельные узкозаточенные реализации под каждую платформу. Гуй у нас так и вовсе на C# и только под винду.
Z>Ок. Если это не серверный код, то возможно кроссплатформенность необязательна.
Как раз именно серверный. Storage Virtualization.
Z>Проблема в следующем: Z>исключения не используются потому, что кому-то не понятно на фига они нужны, ведь и без них можно. Значит, он не понимает концепции исключений, не понямает что такое безопасный код.
Уже неверно.
Ты путаешь "использовать исключения" и "писать exception safe code".
Код пишется exception safe, но бросаются и ловятся они строго там где это реально надо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, zakharov75, Вы писали:
Z>Проблема в следующем: Z>исключения не используются потому, что кому-то не понятно на фига они нужны, ведь и без них можно. Значит, он не понимает концепции исключений, не понямает что такое безопасный код. НО, это С++ детка, а там где-то ВСЕГДА кто-то использует исключения. Хотя бы в stl. А раз начальник не врубается в исключения, то и команда такая же. А исключения все равно есть, даже если ты их не видишь Z>И иногда, после дождичка в четверг, сервачек лежит, потому что "unhandled exception has occurred".
Это всё как-то противоречит концепции "крупного пректа на С++"
То, что stl юзает ещё и исключения -- всего лишь ещё один повод одумать о том нужен ли он в данном проекте вообще...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском