wizzard: (Default)
[personal profile] wizzard

еще раз убедился, что софт, претендующий на сколько-нибудь надежность (при больших размерах codebase) писать на С/C++ не стоит.

См. красиво и детально описанный срач на http://avva.livejournal.com/2323823.html, а также коммент http://avva.livejournal.com/2323823.html?thread=78031215#t78031215

Date: 2011-03-30 12:10 am (UTC)
From: [identity profile] aka-rider.livejournal.com
Я понимаю (но не поддерживаю) разработчиков libc, я тоже не хочу видеть в своем коде заплатки от чьего-то кретинизма. Хотя я бы сделал падение в debug - аргументы, особенно приходящие извне, нужно ассертить параноидально и нещадно.
From: [identity profile] bik-top.livejournal.com
> аргументы, особенно приходящие извне, нужно ассертить параноидально и нещадно.

Нет. Аргументы, приходящие извне, нужно полноценно проверять. Ассертить можно аргументы «приватных» функций, контекст вызова которых полностью контролируется «ассертящей стороной». Условно говоря (на C#):
// Метод API, вызов которого нельзя контролировать (аргументы приходят из «недоверенной зоны»).
public void Foo(int x)
{
  // Проверка на usage error. 
  if (x < 0)
    throw new ArgumentOutOfRangeException(...);
  
  FooUnsafe(x);
}

// Метод реализации, вызов которого осуществляют только авторы библиотеки (аргументы приходят из «доверенной зоны»).
private void FooUnsafe(int x)
{
  // Проверка на logic error.
  Debug.Assert(x < 0, ...);
  
  ...
}

Если падает первая проверка, значит виноват пользователь. Исправление будет в пользовательском коде, в месте вызова.
Если падает вторая проверка, значит виновата библиотека. Исправление должно быть в библиотечном коде.

В своём коде разработчики библиотеки не вызывают публичный метод — зачем им внутри функции повторно проверять аргументы, когда они должны обеспечить их корректность по построению?
From: [identity profile] aka-rider.livejournal.com
Да, я неправильно выразился.
Я имел в виду, что в случае с memcpy аргументы по сути корректные.
From: [identity profile] http://users.livejournal.com/_winnie/
В Си нет исключений, а вызов abort - нехорошо для пользователей.

Profile

wizzard: (Default)
wizzard

January 2019

S M T W T F S
  12 345
6789101112
1314 1516171819
202122 23242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 1st, 2026 03:24 am
Powered by Dreamwidth Studios