Login
как правильно программировать?
NEW 20.09.09 20:29
in Antwort AlexOtt 20.09.09 19:51
чтобы он выжимал все возможное из железок...
------
Ну это кому как...
Кто-то выжимает что может из железок, кто-то заменяет 1000 Писюков Майнфреймом...
Об том, что объем требуемых вычислений растет быстрее производительности
систем Я помню...
------
Ну это кому как...
Кто-то выжимает что может из железок, кто-то заменяет 1000 Писюков Майнфреймом...
Об том, что объем требуемых вычислений растет быстрее производительности
систем Я помню...
NEW 20.09.09 20:35
in Antwort Murr 20.09.09 20:29
ну вот мы продаем продукт. мейнфрейм клиенту для него не нужен, но вот в потолки существующих железок мы вполне упираемся...
NEW 20.09.09 20:36
in Antwort pkrasnop 20.09.09 20:28
большая часть возможностей метапрограммирования в С++ используется для эмуляции функциональных вещей :-)
NEW 20.09.09 20:48
in Antwort anly 20.09.09 19:53
Да она и не нужна если программа написана понятно.
-----
Она нужна всегда. Даже когда имеется идеально написанный код, то в этом коде
не описаны условия его корректной работы. Например, написан анализатор для
грамматики типа LL(1)... по коду требования к грамматике не определишь...
Теперь я больше поддерживаю другие программы фирмы.
-----
Тут два пути.
Путь первый. Первое - оцениваешь каждую новую задачу. Второе - говоришь шефу
- это займет столько времени. Несогласный шеф получает задачу обратно и ищет
другого исполнителя.
Второй, путь. Ищешь новую работу.
-----
Она нужна всегда. Даже когда имеется идеально написанный код, то в этом коде
не описаны условия его корректной работы. Например, написан анализатор для
грамматики типа LL(1)... по коду требования к грамматике не определишь...
Теперь я больше поддерживаю другие программы фирмы.
-----
Тут два пути.
Путь первый. Первое - оцениваешь каждую новую задачу. Второе - говоришь шефу
- это займет столько времени. Несогласный шеф получает задачу обратно и ищет
другого исполнителя.
Второй, путь. Ищешь новую работу.
NEW 20.09.09 20:57
in Antwort pkrasnop 20.09.09 20:19
если нужна скорость, то иногда приходится немного жертвовать дизайном.
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
качественный по скорости
-----
Сначала профайлер, а там - видно будет. Возможно, что решение не в оптимизации
кода, а в новом железе...
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
качественный по скорости
-----
Сначала профайлер, а там - видно будет. Возможно, что решение не в оптимизации
кода, а в новом железе...
NEW 20.09.09 21:06
in Antwort AlexOtt 20.09.09 20:35
в потолки существующих железок мы вполне упираемся...
------
В потолки существующих железок упираюсь даже Я на своем домашнем
компостере... притом, что у меня ДЕЛЛ 1420 - пара ксеонов...
------
В потолки существующих железок упираюсь даже Я на своем домашнем
компостере... притом, что у меня ДЕЛЛ 1420 - пара ксеонов...
NEW 20.09.09 21:10
in Antwort Murr 20.09.09 21:06
у нас сейчас стандартные модели - 4xQuadCore + куча памяти. Но потоки передаваемых данных растут быстрее чем мощность железа...
NEW 20.09.09 21:20
Вы не подумайте, я за дизайн :-). И рефакторинг у меня занимает достаточно много времени. Но всё таки, в частности, виртуальные функции работают медленнее обычных, и иногда приходится это как-то обходить, особенно если функция вызывается очень часто.
in Antwort Murr 20.09.09 20:57
В ответ на:
если нужна скорость, то иногда приходится немного жертвовать дизайном.
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
если нужна скорость, то иногда приходится немного жертвовать дизайном.
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
Вы не подумайте, я за дизайн :-). И рефакторинг у меня занимает достаточно много времени. Но всё таки, в частности, виртуальные функции работают медленнее обычных, и иногда приходится это как-то обходить, особенно если функция вызывается очень часто.
NEW 20.09.09 21:23
in Antwort AlexOtt 20.09.09 21:10
Но потоки передаваемых данных растут быстрее чем мощность железа...
------
Повторюсь:
Об том, что объем требуемых вычислений растет быстрее производительности
систем Я помню...
------
Повторюсь:
Об том, что объем требуемых вычислений растет быстрее производительности
систем Я помню...
NEW 20.09.09 21:30
in Antwort pkrasnop 20.09.09 21:20
виртуальные функции работают медленнее обычных
-----
Если это становится фактором, то есть смысл подумать об другой архитектуре
для решения задачи...
...или об другом железе...
-----
Если это становится фактором, то есть смысл подумать об другой архитектуре
для решения задачи...
...или об другом железе...
NEW 20.09.09 21:35
in Antwort pkrasnop 20.09.09 21:32
NEW 20.09.09 21:36
in Antwort pkrasnop 20.09.09 21:32
Разумеется ООП, но с пересмотром архитектуры задачи.
NEW 20.09.09 21:44
in Antwort Murr 20.09.09 21:36
не могли бы на примере. Что такое архитектура задачи?
Вот простой пример:
У меня есть класс отвечающий за преобразование систем координат (читай трансформацию объектов). Я ему передаю точки, он мне их трансформирует.
template <typename Point>
class Transform
{
virtual void transform(Point& out, const Point& in) const = 0;
}
Т.к. объекты могут быть большими вызов функции будет частым, и если преобразование будет простым, то стоимость вызова функции будет сопоставима со стоимостью её вычисления.
Что делать? :-)
Вот простой пример:
У меня есть класс отвечающий за преобразование систем координат (читай трансформацию объектов). Я ему передаю точки, он мне их трансформирует.
template <typename Point>
class Transform
{
virtual void transform(Point& out, const Point& in) const = 0;
}
Т.к. объекты могут быть большими вызов функции будет частым, и если преобразование будет простым, то стоимость вызова функции будет сопоставима со стоимостью её вычисления.
Что делать? :-)
NEW 20.09.09 21:45
А что пишете-то?
in Antwort pkrasnop 20.09.09 21:20
В ответ на:
в частности, виртуальные функции работают медленнее обычных, и иногда приходится это как-то обходить, особенно если функция вызывается очень часто
в частности, виртуальные функции работают медленнее обычных, и иногда приходится это как-то обходить, особенно если функция вызывается очень часто
А что пишете-то?
Dropbox - средство синхронизации и бэкапа файлов.
NEW 20.09.09 21:51
in Antwort pkrasnop 20.09.09 21:44
можно не наследовать, а передавать функцию как параметер... я в одном из своих DSL строю дерево вычислений, где сразу подставляются нужные функции, а не используется наследование и вызов виртуальных функций - производительность выросла заметно...
NEW 20.09.09 21:58
1. Параметр чего?
2. То есть у преобразований нет общего класса?
in Antwort AlexOtt 20.09.09 21:51
В ответ на:
можно не наследовать, а передавать функцию как параметер
можно не наследовать, а передавать функцию как параметер
1. Параметр чего?
2. То есть у преобразований нет общего класса?
NEW 20.09.09 22:03
in Antwort pkrasnop 20.09.09 21:58
NEW 20.09.09 22:07
in Antwort pkrasnop 20.09.09 21:44
У меня есть класс отвечающий за преобразование систем координат
...
Что делать? :-)
------
Как меня учили в школе - т.е. на втором курсе физмата ЛУ - если в имеющейся системе считать сложно, например, в связи с нелинейностями, то надо перевести задачу в систему, где вычисления будут простыми. Всю задачу. Вопрос об том, какой должна быть система координат и есть один из вопросов архитектуры.
...
Что делать? :-)
------
Как меня учили в школе - т.е. на втором курсе физмата ЛУ - если в имеющейся системе считать сложно, например, в связи с нелинейностями, то надо перевести задачу в систему, где вычисления будут простыми. Всю задачу. Вопрос об том, какой должна быть система координат и есть один из вопросов архитектуры.
NEW 20.09.09 22:09
Завтра посмотрю, но я пока склоняюсь применить статический полиморфизм
template <typename Derivate, typename Point>
class Transform
{
void transform(Point& out, const Point& in) const { return Derivate::transform(out, in); }
}
in Antwort AlexOtt 20.09.09 22:03
В ответ на:
да - тут вообще не обязателен ООП. пример можно найти в разделе 2.2.4 в SICP, это реализуется и в C++ без особых проблем
да - тут вообще не обязателен ООП. пример можно найти в разделе 2.2.4 в SICP, это реализуется и в C++ без особых проблем
Завтра посмотрю, но я пока склоняюсь применить статический полиморфизм
template <typename Derivate, typename Point>
class Transform
{
void transform(Point& out, const Point& in) const { return Derivate::transform(out, in); }
}