исключения для Си
От: niXman Ниоткуда https://github.com/niXman
Дата: 20.03.18 20:41
Оценка: 12 (1)
взгляните, какая замечательная реализация исключений для Си от Марка Адлера:
https://github.com/madler/pigz/blob/master/try.h

тут есть даже то, чего нет в С++: retry {}, always {}

обязательно попробую, как буду на Си че-нить кодить.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: исключения для Си
От: night beast СССР  
Дата: 20.03.18 20:50
Оценка:
Здравствуйте, niXman, Вы писали:

X>взгляните, какая замечательная реализация исключений для Си от Марка Адлера:

X>https://github.com/madler/pigz/blob/master/try.h

X>тут есть даже то, чего нет в С++: retry {}, always {}


вроде ничего особо нового. setjmp + longjmp.

X>обязательно попробую, как буду на Си че-нить кодить.


когда в последний раз кодил?
Re[2]: исключения для Си
От: niXman Ниоткуда https://github.com/niXman
Дата: 20.03.18 21:05
Оценка: +1
Здравствуйте, night beast, Вы писали:

NB>вроде ничего особо нового. setjmp + longjmp.

да, setjmp и longjmp, но как красиво обернуто

NB>когда в последний раз кодил?

эмм... по-серьезному — лет шесть тому =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: исключения для Си
От: _NN_ www.nemerleweb.com
Дата: 20.03.18 21:08
Оценка:
Здравствуйте, niXman, Вы писали:


X>взгляните, какая замечательная реализация исключений для Си от Марка Адлера:

X>https://github.com/madler/pigz/blob/master/try.h
Без вызова деструкторов в случае выброса исключения.
Надо дальше идти, добавить макрос для ручной регистрации объектов с вызовом кода очистки
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: исключения для Си
От: niXman Ниоткуда https://github.com/niXman
Дата: 20.03.18 21:10
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Без вызова деструкторов в случае выброса исключения.

так Си же

_NN>Надо дальше идти, добавить макрос для ручной регистрации объектов с вызовом кода очистки

для этого есть блок always {}
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: исключения для Си
От: _NN_ www.nemerleweb.com
Дата: 20.03.18 21:21
Оценка:
Здравствуйте, niXman, Вы писали:

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


_NN>>Без вызова деструкторов в случае выброса исключения.

X>так Си же

_NN>>Надо дальше идти, добавить макрос для ручной регистрации объектов с вызовом кода очистки

X>для этого есть блок always {}
Т.е. внешний блок try-catch должен подчищать за всеми или в каждой функции тогда надо писать try-catch для ручной очистки ?
Лучше ещё один макрос приделать и назвать его .. скажем new

struct unwind
{
 void(*f)(void*);
 void* p;
}

unwind unwinds[] = {};
int undwins_index;

// #define new(dtor, ...)
#define new(dtor, arg) \
  unwinds[unwinds_index++] = { dtor, arg };

void f()
{
 char* p = new(free, p) malloc(100);
}

try {
 f();
} catch (e) {}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: исключения для Си
От: niXman Ниоткуда https://github.com/niXman
Дата: 20.03.18 21:26
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Т.е. внешний блок try-catch должен подчищать за всеми или в каждой функции тогда надо писать try-catch для ручной очистки ?

получается что в каждой... но и только, если что-то выделялось...

_NN>Лучше ещё один макрос приделать и назвать его .. скажем new

даже не знаю... =)

ладно, как надумаю что-то закодить на Си — заюзаю сабж и отпишусь в эту тему.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: исключения для Си
От: reversecode google
Дата: 20.03.18 22:13
Оценка:
такое и в С++ есть — stackfull coruntinies
Re: исключения для Си
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 02.04.18 19:13
Оценка:
Здравствуйте, niXman, Вы писали:

X>взгляните, какая замечательная реализация исключений для Си от Марка Адлера:

X>https://github.com/madler/pigz/blob/master/try.h

X>тут есть даже то, чего нет в С++: retry {}, always {}


X>обязательно попробую, как буду на Си че-нить кодить.


Я так смотрю, прямой return будет заметно ломать эту логику, например, always не сработает. В этом ограничение по сравнению с finally в явно приспособленных к этому языках.

Но кроме этого — да, симпатично и всяко лучше, чем прямое нагромождение обёрток вокруг setjmp().
The God is real, unless declared integer.
Re: исключения для Си
От: AleksandrN Россия  
Дата: 03.04.18 08:36
Оценка:
Здравствуйте, niXman, Вы писали:

X>обязательно попробую, как буду на Си че-нить кодить.


Зачем? Если нужны исключения, то лучше C++ использовать.
Если очень хочется C и исключения, можно использовать C++ в стиле Си с классами.
Re: исключения для Си
От: Слава  
Дата: 03.04.18 10:46
Оценка:
Здравствуйте, niXman, Вы писали:

X>обязательно попробую, как буду на Си че-нить кодить.


Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется.
Re[2]: исключения для Си
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.04.18 11:51
Оценка:
Здравствуйте, Слава, Вы писали:

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


X>>обязательно попробую, как буду на Си че-нить кодить.


С>Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется.


Что именно "всё это"?
Исключения — только типы, но не экземпляры типов, соответственно, сопутствующей информации нет => гибкости меньше, чем просто с целыми числами. Ну да, есть хак с текстовым сообщением. Но всё равно не то.
Аналога finally нет. Аналога представленных тут always, retry, питоновского else — нет.
The God is real, unless declared integer.
Re[2]: исключения для Си
От: koenig  
Дата: 05.04.18 16:07
Оценка:
X>>обязательно попробую, как буду на Си че-нить кодить.

С>Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется.


не попадались сравнения языков от лица тех, кто пробовал аду и раст?
Re[3]: исключения для Си
От: Слава  
Дата: 05.04.18 21:38
Оценка:
Здравствуйте, netch80, Вы писали:

N>Что именно "всё это"?

N>Исключения — только типы, но не экземпляры типов, соответственно, сопутствующей информации нет => гибкости меньше, чем просто с целыми числами.

Видите ли, в моём понимании си — это о простоте и надёжности. Что написали — то и будет. В отличие от какой-нибудь move-семантики в С++

И адовские исключения, несмотря на всю их убогость, свою работу сделают совершенно точно. Ну да, предложенный макрос куда более гибкий, но тут в треде вы сами же и пишете про его ограничения.
Re[3]: исключения для Си
От: Слава  
Дата: 05.04.18 21:38
Оценка:
Здравствуйте, koenig, Вы писали:

С>>Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется.

K>не попадались сравнения языков от лица тех, кто пробовал аду и раст?

Я не встречал.
Re[4]: исключения для Си
От: koenig  
Дата: 06.04.18 06:48
Оценка:
С>>>Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется.
K>>не попадались сравнения языков от лица тех, кто пробовал аду и раст?

С>Я не встречал.


жалко. я даже видел как-то упоминание, что какой-то кекс известный в адовых кругах такое сравнение написал, но найти его так и не смог (забыл, как его звали)
Re[5]: исключения для Си
От: Слава  
Дата: 06.04.18 09:30
Оценка:
Здравствуйте, koenig, Вы писали:

С>>Я не встречал.


K>жалко. я даже видел как-то упоминание, что какой-то кекс известный в адовых кругах такое сравнение написал, но найти его так и не смог (забыл, как его звали)


А вы спросите в comp.lang.ada в гуглогруппах, и если ответят — дайте ссылку здесь. Я подобные сравнения вроде видел — но сугубо в обсуждениях на реддите, вряд ли вы это искали.
Re: исключения для Си
От: MasterZiv СССР  
Дата: 09.04.18 07:59
Оценка:
Здравствуйте, niXman, Вы писали:

X>обязательно попробую, как буду на Си че-нить кодить.


Не бери в руки эту гадость!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.