Iskander
> Структурируй посты
пока я писал, появились новые сообщения и я на них ответил...
Sbtrn. Devil
в принципе кое в чем ты прав... действительно ингода проще копипастить, и вызовы всяких врапперов часто напрягают...
но вот моя практика подсказывает что чем дальше проект, тем меньше кода в нем можно написать за день, единственное что может хоть как-нибудь повлиять на эту зависимость - это хорошая организация кода... вот при копипасте, хорошая организация кода невозможна в принципе, даже теоретически...
допустим frustum culling будет намного меньше если у нас есть классы векторов плоскостей матриц и функция которая скажет по какую сторону от плоскости лежит точка, я однажды видел как эту задачу решили имея кучи иксов и игреков, поверь второй раз это видеть не очень хочется... а функция которая определяет по какую сторону от плоскости используется только в этой функции, ее не нужно копипастить даже если она абсолютно верна, и ее не нужно отлаживать, ты ее скипаешь по Ф10 и смотришь на результат который она вернула... точно так же в далльнейшем тебе не нужно заходить в функцию попадания точки в пирамиду видимости, тебе нужен только ее результат, и вот так вот где-то на самом верхнем уровне ты отправляешь на рендер целые меши, ты уже не видишь X и Y - они тебе не нужны...
ну и вот такой подход сильно избавляет от копипасты... нужно писать функции и иногда не удобно отлаживать, но удобнее работать, покрайней мере ИМХО...
Pushkoff
Сорри, эт я не тебе, это я святому дьяволу. Случайно не то выделил.
Pushkoff
Спорить, в общем, не буду, ибо говорим мы, в сущности, об одном и том же, но имеем различия по вопросу тактики. А чувство тактики приходит с суровым опытом, и тут уж он у кого какой.
В конце концов, как гласит военная мудрость, единственной явной тактической ошибкой является форсирование реки вдоль, всё остальное допустимо. :)
Iskander
> святому дьяволу
Святой Дьявол - это совсем другой юзер.
Вот к чему приводит отсутствие надлежащей копипастной практики. :)
Sbtrn. Devil
> Святой Дьявол - это совсем другой юзер.
Да мне плевать, все поняли что я про тебя.
Я нихрена не понял, кто тут чего обсуждает, но при виде фразы "Копипаст-ориентированное программирование, как методология" я вспоминаю код одной немецкой игры под nintendo ds, где встретить такие штуки в игровом коде было в порядке вещей:
memset((void *)0x07000000, 0x00000000, 0x0400); memset((void *)0x07000400, 0x00000000, 0x0400);
(Здесь игра, видимо, что-то чистит в видеопамяти. Чистит в разных местах, и везде раскопипастено).
Или вот, например, брутальная загрузка имени игрока из сейва:
userNames[currUser][0] = savegameBuffer[0x006 + currUser*100 + 80]; userNames[currUser][1] = savegameBuffer[0x006 + currUser*100 + 81]; userNames[currUser][2] = savegameBuffer[0x006 + currUser*100 + 82]; userNames[currUser][3] = savegameBuffer[0x006 + currUser*100 + 83]; userNames[currUser][4] = savegameBuffer[0x006 + currUser*100 + 84]; userNames[currUser][5] = savegameBuffer[0x006 + currUser*100 + 85]; userNames[currUser][6] = savegameBuffer[0x006 + currUser*100 + 86]; userNames[currUser][7] = savegameBuffer[0x006 + currUser*100 + 87]; userNames[currUser][8] = savegameBuffer[0x006 + currUser*100 + 88]; userNames[currUser][9] = savegameBuffer[0x006 + currUser*100 + 89]; userNames[currUser][10] = savegameBuffer[0x006 + currUser*100 + 90];
Или не менее брутальная методика выделения оперативной памяти:
ingameRambase = (ingameRambase + 256) & 0xffffff00; ingameBg = (u8*)ingameRambase; // 0x000c000 ingameBgPal = ingameBg +0x000c000; // 0x0000200 ingameObj = ingameBgPal +0x0000200; // 0x0001000 ingameOamBuffer = ingameObj +0x0001000; // 0x0000400 ingameObjPal = ingameOamBuffer +0x0000400; // 0x0000200 ingameObjPoint = ingameObjPal +0x0000200; // 0x0000400 ingameMenuNewBg = ingameObjPoint +0x0000400; // 0x000c000 ingameMenuGameBg = ingameMenuNewBg +0x000c000; // 0x000c000 ingameMenuMainBg = ingameMenuGameBg +0x000c000; // 0x000c000 ingameMenuArrows = ingameMenuMainBg +0x000c000; // 0x0002000 ingameMenuAButton = ingameMenuArrows +0x0002000; // 0x0000400 ingameMenuBButton = ingameMenuAButton +0x0000400; // 0x0000400 ingameNextLevelBg = ingameMenuBButton +0x0000400; // 0x000c000 ingameNextLevelBgPal = ingameNextLevelBg +0x000c000; // 0x0000200 ingameStoryline = ingameNextLevelBgPal +0x0000200; // 0x000c000 ingameStorylineTextBg = ingameStoryline +0x000c000; // 0x000c000 ingameStorylinePal = ingameStorylineTextBg +0x000c000; // 0x0000200 ingameStorylineWin = ingameStorylinePal +0x0000200; // 0x000c000 ingameStorylineLose = ingameStorylineWin +0x000c000; // 0x000c000 ingameHelpScreen = ingameStorylineLose +0x000c000; // 0x000c000 ....
BUzer
> Я нихрена не понял, кто тут чего обсуждает, но при виде фразы
> "Копипаст-ориентированное программирование, как методология" я вспоминаю код
> одной немецкой игры под nintendo ds, где встретить такие штуки в игровом коде
> было в порядке вещей:
Тут наверное дело в том, что оптимизация была раньше плохая и убогая...
Раньше и циклы руками разворачивали, чтобы круто было, сейчас подобное не существенно...
Executor
> Тут наверное дело в том, что оптимизация была раньше плохая и убогая...
Да нет, это просто говнокод :)
BUzer
клёво, мне нра
такое даже на стиральной машинке скомпилится и бует летать : )
// высказываюсь, прочитав название темы
Меня спасает тока копи-паст методология.
Сам свой двиг делаю и забываю "как конкретно использовать такую-то связку гранат".
Вспоминаю "примерное название тестового примера", нахожу и его копирую и слегка меняю.
Если-бы была возможность визуального програмирования, то я бы "легче находил нужный сэмпл"
для копирования. Потому-что у меня хорошо развита пространственая память и я-бы летал
по миру проекта как по улицам города - отметил некий домик "будь первым штампом", отметил
второй домик "будь вторым штампом" - полетал и насобирал штампов - строиш новую пикадили
и жмакаеш контрол+1, контрол+2 и так далее - новая улица из клонов - некий домик отмечаеш
и там поправляеш некие детальки (цыферки свойств). Можно "переводить в плоский текст", если приспичит.
Мне кажется, что Sbtrn. Devil недостаточно глубоко осознал все возможности копипаст-ориентированного программирования как методологии.
Конечно, правильные пацаны никогда не признаются, что тоже иногда грешат этим, а будут до конца упираться, что все свои шедевры они наваяли интенсивно стуча по клаве, причем исключительно в блокноте.
Лично я же признаюсь, что да, я почти всегда и во всем использую копипасту. Хоть в программах, хоть в каде (не в коде прошу заметить, а именнно в каде, автокаде например), хоть в редакторе формул. Но в основном я не копирую других, а модифицирую себя, что позволяет мне сильно расти над собой.
Опыт показывает, что да, при копипасте возможно не только возникновение, но и быстрое размножение всех возможных и часто особенно очень глупых ошибок, но для меня не составляет большого труда создать не менее глупые ошибки и вручную, при прямом наборе текста на клаве. Более того, при последнем способе генерации ошибок есть и другая проблема: внезапно забываешь как пишется вотЭтаДебильнаяФункцияПосле15знака. Поэтому копипаста даже здесь сильно помогает.
Но давайте посмотрим в чем же недостатки копипасты и почему ее так ненавидят?
1. При копипасте совсем нетрудно генерировать тонны only write говнокода, который как говорит само название для чтения не предназначен (чукча не читатель, чукча писатель!).
2. При копипасте быстро размножаются ошибки.
Теперь о достоинствах. Тут можно долго и нудно рассуждать, но самое главное это конечно развитие лени. Ведь лень по сути - основной двигатель прогресса. Поэтому тому, кому надоест просто и тупо копипастить, обязательно впоследствии придумает функции, процедуры, подпрограммы, классы, наследования, шаблоны или макросы. Или по крайней мере попытается понять их.
И наконец последнее, о стиле. Древние когда кому-то хотели сказать, что он отвратно пишет, тонко намекали, что он должен чаще переворачивать стиль (из школяров наверное не все еще знают, что стиль - исходно означал палочку для письма на восковой дощечке. Стиль имел на другом конце от заостренного лопаточку для стирания написанного). Отсюда понятно, что в любом письме главное это модификация, рефракторинг как бы сейчас выразились в довольно узких кругах. Модифицируется однако как правило то, что уже не только написано, но и неоднократно скопипастено.
Тема в архиве.