Здравствуйте, niXman, Вы писали:
X>взгляните, какая замечательная реализация исключений для Си от Марка Адлера: X>https://github.com/madler/pigz/blob/master/try.h
X>тут есть даже то, чего нет в С++: retry {}, always {}
вроде ничего особо нового. setjmp + longjmp.
X>обязательно попробую, как буду на Си че-нить кодить.
Здравствуйте, night beast, Вы писали:
NB>вроде ничего особо нового. setjmp + longjmp.
да, setjmp и longjmp, но как красиво обернуто
NB>когда в последний раз кодил?
эмм... по-серьезному — лет шесть тому =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
X>взгляните, какая замечательная реализация исключений для Си от Марка Адлера: X>https://github.com/madler/pigz/blob/master/try.h
Без вызова деструкторов в случае выброса исключения.
Надо дальше идти, добавить макрос для ручной регистрации объектов с вызовом кода очистки
Здравствуйте, _NN_, Вы писали:
_NN>Без вызова деструкторов в случае выброса исключения.
так Си же
_NN>Надо дальше идти, добавить макрос для ручной регистрации объектов с вызовом кода очистки
для этого есть блок always {}
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, _NN_, Вы писали:
_NN>>Без вызова деструкторов в случае выброса исключения. X>так Си же
_NN>>Надо дальше идти, добавить макрос для ручной регистрации объектов с вызовом кода очистки X>для этого есть блок always {}
Т.е. внешний блок try-catch должен подчищать за всеми или в каждой функции тогда надо писать try-catch для ручной очистки ?
Лучше ещё один макрос приделать и назвать его .. скажем new
Здравствуйте, _NN_, Вы писали:
_NN>Т.е. внешний блок try-catch должен подчищать за всеми или в каждой функции тогда надо писать try-catch для ручной очистки ?
получается что в каждой... но и только, если что-то выделялось...
_NN>Лучше ещё один макрос приделать и назвать его .. скажем new
даже не знаю... =)
ладно, как надумаю что-то закодить на Си — заюзаю сабж и отпишусь в эту тему.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>взгляните, какая замечательная реализация исключений для Си от Марка Адлера: X>https://github.com/madler/pigz/blob/master/try.h
X>тут есть даже то, чего нет в С++: retry {}, always {}
X>обязательно попробую, как буду на Си че-нить кодить.
Я так смотрю, прямой return будет заметно ломать эту логику, например, always не сработает. В этом ограничение по сравнению с finally в явно приспособленных к этому языках.
Но кроме этого — да, симпатично и всяко лучше, чем прямое нагромождение обёрток вокруг setjmp().
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, niXman, Вы писали:
X>>обязательно попробую, как буду на Си че-нить кодить.
С>Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется.
Что именно "всё это"?
Исключения — только типы, но не экземпляры типов, соответственно, сопутствующей информации нет => гибкости меньше, чем просто с целыми числами. Ну да, есть хак с текстовым сообщением. Но всё равно не то.
Аналога finally нет. Аналога представленных тут always, retry, питоновского else — нет.
Здравствуйте, netch80, Вы писали:
N>Что именно "всё это"? N>Исключения — только типы, но не экземпляры типов, соответственно, сопутствующей информации нет => гибкости меньше, чем просто с целыми числами.
Видите ли, в моём понимании си — это о простоте и надёжности. Что написали — то и будет. В отличие от какой-нибудь move-семантики в С++
И адовские исключения, несмотря на всю их убогость, свою работу сделают совершенно точно. Ну да, предложенный макрос куда более гибкий, но тут в треде вы сами же и пишете про его ограничения.
Здравствуйте, koenig, Вы писали:
С>>Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется. K>не попадались сравнения языков от лица тех, кто пробовал аду и раст?
С>>>Чего бы вот сразу не писать на Аде. В ней всё это из коробки имеется. K>>не попадались сравнения языков от лица тех, кто пробовал аду и раст?
С>Я не встречал.
жалко. я даже видел как-то упоминание, что какой-то кекс известный в адовых кругах такое сравнение написал, но найти его так и не смог (забыл, как его звали)
Здравствуйте, koenig, Вы писали:
С>>Я не встречал.
K>жалко. я даже видел как-то упоминание, что какой-то кекс известный в адовых кругах такое сравнение написал, но найти его так и не смог (забыл, как его звали)
А вы спросите в comp.lang.ada в гуглогруппах, и если ответят — дайте ссылку здесь. Я подобные сравнения вроде видел — но сугубо в обсуждениях на реддите, вряд ли вы это искали.