Загадки для программистов
Apr. 26th, 2009 02:54 pmМы ребята деловые, ищем щели половые.
Следующий метод:
Теперь внимание, вопрос:
// false return value indicates an error
virtual bool initialize();
Следующий метод:
// non-zero return value indicates an error
virtual bool move();
Теперь внимание, вопрос:
// write storage dependent fast resume entries
bool write(entry& rd);
no subject
Date: 2009-04-29 10:31 am (UTC)Записывай меня третьим (четвертым). За такое - кастрировть! четырехкратно.
> отличать ошибку одного write от другого?
В том и прикол, что если нужно ошибку одного write отличить от ошибки другого - остается только жевать сопли. Тут исключения - зло страшенное, ужасное, abuse, с потенциальной кастрацией.
Хороши эти самые исключения там, где райтов много, и отличать их не нужно. Например транзакция, со многими операциями, где реакция на ошибку write (за исключением одного очень специального случая) одна: обломись бабка, на сервер твой уронили утюг, соединения больше нет. И уже абсолютно не важно на какой именно стадии она отвалилась. Последствий ее уже никто не увидит.
Например SQLException в JDBC поперек SQL_SUCCESS в ODBC. Первые сами по себе ничем не лучше вторых, но позволяют писать проще и прямолинейнее.
no subject
Date: 2009-04-29 11:03 am (UTC)То есть получается что мы используем и то и другое вперемешку. А не будет ли такой дизайн достоин кастрации? Для соблюдения правила суммирования наказаний придется резать по частям.
no subject
Date: 2009-04-29 11:23 am (UTC)Да, приходится вперемешку. Те же new и new(nothrow).
Вопрос лишь в пропорциях. Если 99% вписывается в один патерн, а 1% требует соплей (nothrow), то считаю, что все сделано правильно.
Если write (тот, который man 2 write) вместо -1 и errno выдавал бы мне исключение, то я бы ему только спасибо сказал. Потому как он, как и new, мне более нужен в таком виде.
no subject
Date: 2009-04-30 06:50 am (UTC)"мне нужен". А разработчики библиотек пишут их не для тебя или меня, а для всех. И чем сильнее библиотека форсирует паттерн тем меньше ее используют. Я лично соскочу с данной как только появится альтернатива (или ресурсы на переписывание функционала).
no subject
Date: 2009-04-30 07:20 am (UTC)Если 60/40 то жопа почти в чистом виде. И одну из альтернатив нужно обрабатывать напильником. Делать write_throw и write_nothrow.
Что до разработчиков библиотек, то мне приходится, очевидным образом libc использовать, а у нее патерн известный. Но для доброй половины функций он мне менее симпатичен, чем паттерн ACE. (Хотя ACE тоже использовать не могу, но уже не по техническим причинам, поэтому приходится его частично повторять.)
no subject
Date: 2009-04-30 07:23 am (UTC)Один из их советов: "обнаруживай ошибки на возможно низком уровне, обрабатывай на возможно высоком" (не дословно). Он как раз "в струе" с исключениями.
no subject
Date: 2009-04-30 08:00 am (UTC)