avva: (Default)
[personal profile] avva
Отличная блог-запись, с которой я полностью согласен (англ.). Процитирую ключевой абзац:
So, while Marco's problem started with the project's shoddy documentation and API, his actual code criticism focuses on issues that are apparently superficial. He hasn't discovered a substantive bug or architectural weakness in the snippet above. Instead, what matters to him are simple virtues like consistency, style, and readability. Marco is saying, in fact, that the OpenSSL code sucks because it lacks superficial beauty. I couldn't agree with this position more.

Именно так. А за goto в кусок кода, закрытый if(0), я бы дополнительно еще бил линейкой по рукам.

Там есть много ссылок на интересные куски кода - хорошие и плохие - рекомендую посмотреть. Во время перехода по ссылке на код procmail рекомендую сидеть и ничего не пить, во избежание травм.

Date: 2009-11-04 06:06 pm (UTC)
From: [identity profile] mopexod.livejournal.com
Черт, goto в кусок кода, закрытый if(0) - красиво!
Ну не хватало чуваку локальной функции, выкрутился как мог :)

Date: 2009-11-04 06:17 pm (UTC)
From: [identity profile] itman.livejournal.com
Что говорит о том, что красота кода - понятие субъективное. По поводу if(0): многие чистые сишники ненавидят си++, а в си++ такую гадость не пришлось бы писать, можно было с помощью деструктора разрулить.

(no subject)

From: [identity profile] mopexod.livejournal.com - Date: 2009-11-04 06:29 pm (UTC) - Expand

(no subject)

From: [identity profile] itman.livejournal.com - Date: 2009-11-04 06:32 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-04 07:10 pm (UTC) - Expand

(no subject)

From: [identity profile] itman.livejournal.com - Date: 2009-11-04 07:15 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-04 07:19 pm (UTC) - Expand

(no subject)

From: [identity profile] itman.livejournal.com - Date: 2009-11-04 07:24 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-04 07:37 pm (UTC) - Expand

(no subject)

From: [identity profile] trurle.livejournal.com - Date: 2009-11-04 08:01 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-04 08:05 pm (UTC) - Expand

(no subject)

From: [identity profile] itman.livejournal.com - Date: 2009-11-04 08:01 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-04 08:20 pm (UTC) - Expand

(no subject)

From: [identity profile] vasja-iz-aa.livejournal.com - Date: 2009-11-04 11:05 pm (UTC) - Expand

(no subject)

From: [identity profile] iratus.livejournal.com - Date: 2009-11-04 08:13 pm (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2009-11-05 01:07 am (UTC) - Expand

(no subject)

From: [identity profile] vasja-iz-aa.livejournal.com - Date: 2009-11-05 03:51 am (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2009-11-05 05:34 am (UTC) - Expand

(no subject)

From: [identity profile] vasja-iz-aa.livejournal.com - Date: 2009-11-05 03:50 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 04:40 am (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2009-11-05 05:31 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 07:15 am (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2009-11-05 10:31 am (UTC) - Expand

(no subject)

From: [identity profile] kmmbvnr.livejournal.com - Date: 2009-11-05 05:18 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 07:06 am (UTC) - Expand

(no subject)

From: [identity profile] kmmbvnr.livejournal.com - Date: 2009-11-05 08:28 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 08:36 am (UTC) - Expand

(no subject)

From: [identity profile] kmmbvnr.livejournal.com - Date: 2009-11-05 08:52 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 09:29 am (UTC) - Expand

(no subject)

From: [identity profile] iratus.livejournal.com - Date: 2009-11-04 08:12 pm (UTC) - Expand

Date: 2009-11-04 06:30 pm (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Вообще-то обычно там делают перед меткой err: return.

Date: 2009-11-04 06:47 pm (UTC)
From: [identity profile] psilogic.livejournal.com
по-моему тоже красиво :)

но юзать не стану, ибо лоси с линейками запарят...

Date: 2009-11-04 06:51 pm (UTC)
From: [identity profile] esspe.livejournal.com
if(0) тоже понравился, красивая обработка исключений :)

В комментах там предлагают его превратить в маркос, чтобы глаз не "резало".

Date: 2009-11-04 10:20 pm (UTC)
From: [identity profile] dmpogo.livejournal.com
Мне тоже понравилось, такой Фортран IV :)

Date: 2009-11-05 10:37 am (UTC)
From: [identity profile] secondary-tea.livejournal.com
Можно было if(0) в макрос спрятать.

Date: 2009-11-04 06:18 pm (UTC)
From: [identity profile] shigin.livejournal.com
Я открыл procmail.c. Кто--нибудь может объяснить зачем там ставят точку с запятой перед блоком? Что бы получился смайлик?

Date: 2009-11-04 06:55 pm (UTC)
From: [identity profile] psilogic.livejournal.com
предположу, что для читабельности - чтобы отметить тот факт, что это блок не относится к какому-нибудь if/else/for строкой выше

хотя заботиться о читабельности и делать такую длинную функцУ - это я даже не знаю, с чем сравнить...

Date: 2009-11-04 06:18 pm (UTC)
From: [identity profile] itman.livejournal.com
На самом деле это все очень субъективно. И, что самое главное, если бы форматированию и внешней красоте кода уделяли бы поменьше времени, то это время можно с пользой бросить на улучшение надежности, скорости, и пр.. кода. Впрочем, это очень тонкая грань: запутанный код тяжело сопровождать.

Если верить классикам...

Date: 2009-11-04 07:13 pm (UTC)
From: [identity profile] marknn.livejournal.com
...Premature optimization is the root of all evil. (DK)

На самом деле, надежность, скорость и пр. гораздо лучше улучшать когда код можно прочитать понормальному. Очень трудно оптимизировать код в котором есть десяток вложенных if и примерно из половины выход через goto.

Форматированием, понятное дело должен заниматься тектовый редактор. А вот без внятности тут никуда. Не думаю что тут уж такая тонкая грань. Только не надо путать комментарии по типа " теперь увеличиваем счетчик", и внятность кода, разумеется. ;-)

Date: 2009-11-04 06:25 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Не, ну часть IFDEF-ов из OpenSSL теоретически можно изжить, сдвинув все алгоритмы в engine. Практически - после этого, например, не получится реализовать SSL/TLS. Мы с коллегами пробовали, утверждаю со знанием дела.

Date: 2009-11-04 06:33 pm (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Ну ты ж знаешь, что самый цимес там не в ifdef-ах, а в реализованном на препроцессоре парсере/сериализаторе ASN.1.

(no subject)

From: [identity profile] beldmit.livejournal.com - Date: 2009-11-04 09:13 pm (UTC) - Expand

(no subject)

From: [personal profile] vitus_wagner - Date: 2009-11-05 05:27 am (UTC) - Expand

Date: 2009-11-05 10:19 am (UTC)
From: [identity profile] dimrub.livejournal.com
А на плюсы переписать пробовали?

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 10:21 am (UTC) - Expand

(no subject)

From: [identity profile] beldmit.livejournal.com - Date: 2009-11-05 11:12 am (UTC) - Expand

Date: 2009-11-04 06:29 pm (UTC)
From: [identity profile] trurle.livejournal.com
OpenSSL source code sucks in a big way.
Однажды я добавлял поддержку Authority Information Access в OpenSSL и впечатлился в полной мере.
Вообще, не то что бы качественный, но минимально приемлемый код составляет пренебрежимо малую часть общего объема кода; о причинах такого обстоятельства я боюсь думать.

Date: 2009-11-04 06:36 pm (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Там засада в том, что НИКТО в данный момент не представляет логику работы этого хозяйства в полном объеме. Следствием этого была недавняя история с багом в Debian, когда мейнтейнер решил убрать чтение неинициализированной памяти, и в результате оторвал вообще все источники случайности кроме PID.

А он ведь честно спрашивал в списке рассылки - и никто ему не смог сходу ответить, что да в процедурах сидинга ДСЧ читается неинициализорованная память. По принципу - хуже не будет, а если повезет - несколько лишних бит энтропии.

(no subject)

From: [identity profile] trurle.livejournal.com - Date: 2009-11-04 06:38 pm (UTC) - Expand

(no subject)

From: [personal profile] vitus_wagner - Date: 2009-11-04 07:16 pm (UTC) - Expand

(no subject)

From: [identity profile] ygam.livejournal.com - Date: 2009-11-04 06:49 pm (UTC) - Expand

(no subject)

From: [personal profile] vitus_wagner - Date: 2009-11-04 07:15 pm (UTC) - Expand

(no subject)

From: [identity profile] egorfine.livejournal.com - Date: 2009-11-04 10:03 pm (UTC) - Expand

ms office

From: [identity profile] egorfine.livejournal.com - Date: 2009-11-04 10:04 pm (UTC) - Expand

Date: 2009-11-04 06:39 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
goto nomore_rc;
goto nomore_rc;
goto nomore_rc;
goto nomore_rc;
goto nomore_rc;
goto nomore_rc;

Date: 2009-11-04 06:43 pm (UTC)
From: [identity profile] ygam.livejournal.com
Послал ссылку на procmail.c в рабочую рассылку. ГотичноГалахичноФеерично!

Date: 2009-11-04 10:48 pm (UTC)
From: [identity profile] igorlord.livejournal.com
But the comments there were SO carefully laid out! Someone spent some real efforts on that.

Reminds me of a lipstick on a pig...

Date: 2009-11-04 08:00 pm (UTC)
From: [identity profile] spamsink.livejournal.com
После знакомства с синтаксисом procmail примерно понятно, что можно увидеть в коде.

Date: 2009-11-04 08:06 pm (UTC)
From: [identity profile] vodianoj.livejournal.com
Конкретно Гото в кусок кода закрытый иф(0), для "с" не такое плохое решение - оно очень читабельно - сразу ясно как туда попасть и что делает. Некий вид обработки эксепшенов.
Т.е. по стилю выглядит очень современно:
try {
Do something....
} catch(error e) {
Do some error related staff...
} finally {
Perform cleanup...
}
return ret;

С другими вещами и с главным тезисом полностью согласен.

У Кнута, кстати есть хорошая статья по теме goto - "Structured programming with goto statements" - http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf
Edited Date: 2009-11-04 08:34 pm (UTC)

Date: 2009-11-04 08:58 pm (UTC)
From: [identity profile] salas.livejournal.com
#define try
#define catch(x) if (0)
#define throw goto err;

(no subject)

From: [identity profile] vodianoj.livejournal.com - Date: 2009-11-05 05:51 am (UTC) - Expand

оффтопик )

Date: 2009-11-04 08:53 pm (UTC)
From: [identity profile] papa-vova.livejournal.com
Просто сложновато, если честно, вот так взять и начать разбираться в FreeBSD. Что править — то ли настройки SMTP, то ли настройки Exim, то ли конфигурационные файлы sendmail (открыл, посмотрел, закрыл ибо действительно такое ощущение, что это не файл конфигурации, а просто кто-то долго бился головой об клавиатуру) (http://unix-forum.ru/post3660.html#p3660)
Фразу про sendmail.cf, клавиатуру и голову встречал лет десять-двенадцать назад, кажется, в эхе ру_линукс :-)

Re: оффтопик )

Date: 2009-11-04 09:57 pm (UTC)
From: [identity profile] egorfine.livejournal.com
я честно когда-то научился писать .cf - из принципы. Но лет жизни мне это не прибавило, о нет.

Re: оффтопик )

From: [identity profile] nm-work.livejournal.com - Date: 2009-11-05 07:43 am (UTC) - Expand

Date: 2009-11-04 10:03 pm (UTC)
From: [identity profile] egorfine.livejournal.com
Мой учитель по юниксу, когда учил меня лет надцать назад, рассказывал мне что самая чисто написанная программа - это procmail. Рассказал мне пару архитектурных решений оттуда, которыми я впечатлился, но благополучно забыл.

Знаете, Анатолий, я никогда в жизни исходник procmail не видел, но слова моего учителя про procmail помнил всю жизнь. И сегодня наступил тот день, когда я прочитал этот ваш постинг, статью, приготовил чаек и в предвкушении райского эстетического наслаждения впервые в жизни открыл procmail.c, ожидая проникнуться настоящим искусством, ожидая получить нереальную порцию настоящего системного вдохновения...

Анатолий, расскажите пожалуйста, восстановите мой помутненный разум.... только вы можете мне вернуть покой!... я верю, в вашем опыте найдется ответ на этот вопрос смысла жизни...

Скажите... как можно так писать?????

Date: 2009-11-05 01:53 am (UTC)
stas: (Don't panic!)
From: [personal profile] stas
Ну а че, у qmail код покраше прокмейла, по-моему.

Date: 2009-11-05 06:35 am (UTC)

Date: 2009-11-05 06:49 am (UTC)
From: [identity profile] yba.livejournal.com
Нормальный код, твердая четверка за читабельность, при том что на C я не пишу. Даже 4+.
По поводу goto внутрь if-а - а какие альтернативы? Я не уверен что второй goto вместо if(0) был бы читабельнее. Претензии к форматированию - просто детский сад.

Date: 2009-11-05 07:10 am (UTC)
From: [identity profile] cmm.livejournal.com
а какие альтернативы?

return перед меткой, или проверка флага типа "всё ОК или нет".

(no subject)

From: [identity profile] yba.livejournal.com - Date: 2009-11-05 08:41 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 08:45 am (UTC) - Expand

(no subject)

From: [identity profile] yba.livejournal.com - Date: 2009-11-05 09:50 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 10:05 am (UTC) - Expand

(no subject)

From: [personal profile] stas - Date: 2009-11-05 06:21 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 07:20 pm (UTC) - Expand

(no subject)

From: [identity profile] vodianoj.livejournal.com - Date: 2009-11-05 02:01 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2009-11-05 02:38 pm (UTC) - Expand

(no subject)

From: [identity profile] vasja-iz-aa.livejournal.com - Date: 2009-11-05 04:35 pm (UTC) - Expand

(no subject)

From: [identity profile] vodianoj.livejournal.com - Date: 2009-11-05 07:34 pm (UTC) - Expand

(no subject)

From: [identity profile] vasja-iz-aa.livejournal.com - Date: 2009-11-05 08:18 pm (UTC) - Expand

(no subject)

From: [identity profile] vodianoj.livejournal.com - Date: 2009-11-05 08:32 pm (UTC) - Expand

Date: 2009-11-05 09:32 am (UTC)
From: [identity profile] emdin.livejournal.com
Кому выпала великая радость писать проект с нуля, пусть не порочит тех несчастных, кто получил в вечное наследство горы чудовищного кода, ибо в следующей жизни он может оказаться на их месте.

Date: 2009-11-05 09:34 am (UTC)
From: [identity profile] emdin.livejournal.com
Вообще, это так приятно, встретить разом такую толпу прекрасных програмистов. Просто даже так рядом постоять -- сеансу набраться.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 05:53 am
Powered by Dreamwidth Studios