Junior
Статус: Не в сети Регистрация: 24.08.2011 Откуда: Volgograd
dE fENDER писал(а):
Industrialice писал(а):
Но призыв отказаться от оптимизиции слышу впервые.
Для продвинутых есть третье правило оптимизации. "Не оптимизируй. Пока...". Но оно не для этой темы. А первые два лучше распечатать и принимать как аксиому.
А вот эти строки - как закон:
А. Александреску, Стандарты программирования на C++. 101 правило и рекомендация писал(а):
Пока необходимость оптимизации не доказана— вашим приоритетом №1 должно быть написание кода для человека. (Если кто-то потребует от вас оптимизации кода — потребуйте доказательств необходимости этого.)
Также не забывать о таком правиле - "Не пессимизируйте преждевременно".
Industrialice писал(а):
P.S. Вот вам обратный словам мелко$офтовского быдло-кодера пример:...
Это не обратный пример. Во-первых:
С. Макконнелл, Совершенный код писал(а):
Оптимизацией кода (code tuning)... называют изменение корректного кода, направленное на повышение его эффективности. "Оптимизация" подразумевает внесение небольших изменений, затрагивающих один класс, один метод, а чаще всего - несколько строк кода. Крупномасштабные изменения проекта или другие высокоуровневые способы повышения производительности оптимизацией не считаются.
И в главных - там нарушались технические требования к реализации.
Топикстартеру - лучше потратьте ваше время на прочтение процитированных мной книг, это будет полезней для проекта. А со временем станет ясно что делать самому в каждом случае.
Опять же ИМХО, ну мож я и не прав, но получаетси,что... Эт просто убыстрилизация действия, а не оптимизация, млин вроде все правильно втыкаю...
_________________ -=AMD POWER FAN CLUB=- http://forums.tophardware.ru Обычно от огня бегут, а огнеборцы в него лезут... :-)
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
dE fENDER писал(а):
С. Макконнелл, Совершенный код писал(а):
Оптимизацией кода (code tuning)... называют изменение корректного кода, направленное на повышение его эффективности. "Оптимизация" подразумевает внесение небольших изменений, затрагивающих один класс, один метод, а чаще всего - несколько строк кода. Крупномасштабные изменения проекта или другие высокоуровневые способы повышения производительности оптимизацией не считаются.
Макконелла читал, но с этой фразой не соглашусь. Не соглашусь по крайней мере с тем, как она звучит в русском варианте. На нешем языке оптимизацию можно разделить по масштабу - глобальная, локальная... Если у меня в 3д-движке изначально использовался массив указателей на функции, а потом я от этого варианта отказался (через массив указателей функции не inline-ятся, изначально это было неважно, но после смены пары концепций приобрело значение ), получилась огромная перестойка - и всё равно это оптимизация. Просто глобальная, ведь единственная цель - ускорение работы (на самом деле я параллельно увеличил гибкость - но мог бы этого не делать )
dE fENDER писал(а):
А. Александреску, Стандарты программирования на C++. 101 правило и рекомендация писал(а):
Пока необходимость оптимизации не доказана— вашим приоритетом №1 должно быть написание кода для человека. (Если кто-то потребует от вас оптимизации кода — потребуйте доказательств необходимости этого.)
Александреску, конечно, крутой мужик, хотя я книгу его не читал. И всё равно это похоже на то, как новичков пугают goto, чтобы не привыкали, ибо научиться программированию используя goto будет намного сложнее
Наука не канает, все на собственных мышцах!!! Скорость зависит от чтения и обработки кодов которые ты задаешь, правильно??? Идем дальше, если у тебя есть несколько блоков которые повторяются пишешь один ставишь переменнную чтоб их использовать, я правильно веду логику??? Если еще дальше, пишешь блок который может изменяться в зависимости от переменной и все, и не зачем его каждый раз прописывать, ну я имею ввиду правтически одну и ту же процедуру,но с разными поддтипами и т.д. её не зачем писать когда переменная быстрее вставиться и блок обрабатываемой информации меньше, я правильно думаю??? Точнее мыслю, или я совсем ЛОХ стал в написании...
Да, ваш поток сознания довольно тяжело воспринимается. Попробуйте внимательней относится к знакам препинания. Я так думаю, что у автора конечно же нет повторяющихся одинаковых условий в проверках. Просто наблюдается засилье оператора if в определенном участке кода или разных его кусках. Я по молодости тоже так писал, потом мне стало ясно что в определенных классах часто встречающихся задач его вообще можно не использовать. Но при этом я стал их решать совершенно иным способом.
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
Industrialice писал(а):
это оптимизация. Просто глобальная
Это изменение подхода к глобальной задаче. С одного правильного, пути, на другой тоже правильный но более оптимальный для конкретного случая.
Т.е как при подсчёте числа Пи, можно считать каждый раз с нужной точностью перед использованием, а можно держать готовый в памяти и иметь под рукой всегда. Оба подхода правильные (первый например используется в бенчмарках) но назвать второй лишь оптимизацией первого очень было бы странно. Это просто разные вещи.
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
Vladson писал(а):
Industrialice писал(а):
это оптимизация. Просто глобальная
Это изменение подхода к глобальной задаче. С одного правильного, пути, на другой тоже правильный но более оптимальный для конкретного случая.
По-моему это получается спор о понятиях. Оптимизация - увеличение скорости работы и/или экономичности без изменения функциональности. Может быть даже с некоторым изменением функциональности ( допустимым, например, когда результат разный, но он неотличим ) - лично меня такое определение устраивает
... и всё равно это оптимизация. Просто глобальная, ведь единственная цель - ускорение работы (на самом деле я параллельно увеличил гибкость - но мог бы этого не делать )
Назовите это другим термином. Вот, скажем, прекрасный вариант предложил SkaYPredo - "убыстрилизация".
Industrialice писал(а):
... И всё равно это похоже на то, как новичков пугают goto, чтобы не привыкали, ибо научиться программированию используя goto будет намного сложнее
Новичку научится программированию используя goto - раз плюнуть. Только потом код не прочтешь. Т.е. его алгоритмы и категории мышления моментально станут настолько сложными (именно чужеродными для человеческого разума), что будет легче прочесть программы, полученные генетическим программированием. С другой стороны, я читал "Веревку" и тоже являюсь сторонником этого оператора, так как во многих случаях его использование резко снижает сложность программы - позволяет избавится от кучи вложенных блоков и тех же if. И именно по той же самой причине нельзя использовать оптимизацию, потому что она превращается в обфускацию кода.
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
Industrialice писал(а):
получается спор о понятиях
Похоже на то.
Так вот мне кажется что оптимизация кода, это то что описал Александреску, а то что описываешь ты это выше уровень, тут уже идёт оптимизация не кода, а процесс перепроектирования.
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
dE fENDER писал(а):
Назовите это другим термином. Вот, скажем, прекрасный вариант предложил SkaYPredo - "убыстрилизация".
А зачем? Я, опять же, не вижу причин не использовать слово оптимизация. Скажем так, значение этого слова просто зависит от контекста
dE fENDER писал(а):
Новичку научится программированию используя goto - раз плюнуть. Только потом код не прочтешь. Т.е. его алгоритмы и категории мышления моментально станут настолько сложными (именно чужеродными для человеческого разума), что будет легче прочесть программы, полученные генетическим программированием. С другой стороны, я читал "Веревку" и тоже являюсь сторонником этого оператора, так как во многих случаях его использование резко снижает сложность программы - позволяет избавится от кучи вложенных блоков и тех же if. И именно по той же самой причине нельзя использовать оптимизацию, потому что она превращается в обфускацию кода.
Я про тоже самое касательно goto и говорил: запугивают чуть ли не динозаврами. И правильно делают. Хотя в том же системном программирвоании никуда без goto. Но всему надо знать меру: часто при использовании goto компилятор не может применить оптимизации - что в итоге больно бьёт по скорости работы. Опытный программист знает последствия, он и знает где использовать, где нет. Насчёт обфускации не понял: обычно это нереально запарный процесс ( делал всего для двух проектов, хотя давно было ). А тут на тебе - оптимизация заодно приносит бонус в виде усложнения дизассемблинга
в точки зрения современного компилятора goto от if или while не сильно отличается, они вообще сейчас очень умные стали. а писать хороший код на C без goto практически невозможно.
а вот касательно оптимизации... вообще, изначально стоит оценивать куски алгоритма и прикидывать, какую алгоритмическую сложность можно позволить на каждом из этих кусков. скажем, если делаем какой нибудь memcache для большого количества мелких файлов - то никакие rb-деревья не катят, только хэш-таблицы. но при этом надо обязательно и правильный аллокатор писать, и очереди грамотно использовать, иначе все труды сведутся на нет. а вот каким образом парсится конфиг - глубоко параллельно, это происходит всего 1 раз за всю работу программы, оптимизировать там что либо нет никакого смысла. топикстартеру рекомендую подумать на тему, в какой момент времени он хочет обрабатывать свои события, на сколько важна синхронность их обработки с отображением кадров. возможно, что-то стоит вообще в отдельный поток вытащить. или можно попробовать делать события-объекты, а в коде просто пробегаться по цепочке из них и заставлять каждое из событий проверять своё условие. или вообще внедрить какой нибудь lua. вариантов очень много, каждый накладывает свои ограничения.
Member
Статус: Не в сети Регистрация: 23.12.2004 Откуда: Беларусь, Минск
Всем спасибо! Топик стартовал после двух суток сидения за компом без сна, что привело в соответствующее расположение духа. Небольшая пауза открыла глаза на незамеченные ранее моменты в документации Unity3D (потому и C# - можно было бы и JS, но это уже совсем как-то странно) из-за которых теперь рефакторинг по over200 строк кода ежедневно. Профайлинг показывает, что затраты ресурсов на
Код:
if ((target.transform.position - transform.position).magnitude < 0) {... } if (!started) {if (Time.time > time) {started = true; ... } }
на все задействованные объекты настолько ничтожно малы, что даже смешно. Ну, а в плане оптимизаций массово заменил & на &&
Добавлено спустя 16 минут 29 секунд: *рефакторинг по минус over200 строк
_________________ ASUS A4M88T-M, Athlon II X3 425, 2GB NCP, video - internal ATI 4250, 200GB Samsung HDD, Win7 x64
Member
Статус: Не в сети Регистрация: 24.06.2003 Откуда: Москва
Industrialice
Цитата:
А он вообще к чему-то кроме создания сайтов реально применим?
Почему нет? Логика поведения/физика объектов описывается в моделях. Контроллер отвечает за ... я тут хз как это описать для игры, но например за подгрузку разного рода инфы, события Вьюшка собственно описывает рендеринг.
Цитата:
Што простите?
Только не говорите, что никогда не слышали о шаблонах проектирования
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
Kryos писал(а):
Почему нет? Логика поведения/физика объектов описывается в моделях. Контроллер отвечает за ... я тут хз как это описать для игры, но например за подгрузку разного рода инфы, события Вьюшка собственно описывает рендеринг.
Я не знаю как вы себе это представляете. И не буду говорить что так нельзя сделать - можно, но получится жуткое месиво в коде. У меня сейчас каждый объект сам знает как ему рисоваться - я просто вызываю при рисовании сцены у объектов соответствующие методы. Ну, хотя если по такой логике функцию Display (которая рисует сцену, хотя на деле там только вызовы методов) считать View... За подгрузку ресурсов отвечает набор функций - например, если объекту нужно загрузить текстуру, он делает запрос, а там уже проверяется - если такой текстуры нету - загружается и выдаётся на неё указатель, если уже загружена - просто выдаётся указатель на уже загруженную. А есть ещё гигантское количество всяких механизмов - всё это слишком сложно и простым MVC это не опишешь
Kryos писал(а):
Только не говорите, что никогда не слышали о шаблонах проектирования
Слышал, но мне что-то сложно представить как это относится к разработке игрового движка
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения