The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Оценка исходных текстов игры Doom 3 с точки зрения грамотного стиля кодирования

16.01.2013 11:45

Shawn McGrath, разработчик игры Dyad, представил результаты изучения исходных текстов игры Doom 3 с позиции стиля и приёмов кодирования. В опубликованной статье на примере кода Doom 3 показан грамотный подход к оформлению кода, который позволяет упростить его анализ и делает код более наглядным. Учтены такие параметры как наименование объектов, методов, шаблонов и переменных, расстановка отступов, использование разумных комментариев. Исследование дополнило собой работу Fabien Sanglard, в рамках которой летом прошлого года был сформирован детальный обзор технических особенностей Doom 3, претендующий на роль путеводителя по коду, позволяющему начать использование технологий Doom 3 в свободных игровых проектах, без необходимости проведения многомесячного предварительного разбора кода.

Дополнение: Джон Кармак (John Carmack), основатель и технический директор компании id Software, опубликовал комментарий к статье, пояснив эволюцию кода Doom 3, в котором прослеживается влияние изначального кодирования на языке Си и знакомство с объектно-ориентированным программированием на Objective-C. При переходе на С++ Кармак по сути начинал с чистого листа и использовал разумный по его мнению подход к стилю кодирования, не ограничиваясь какими-то уже сформированными нормами. Использование С++ позволило сократить число строк кода и улучшить его читаемость. По мнению Кармака, с точки зрения читаемости, хороший код на С++ всегда лучше хорошего кода на Си, в остальном языки находятся на одном уровне. Что касается тенденций, то в последнее время Кармак склоняется больше к стилю функционального программирования и уходит от старых привычек и некоторых концепций ООП.

  1. Главная ссылка к новости (http://kotaku.com/5975610/the-...)
  2. OpenNews: Игра Doom 3 BFG портирована для Linux
  3. OpenNews: Компания id Software открыла исходные тексты игры Doom 3 BFG
  4. OpenNews: Представлен детальный обзор кода DOOM 3
  5. OpenNews: Исходные тексты игры Doom 3 открыты под лицензией GPLv3
Лицензия: CC-BY
Тип: английский / Обобщение
Короткая ссылка: https://opennet.ru/35846-doom
Ключевые слова: doom, source, style
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (67) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 11:59, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Кстати сам Кармак недавно высказался насчет си и си++, как оно по его мнению. В общем то он не видит гигантских плюсов у си++, единственным достоинством (и то по сути не для него) является несколько меньшее число строк кода. Вот: http://www.phoronix.com/scan.php?page=news_item&px=MTI3NDQ
     
     
  • 2.3, Гентовод со стажем (?), 12:17, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +12 +/
    спасибо за ссылку. Жаль, что на опеннете этого нет, не думаю, что интервью с  Поттерингом интереснее аудитории.
     
     
  • 3.4, Аноним (-), 12:20, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Если что, это в комментах к сабжу.
     
  • 3.8, meequz (ok), 12:39, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    ВНЕЗАПНО в правой колонке есть ссылка "Добавить свою новость".
     
     
  • 4.18, Аноним (-), 14:23, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > ВНЕЗАПНО в правой колонке есть ссылка "Добавить свою новость".

    Это наверное даже как дополнение к этой новости прокатит.

     
  • 2.30, тфьу (?), 17:13, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Пусть кегль увеличит.
     

  • 1.2, Аноним (-), 12:11, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/

    С++ хороший язык, только жизнь(человека) короткая.
     
     
  • 2.19, Аноним (-), 14:27, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > С++ хороший язык, только жизнь(человека) короткая.

    А игры на чем-то кроме сей и плюсов не очень то и получаются. В играх - реалтайм, знаете ли. Он не ждет. Предсказуемость нужна. Поэтому всерьез игры на чем-то ином никто не пишет.

     
     
  • 3.47, iZEN (ok), 18:38, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > А игры на чем-то кроме сей и плюсов не очень то и получаются.

    Jake — Quake2 на Java с 3D API к OpenGL через библиотеки jogl и lwjgl: http://www.bytonic.de/html/jake2.html

     
     
  • 4.52, Аноним (-), 20:12, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Внезапно, у оригинального Q2 требования к железу вот такие Процессор 90 МГц, ОЗУ 16 Мб.


     
     
  • 5.53, iZEN (ok), 20:30, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Внезапно, у оригинального Q2 требования к железу вот такие Процессор 90 МГц,
    > ОЗУ 16 Мб.

    Quake2 на Pentium-133/32MB с PCI-видеокартой в режиме 800x600 довольно заметно лагал.

    Бенчмарки: http://www.bytonic.de/html/benchmarks.html
    Jake2 последней версии немного отстают от сишного кода, а в тесте с преимущественно задействованием CPU — опережают.

     
     
  • 6.54, arisu (ok), 20:34, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Quake2 на Pentium-133/32MB с PCI-видеокартой в режиме 800x600 довольно заметно лагал.

    хм. у меня на матрасе в софтварном режиме вполне себе летал. правда, это могло быть 640x480, точно уже не помню.

     
     
  • 7.59, ананим (?), 23:03, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    q2 в 1997 году вышел.
    15 лет и… айзен уже может гордиться.
     
  • 6.62, Anonim (??), 00:30, 17/01/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Где там память ограницивается не увидел, но думаю, что одна только ява машина сожрет больше 32МБ и сравнение можно будет смело закончить.
     
  • 6.63, reg907163 (?), 03:09, 17/01/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    зато на P166 32MB SDRAM PC-66/ APG nVidea riva TNT 8MB летал
     
  • 4.56, zy (?), 21:46, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    речь вроде шла о играх, а не о единичных proof-of-concept которые делаются только ради того что бы потом показывать в холиварах
     
     
  • 5.57, iZEN (ok), 22:43, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > речь вроде шла о играх, а не о единичных proof-of-concept которые делаются
    > только ради того что бы потом показывать в холиварах

    Для мобильных телефонов (не смартфонов) написана куча динамичных 3D-игр. Смотря на Android-игры с активным геймплеем в реальном времени тоже можно сказать, что на Java создавать такое возможно и давно уже не proof-of-concept.

     
     
  • 6.58, ананим (?), 23:02, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    даже и не знаю что ты этим хочешь сказать?
    то ли что ты нам всем кучу прекрасных игр напишешь на жабе, то ли что андроид синоним жабы, то ли «Android-игры с активным геймплеем в реальном времени» нифига не юзают NDK, где жаба играет роль какого-нибудь lua, js, python,… и не более.

    не надоело маньячить, о великий гуру жабы и король,… нет! император гэйм-дэйва?
    тебя послушать, так ты в сортир без жабы не ходишь (а то вдруг кто-нибудь на си приблуду к смывному бачку написал, а у тебя из-за этого запор будет)

     
     
  • 7.67, iZEN (ok), 17:54, 17/01/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > даже и не знаю что ты этим хочешь сказать?
    > то ли что ты нам всем кучу прекрасных игр напишешь на жабе,
    > то ли что андроид синоним жабы, то ли «Android-игры с активным
    > геймплеем в реальном времени» нифига не юзают NDK, где жаба играет
    > роль какого-нибудь lua, js, python,… и не более.
    > не надоело маньячить, о великий гуру жабы и король,… нет! император гэйм-дэйва?
    > тебя послушать, так ты в сортир без жабы не ходишь (а то
    > вдруг кто-нибудь на си приблуду к смывному бачку написал, а у
    > тебя из-за этого запор будет)

    http://agitka.net/images/201009/29/0lvs26icw5ij.jpg

     

  • 1.5, Аноним (-), 12:26, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    было же вроде, да и в источнике дата 8 июня
     
     
  • 2.10, Аноним (-), 13:01, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    по ссылке:

    > Jan 14, 2013 12:00 PM

    даже не знаю чего ты поел, чтобы такое сказать

     
  • 2.13, Аноним (-), 13:11, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > было же вроде, да и в источнике дата 8 июня

    В новости говорится о двух совершенно разных исследованиях. Вы почему-то вместо основной ссылки открыли просто упоминаемую к месту ссылку в примечании.

     

  • 1.7, Аноним (-), 12:33, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Как и любой критерий "красоты", это очень и очень спорный вопрос по поводу "красоты" кода Doom 3. Лично мне представленные примеры (кроме форсирования const, что и так должен делать любой нормальный программист) не понравились.

    Вот на нижнем скриншоте новости огромное и бесполезное пустое пространство в середине. Глазам грустно. Представляется пустыня, и перекати-поле катится под завывания пыльного ветра.

     
     
  • 2.16, тоже Аноним (ok), 13:39, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Самое страшное в этом "красивом" примере начинается после первой же правки. Или даже просто смены просмотровщика на что-то с другими настройками отступов или произвольным шрифтом.
     
     
  • 3.20, Аноним (-), 14:29, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > даже просто смены просмотровщика на что-то с другими настройками отступов

    Нормальные люди используют пробелы в качестве отступов и декларируют сие в политике коммитов (т.е. запрет на использование tab в таком качестве). Так нормально, ничего не едет.

     
     
  • 4.23, абыр (?), 14:44, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Для тех кто считает что tab != 8 * space уже готов отдельный круг ада с импами и манкубусами.
     
     
  • 5.26, Crazy Alex (ok), 16:15, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Не равен. Это символ такой, знаете ли. Специально сделано, чтобы настройки можно было подкрутить - например, подширину экрана на рабочем месте.
     
  • 5.33, Аноним (-), 17:42, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Для тех кто считает что tab != 8 * space

    Внезапно, это зависит от настроек редактора. Нормальные проекты требуют чтобы нажатие таба заменялось на пробелы. Но есть еще бакланы которые втыкают именно символ табуляции, а не пробелы. А вот тут уже форматирование будет реально зависеть от настроек редактора. Потому что во сколько пробелов развернется этот таб при отображении - очень зависит от.

     
     
  • 6.42, Аноним (-), 18:10, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +4 +/
    есть бакланы, которые считают что таб надо обязательно изменить.
    таб - это не просто 8 символов - это способ выравнивания, независимо от количество символов слева от табуляции, табуляция _всегда_ выравнивает позицию по горизонтали на кратную восьми
     
     
  • 7.45, arisu (ok), 18:25, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    что характерно: простые тоже пробелы справляются с задачей, а проблемы «разная ширина табуляции» не имеют. очнись, времена перфокарт прошли, больше не надо экономить символы.
     
  • 4.27, Crazy Alex (ok), 16:17, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> даже просто смены просмотровщика на что-то с другими настройками отступов
    > Нормальные люди используют пробелы в качестве отступов и декларируют сие в политике
    > коммитов (т.е. запрет на использование tab в таком качестве). Так нормально,
    > ничего не едет.

    Наоборот - в качестве символа для выравнивания. Для отступов как раз таб подходит отлично. Ну и нормальные люди настраивают реадктор/IDE, чтобы нужные преобразования делались автоматом - как при сохранении файла так и при открутии. Открыл - получил свой стиль. Сохранил - на диске лежит в корпоративном стандарте.

     
     
  • 5.35, Аноним (-), 17:47, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема в совместно разрабатываемых проектах состоит в том что настройки редакт... большой текст свёрнут, показать
     
  • 2.17, arisu (ok), 13:44, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Вот на нижнем скриншоте новости огромное и бесполезное пустое пространство в середине.

    на HN это уже обмусолили. тоже удивлялись.

     
  • 2.61, all_glory_to_the_hypnotoad (ok), 00:20, 17/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот на нижнем скриншоте новости огромное и бесполезное пустое пространство в середине. Глазам грустно. Представляется пустыня, и перекати-поле катится под завывания пыльного ветра.

    +, трешак какой-то

     

  • 1.9, Аноним (-), 12:52, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Помню в исходниках первокваки был тихий ужас и свалка, во второй уже более менее организованно, начиная с третьей кваки код не стыдно показывать посторонним, и да, именно тогда кармак и ко перешли на си++
     
     
  • 2.12, КЭП (?), 13:10, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Просто кодить научились.
     
     
  • 3.21, Аноним (-), 14:31, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Просто кодить научились.

    Просто набили шишек и постепенно пришел опыт и понимание "как делать лучше".

     

  • 1.11, Аноним (-), 13:10, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    ну и что на картинках? где описание?
     
     
  • 2.37, Аноним (-), 17:48, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > ну и что на картинках?

    Код. Сиплюсплюсный. А вы что подумали?

     
     
  • 3.43, Аноним (-), 18:12, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    а без тебя это было не очевидно
     
  • 2.48, Аноним (-), 18:40, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вот блондинка, а вот брюнетка (с) Матрица
     

  • 1.14, tyiuy (?), 13:16, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +20 +/
    Теперь доступно альтернативное прохождение дума! По исходникам.
     
  • 1.15, filosofem (ok), 13:26, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Shawn McGrath, разработчик игры Dyad

    Что только не напишет, как только не прогнётся, чтобы свою проприетарную ненужную недоигрушку попиарить. Это основной посыл новости.

     
  • 1.22, абыр (?), 14:43, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > По мнению Кармака, с точки зрения читаемости, хороший код на С++ всегда лучше хорошего кода на Си

    Да он однако толстый тролль :)

     
     
  • 2.38, Аноним (-), 17:49, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Да он однако толстый тролль :)

    Нет, он прсото немного не уточняет что хороший код на си++ написать зело сложнее чем хороший код на си. Си++ куда навороченнее, что делает написание хорошего кода на нем достаточно сложной задачей.

     
     
  • 3.41, arisu (ok), 18:06, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    да нифига не сложнее, не надо просто стремиться использовать все фичи c++ в проекте. особенно шаблоны, особенно обчитавшись Александреску.

    собственно, если глянуть код дума, то там, фактически, «си с классами», и классы служат больше для группировки данных и методов, да для того, чтобы постоянно не писать «obj->field».

     
     
  • 4.44, Аноним (-), 18:18, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    чем группировка данных и методов отличается от ООП?
     
     
  • 5.46, arisu (ok), 18:28, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > чем группировка данных и методов отличается от ООП?

    давай, я не буду тебе тут читать лекцию, а просто пошлю в гугель. начни с поиска по словам «Alan Kay» и «Smalltalk». я понимаю, конечно, что Кей не указ, он всего лишь придумал ООП, но тем не менее…

     
     
  • 6.49, Аноним (-), 18:43, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не надо никуда посылать, ООП по определению отвечает трем характеристикам - инкапсуляция, наследование и полиморфизм
     
     
  • 7.50, arisu (ok), 18:49, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Не надо никуда посылать, ООП по определению отвечает трем характеристикам — инкапсуляция,
    > наследование и полиморфизм

    (улыбается) наследование и вовсе не обязательно, хотя и удобно. да и инкапсуляция… если уж совсем в нескольких словах, то ООП — это объекты (некая сущность), которые реагируют на сообщения. я всё-таки настоятельно рекомендую тебе почитать про Smalltalk: симула-подобное ООП — это костыль. ближе всего к нормальному ООП в си подошёл Objective C, кстати.

     

  • 1.24, pavlinux (ok), 15:13, 16/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > без необходимости проведения многомесячного предварительного разбора кода.

    Shawn McGrath - в курсе про утиль indent? Которая позволяет не выносить мозг
    ни себе, ни другим, разбирая и доказывая удобночитаемость стиля кодирования!    

    Меня вот бесит, когда тип и имя переменной находятся за стотыщь табов друг от друга.
    Когда * болтается отдельно, кроме операций умножения.
    ...

    Ну а верх мастерства это конструкции while ( 1 ) и for (;;)  :)

     
     
  • 2.25, ананим (?), 15:38, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    верно.
    вот только комменты за тебя не напишет.
    и я не комменты на опеннете имею в виду :D
     
  • 2.28, Crazy Alex (ok), 16:18, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    При объявлениии функции звездочка возле типа, а не имени - как раз нормально, их же больше одной в ряд не объявишь, а что возвращает - видно лучше.
     
     
  • 3.32, сишнег (?), 17:37, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ещё как объявишь: char *f1(void), *f2(int);
     
  • 3.55, Аноним (-), 21:39, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Ритчи использовал именно вариант "звездочка возле имени".

    char* a, b; /* какого типа a и b? */

     
     
  • 4.60, arisu (ok), 23:35, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Ритчи использовал именно вариант «звездочка возле имени».

    что логично, потому что технически, конечно, она относится к типу, но по «здравому смыслу» всё-таки к типу, «привязаному» к идентификатору.

     
  • 2.29, arisu (ok), 16:26, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Ну а верх мастерства это конструкции while ( 1 ) и for
    > (;;)  :)

    а чем ты предлагаешь их заменить? goto, что ли?

     
     
  • 3.39, Аноним (-), 17:51, 16/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    asm(...jmp 0x100500...) //have a nice debugging session.
     
  • 3.68, pavlinux (ok), 17:32, 19/01/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Ну а верх мастерства это конструкции while ( 1 ) и for
    >> (;;)  :)
    > а чем ты предлагаешь их заменить? goto, что ли?

    Программа не должна работать вечно!  Вариантов тонна, надо по коду смотреть.
    GOTO чуть лучше, если условный.

     
     
  • 4.69, arisu (ok), 17:36, 19/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Программа не должна работать вечно!

    и поэтому придумали break. ну а что поделаешь, если конструкция WHILE/ELSEIF наличествует только в Oberon-07?

     
     
  • 5.70, pavlinux (ok), 18:08, 19/01/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Программа не должна работать вечно!
    > и поэтому придумали break.

    Нету бряков в коде, нету... :)

    while (1) {

           init_config();
           check_perm();
           check_net();
           main_algo();
    }

    Постоянно попадается на github

    >ну а что поделаешь, если конструкция WHILE/ELSEIF наличествует только в Oberon-07?




    do {
        pid = fork();
        if (pid == 0)
            main_algo();
        else
            if (pid < 0)
               return (-1);
         else {
               work = 0;
                wait(&ret);
                   if (WIFEXITED(ret) || (WIFSIGNALED(ret) || WIFSTOPPED(ret)))
                      work = 1;
           }
        } while (work > 0);



    Но тут на оборот - по сигналу убивается и перезапускается.

    Поэтому:
    1. Во всех UNIX программах должны быть обработчики сигналов!
    2. Все функции должны возвращать, как минимум, два различных значения!
    3. Исходя из п.2 - возврат каждой функции должен обрабатываться!
    4. Доп. к п.3 - всегда проверять errno.
    ... и т.д.

     
     
  • 6.71, arisu (ok), 18:12, 19/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Нету бряков в коде, нету… :)

    ну и шиш с ними, значит, не нужны. exit() есть где-нибудь. а и нет — не беда: можно и вовсе не запускать.

     
  • 2.74, qux (ok), 15:13, 13/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Когда * болтается отдельно, кроме операций умножения.

    Вроде Netrino coding style рекомендует. И лично мне так тоже больше нравится, звездочка заметнее.

    > Ну а верх мастерства это конструкции while ( 1 ) и for (;;)  :)

    $ git grep -F 'for (;;)' | wc -l
    1130

    $ git grep -F 'while (1)' | wc -l
    1534

    Текущий гит ядра :)

     

  • 1.65, anonymous (??), 09:30, 17/01/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >I spent a bit of time going through the Doom3 source code. It's probably the cleanest and nicest looking code I've ever seen.

    очень толсто, а сама статья полна сарказма (даже если автор этого не подозревает)

     
     
  • 2.66, arisu (ok), 12:43, 17/01/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    о, а вот и Иксперты, которые как обычно лучше автора знают, что автор имел в виду.
     
     
  • 3.72, Легион (?), 03:58, 20/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > о, а вот и Иксперты, которые как обычно лучше автора знают, что
    > автор имел в виду.

    И однозначно кодят лучше Кармака ...

     
     
  • 4.73, arisu (ok), 12:36, 20/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > И однозначно кодят лучше Кармака …

    ну, писать код как минимум не хуже — не так уж сложно: ничего божественного в его коде нет. просто хороший аккуратный код. так что вполне возможно, что пишет и не хуже.

    а вот наличие у людей телепаторов меня удивляет. учитывая, у скольких он есть — я тоже должен был хоть один увидеть ирл. ан — прячут.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру