Все предоставляемые плагинам функции помечены как noexcept

Разработка Far.
Shmuel
Posts: 4998
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Все предоставляемые плагинам функции помечены как noexcept

Postby Shmuel » Tue 18 Nov, 2014 23:32

Code: Select all

drkns 11.09.2014 00:07:10 +0200 - build 4097

1. Все предоставляемые плагинам функции помечены как noexcept и обернуты в try/catch,
   т. к. выбрасывание наружу исключений всё равно ни к чему хорошему привести не может.

Нельзя ли пояснить это подробнее?
По моим наблюдениям, одни исключения перестали выбрасываться наружу, другие - не перестали.

Вообще, это несколько тревожно: если раньше баг в плагине, вызывавший исключение, хорошо проявлялся, и его можно было сразу чинить, то теперь мы как бы заметаем сор в угол, прячем под одеяло, и т.п. Или я просто недопонимаю?

User avatar
DrKnS
Posts: 4503
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 111 times
Contact:

Все предоставляемые плагинам функции помечены как noexcept

Postby DrKnS » Wed 19 Nov, 2014 00:16

Нельзя ли пояснить это подробнее?

Можно. Исключение - объект языка C++, обрабатывать его в другом модуле можно только если он написан на том же языке, собран тем же компилятором, той же версии и с теми же настройками, иначе это UB.

другие - не перестали

В студию.

теперь мы как бы заметаем сор в угол, прячем под одеяло, и т.п.

В каждом catch блоке можно обнаружить комментарий "// TODO: log". Когда придёт время, он будет заменён соответствующей диагностикой.

Shmuel
Posts: 4998
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Все предоставляемые плагинам функции помечены как noexcept

Postby Shmuel » Wed 19 Nov, 2014 08:22

DrKnS wrote:Source of the post В студию.

char *p=NULL; *p=5;

Теперь пример, когда баг перестал ловиться:
void *h=SaveScreen(0,0,-1,-1); RestoreScreen(h); RestoreScreen(h);

DrKnS wrote:Source of the post В каждом catch блоке можно обнаружить комментарий "// TODO: log". Когда придёт время, он будет заменён соответствующей диагностикой.

Я бы предпочёл, чтобы падало сразу и с шумом.

User avatar
DrKnS
Posts: 4503
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 111 times
Contact:

Все предоставляемые плагинам функции помечены как noexcept

Postby DrKnS » Wed 19 Nov, 2014 08:41

Shmuel wrote:Source of the post char *p=NULL; *p=5;

Это где такое? В функции Far, предоставленной плагину, да?
Shmuel wrote:Source of the post Теперь пример, когда баг перестал ловиться:

Code: Select all

void *h=SaveScreen(0,0,-1,-1); RestoreScreen(h); RestoreScreen(h);

RestoreScreen(h) - это delete(SaveScreen *)h;
Повторное удаление - это UB. Исключение оно выбрасывать не обязано. Если повезёт, можно получить SEH, а можно и не получить.
Пользуйтесь RAII и подобных багов не будет в принципе.
Shmuel wrote:Source of the post Я бы предпочёл, чтобы падало сразу и с шумом.

Выше написано - это UB. Может падать сразу и с шумом, может тихо портить память и данные где-то совсем в другом месте.

Shmuel
Posts: 4998
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Все предоставляемые плагинам функции помечены как noexcept

Postby Shmuel » Wed 19 Nov, 2014 08:58

DrKnS wrote:Source of the post Это где такое? В функции Far, предоставленной плагину, да?
В OpenW, например. Не в функции Far.
DrKnS wrote:Source of the post Пользуйтесь RAII и подобных багов не будет в принципе.
Обсуждается не то, как избежать определённых багов, а то, как их обрабатывать, если они всё же есть. А они были, есть, и будут.

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Все предоставляемые плагинам функции помечены как noexcept

Postby zg » Wed 19 Nov, 2014 11:50

Shmuel wrote:В OpenW, например. Не в функции Far.
а какое это имеет отношение к обсуждаемому изменению?

User avatar
HaRT
Moderator
Posts: 7954
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

Все предоставляемые плагинам функции помечены как noexcept

Postby HaRT » Wed 19 Nov, 2014 12:38

Last edited by HaRT on Wed 19 Nov, 2014 13:05, edited 1 time in total.
Reason: Спрятан офтопик
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Все предоставляемые плагинам функции помечены как noexcept

Postby zg » Wed 19 Nov, 2014 12:58

HaRT wrote:
Shmuel wrote:
DrKnS wrote:Source of the post В студию.
char *p=NULL; *p=5;
Этот код не имеет прямого отношения к бросанию исключений C++. То есть C++ exception получим лишь в том случае, если в процессе Фара установлен специальный преобразователь из SEH-исключений в Си++-исключения.
ещё раз. какое отношение это имеет к обсуждаемой теме? в указанном патче в try/catch оборачиваются функции, предоставляемые фаром плагину. код самого плагина обёрнут давно.

User avatar
HaRT
Moderator
Posts: 7954
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

Все предоставляемые плагинам функции помечены как noexcept

Postby HaRT » Wed 19 Nov, 2014 13:04

zg wrote:Source of the post оборачиваются функции, предоставляемые фаром плагину. код самого плагина обёрнут давно
Теперь до меня дошло. Спасибо за разъяснение. Прошу прощения за офтопик.
Фар есть инструмент, а не нянька. © 2009 DrKnS


Return to “Development”

Who is online

Users browsing this forum: No registered users and 1 guest