kouzdra - January 2nd, 2008
[Recent Entries][Archive][Friends][User Info]
07:56 pm
[Link] | Задумался - интересно а как проще всего сейчас приобрести в собственную собственность (или взять напочитать, но на довольно длительное время) "Капитал" и избранные труд В.И.Ленина (пока - в объеме для советских студентов). Желательно в бумажном виде.
А то есть ощущение, что пора обновить воспоминания давних времен.
|
|
11:00 pm
[Link] |
Про throw Есть такой забавный факт - throw в C++ является не оператором, а операцией - чтобы можно было писать что-то вроде:
(p == NULL ? throw BadPointer (p) : *p)
При этом возникают понятные проблемы с его типом - поскольку никакого осмысленного типа, кроме void, throw в C++ приписать понятно что нельзя. При этом однако возникает трабл - что тип условного выражения получался бы void, что малосодержательно.
Потому есть просто специально обученное правило, что в таком условном выражении его типом является тип того варианта, который ничего не кидает. Проблему это отчасти фиксит, но если throw захочется засунуть в какую-нибудь функцию (я обычно завожу ее для выкидывания обломов) - работать не будет.
Решение у трабла по идее простое - заводится парный к void тип - any, который является супертипом всех типов (а значений, как и void не имеет). В функциональных языках примерно так и сделано - только для этих целей используется тип forall a.a, но вот почему кажется ни в одном вообще процедурном языке такого не делали - загадка (в Algol-68, где в аналогичном контексте можно было писать goto, было придумано специально обученное преобразование типа, которое умело преобразовывать goto во что угодно - проблему в общем случае это тоже не решало)
|
|