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

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

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

Post by 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: 4538
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Wed 19 Nov, 2014 00:16

Нельзя ли пояснить это подробнее?
Можно. Исключение - объект языка C++, обрабатывать его в другом модуле можно только если он написан на том же языке, собран тем же компилятором, той же версии и с теми же настройками, иначе это UB.
другие - не перестали
В студию.
теперь мы как бы заметаем сор в угол, прячем под одеяло, и т.п.
В каждом catch блоке можно обнаружить комментарий "// TODO: log". Когда придёт время, он будет заменён соответствующей диагностикой.

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

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

Post by Shmuel » Wed 19 Nov, 2014 08:22

DrKnS wrote: В студию.
char *p=NULL; *p=5;

Теперь пример, когда баг перестал ловиться:
void *h=SaveScreen(0,0,-1,-1); RestoreScreen(h); RestoreScreen(h);
DrKnS wrote: В каждом catch блоке можно обнаружить комментарий "// TODO: log". Когда придёт время, он будет заменён соответствующей диагностикой.
Я бы предпочёл, чтобы падало сразу и с шумом.

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

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

Post by DrKnS » Wed 19 Nov, 2014 08:41

Shmuel wrote: char *p=NULL; *p=5;
Это где такое? В функции Far, предоставленной плагину, да?
Shmuel wrote: Теперь пример, когда баг перестал ловиться:

Code: Select all

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

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

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

Post by Shmuel » Wed 19 Nov, 2014 08:58

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

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

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

Post by zg » Wed 19 Nov, 2014 11:50

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

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

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

Post by HaRT » Wed 19 Nov, 2014 12:38

Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Спрятан офтопик
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by zg » Wed 19 Nov, 2014 12:58

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

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

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

Post by HaRT » Wed 19 Nov, 2014 13:04

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

Post Reply

Return to “Development”

Who is online

Users browsing this forum: No registered users and 1 guest