- BEST_PEOPLE (2:5077/15.22) ---------------------- BEST_PEOPLE (RU.UNIX.BSD) -
From : Valentin Nechayev 2:5020/400 12 Dec 00 15:46:10
Subj : Re: oops - was: Re: спецы по squid есть?
-------------------------------------------------------------------------------
* Forwarded from area 'RU.UNIX.BSD'
From: netch@carrier.kiev.ua (Valentin Nechayev)
Hello Alexey Dokuchaev!
>> И вообще, сишные строки - давить.
AD> Это почему еще? Имхо весьма колбасная реализация (при правильном подходе к
AD> использованию, разумеется).
В смысле, что их колбасит? Тогда да ;)
Я видел как-то оценки затрат в программах с массовой манипуляцией
null-terminated строками. Явный или неявный strlen() жрал, в среднем,
процессора во много раз больше любой другой библиотечной функции.
И не везде применимы null-terminated строки. Вот кто знает и четко осознает,
что RFC822 не содержит никакого запрета против символа NUL в письмах? Да, это
не символ для атома, но и не дает право игнорировать то, что после него до
конца строки. И куда я после этого засуну, например, mail.local, который
работает через fgets()?;( А также туеву хучу других самописок для почты,
которые повально работают через сишные строки?
(Сейчас вспомнилось, как я в приступе криворукости испортил sendmail и он
начал гнать левые символы - включая NUL - в транспортном ID письма.
При укладке mail.local'ом строка обрезалась. При укладке procmail'ом -
оставалась целой с NUL'ом посреди.)
А насчет правильного подхода... сколько времени и сколько багтрека
потребовалось, чтобы искоренили хотя бы gets(), не говоря о sprintf() и прочих
диверсиях? Какой-то тормоз из набора Керниган-Ритчи-Томпсон не удосужился
понять и затем написать большими буквами, что __нету__ понятия null-terminated
строк. А есть буфера __определенного размера__ и есть __константные__
null-terminated строки. И в такой относительно уже правильной концепции
никакая strcpy() вообще бы не появилась, а началось бы с того, что ввели
фактически только год назад в широком распространении - я про strlcpy(),
strlcat() и snprintf(). И то - сейчас для любого нормального применения
я их пошлю в сад - потому что строки со счетчиком будут необходимы.
(Тех, кто будет защищать K&R, кричать "а ты кто такой?" и иным образом
бить себя пяткой в грудь - заранее прошу не выступать. Все ваши аргументы
известны и пройдены.;()
/netch
--- ifmail v.2.15dev5 * Origin: Lucky Netch Incorporated (2:5020/400)