Re[8]: best practices по поводу исключений в C++
От: wander  
Дата: 27.12.13 07:23
Оценка:
Здравствуйте, niXman, Вы писали:

X>колбяк написан на С++, но экспортируется как Си-функция?


Да. Думаешь это редкость?
Re[9]: best practices по поводу исключений в C++
От: wander  
Дата: 27.12.13 07:29
Оценка:
Здравствуйте, wander, Вы писали:

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


X>>колбяк написан на С++, но экспортируется как Си-функция?


W>Да. Думаешь это редкость?


Навскидку: libexpat, libpthread. В Win32 API частенько бывает. Да полно примеров.
Re[9]: best practices по поводу исключений в C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 27.12.13 07:37
Оценка:
Здравствуйте, wander, Вы писали:

W>Думаешь это редкость?

я не думаю что это это редкость. просто хотел убедится.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: best practices по поводу исключений в C++
От: Erop Россия  
Дата: 27.12.13 09:26
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>Стоит ли вообще над этим заморачиваться? Мне просто кажется, что лучше уж меньше свободы юзерам дать в этом плане, зато чётко указать своё отношение по данному вопросу в документации, чем иметь в 90% случаев лишний код для поддержки кодов ошибок.


Во-первых, если всё-таки обработку ошибок спроектировать, то вполне можно сделать так, что лишнего кода для поддержки как кодов, так и исключений, будет довольно мало.
Во-вторых, решение на кодах универсальнее, так что если уж от чего-то отказываться, то скорее от исключений, чем от кодов
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: best practices по поводу исключений в C++
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 27.12.13 10:38
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

X>> всегда поражался такой практике, выделать память при выбросе исключений =)

X>> искать последствия такой ситуации будет мучительно больно.

FH>А как иначе? Где-то же эту информацию хранить всё же надо. Ну, не в виде члена класса (я, собственно, об этом и писал, в том числе), а в каком-то другом месте.

можно просто сохранять указатель на данные в стеке, ничего страшного не произойдет

struct Err : std::exception {
    Err(const char* p) : msg_(p) {}
    
    const char* msg_;
};

...

throw Err("some error message");

...

catch(Err const& e) {
    std::cout << e.msg_ << std::endl;  // должно вывести some error message
}
Re: best practices по поводу исключений в C++
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 27.12.13 10:48
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>Здравствуйте, коллеги.


FH>Задаюсь уже не первый день следующим вопросом — как организовать наиболее опрятную, грамотную, универсальную и удобную в использовании систему исключений в C++?


Самая приятная и простая система обработки ошибок в С++, с которой мне доводилось работать, использовала коды ошибок. Все подсистемы возвращают коды ошибок, весь код написан так, словно ничто не может кинуть исключение, следовательно — не нужно париться насчет exception safety, думать о том, останутся ли данные в памяти в целостном состоянии, после обработки исключения и тд. Исключения используются только как panic — приложение кидает исключение тогда, когда не знает как обработать ошибку и желает от нее умереть. Исключения не обрабатываются и приводят к падениям, стектрейсам и дампам, которые просто анализировать, так как исключения не перевыбрасываются никогда. Ес-но исключения обрабатываются в тех случаях, когда приходится работать с кодом, написаном в другом стиле, где все ошибки возвращаются через исключения.

Подход конечно очень специфичен и не претендует на универсальность.
Re[8]: best practices по поводу исключений в C++
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 27.12.13 10:56
Оценка:
Здравствуйте, niXman, Вы писали:

X>зы

X>как пример, приведу ситуацию из реальной жизни. недели две назад закончил реализацию некоторого механизма зеркалирования и отката состояния группы игровых серверов. получилось ~30000 loc. код писал я сам. дебагер был использован один раз.
X>но, вы можете не верить, дело ваше.

Пример из реальной жизни №1 — приложение с отладочной инфой, но под отладчиком в production работать не может из-за тормозов, а если снизить нагрузку — бага не воспроизводится.

Пример из реальной жизни №2 — бага воспроизводится у клиента, а у нас не воспроизводится, а у клиента служба безопасности не разрешает удаленную отладку.

Я могу долго продлжать
Re[3]: best practices по поводу исключений в C++
От: FrozenHeart  
Дата: 27.12.13 12:15
Оценка:
С чего бы? Наследование от std::exception убирает эту проблему:

#include <exception>
#include <iostream>
#include <typeinfo>

class Base : public std::exception {};
class Derived: public Base {};

int main()
{
  try
  {
    throw Derived();
  }
  catch (const Base& ex)
  {
    std::cout << typeid(ex).name() << '\n';
  }
}


Output

class Derived

avalon/1.0.433
Re[4]: best practices по поводу исключений в C++
От: uzhas Ниоткуда  
Дата: 27.12.13 13:51
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

FH>С чего бы? Наследование от std::exception убирает эту проблему:


ссылка по теме: http://stackoverflow.com/questions/11484010/c-typeid-used-on-derived-class-doesnt-return-correct-type
Re: best practices по поводу исключений в C++
От: minorlogic Украина  
Дата: 29.12.13 10:33
Оценка:
Было бы неплохо услышать для чего вам эта система нужна. Как используются исключения и т.д.

Ну или зайти с верхов, для каких целей вообще вам нужна система исключений ?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: best practices по поводу исключений в C++
От: Lepsik Индия figvam.ca
Дата: 30.12.13 18:19
Оценка:
FH>До недавнего времени во всех своих проектах я поступал следующим образом:
FH>- Придерживался правила "Всегда выбрасывать исключения, если для сигнализации ошибки функции требуется больше, чем переменная типа bool в виде возвращаемого значения". Просадок в производительности в нашей предметной области это не вызывало, так что такой подход никакого заметного оверхеда не вносил.


Придерживаtся правила "никогда не выбрасывать исключения, исключения для драйверов"
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.