Login
как правильно программировать?
NEW 20.09.09 22:13
Согласен, надо интерпретировать задачу с выгодной стороны для себя. Понял что вы имели ввиду.
in Antwort Murr 20.09.09 22:07
В ответ на:
Как меня учили в школе - т.е. на втором курсе физмата ЛУ - если в имеющейся системе считать сложно, например, в связи с нелинейностями, то надо перевести задачу в систему, где вычисления будут простыми. Всю задачу. Вопрос об том, какой должна быть система координат и есть один из вопросов архитектуры.
Как меня учили в школе - т.е. на втором курсе физмата ЛУ - если в имеющейся системе считать сложно, например, в связи с нелинейностями, то надо перевести задачу в систему, где вычисления будут простыми. Всю задачу. Вопрос об том, какой должна быть система координат и есть один из вопросов архитектуры.
Согласен, надо интерпретировать задачу с выгодной стороны для себя. Понял что вы имели ввиду.
NEW 20.09.09 22:40
А, вроде бы, понятно в какой области пишите. Если идёт речь о пересчёте координат вершин, когда сцена содержит их десятки тысяч и более, то вменяемые люди делают плоский массив вершин всей сцены, и трансформация дёргается не на каждую вершину, а сразу на весь массив. Ну, и, ессно, оптимизация должна отсекать вершины не попадающие в поле зрения.
in Antwort pkrasnop 20.09.09 21:44
В ответ на:
У меня есть класс отвечающий за преобразование систем координат (читай трансформацию объектов). Я ему передаю точки, он мне их трансформирует.
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;
}
Т.к. объекты могут быть большими вызов функции будет частым, и если преобразование будет простым, то стоимость вызова функции будет сопоставима со стоимостью её вычисления.
А, вроде бы, понятно в какой области пишите. Если идёт речь о пересчёте координат вершин, когда сцена содержит их десятки тысяч и более, то вменяемые люди делают плоский массив вершин всей сцены, и трансформация дёргается не на каждую вершину, а сразу на весь массив. Ну, и, ессно, оптимизация должна отсекать вершины не попадающие в поле зрения.
"God is dead" (Nietzsche). "Nietzsche is
dead" (God).
http://reaper507.blogspot.com
http://reaper507.blogspot.com
Dropbox - средство синхронизации и бэкапа файлов.
NEW 20.09.09 23:55
in Antwort voxel3d 20.09.09 22:40
Что значит "сразу на весь массив"? В цикле? Если функция оптимизирована как inline то разве это не одно и то же.
К слову Point здесь может использоваться не только как точка в прямом смыле ;-).
К слову Point здесь может использоваться не только как точка в прямом смыле ;-).
NEW 21.09.09 00:21
in Antwort pkrasnop 20.09.09 23:55
разве это не одно и то же.
-----
нет.
К слову Point здесь может использоваться не только как точка в прямом смыле ;-).
-----
Так ведь без разницы. Можно задать три произвольные парно непаралельные плоскости
и тем самым определить точку в пространстве... А можно и упростить до двумерности,
или даже одномерности, если модель позволяет...
Именно об этом Я тебе и писал...
-----
нет.
К слову Point здесь может использоваться не только как точка в прямом смыле ;-).
-----
Так ведь без разницы. Можно задать три произвольные парно непаралельные плоскости
и тем самым определить точку в пространстве... А можно и упростить до двумерности,
или даже одномерности, если модель позволяет...
Именно об этом Я тебе и писал...

NEW 21.09.09 05:35
Шаблоны второго типа я использовал в своей практике. А вот шаблоны с виртуальным функциями - не помню. Даже наоборот, чтобы избавиться от виртуальности класса я делал его(или его пользователя) шаблонным. Т.е. эти два приёма (в моей практике)исключают друг друга: либо шаблонность, либо виртуальность.
in Antwort pkrasnop 20.09.09 22:09, Zuletzt geändert 21.09.09 06:04 (anly)
В ответ на:
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;
}
В ответ на:
template <typename Derivate, typename Point>
class Transform
{
void transform(Point& out, const Point& in) const { return Derivate::transform(out, in); }
}
а ведь задача в первом случае поставлена некорректно. Некорректо тем что сразу предлагается абстрактый базовый класс. Т.е. предполагается что пользователь этого класса(функция или класс которые будут с ним работать) будет работать именно с базовым классом, не зная о реальном классе(наследнике). Однако второй вариант не удовлетворяет этому требованию, т.к. здесь уже работа с конкретным классом образованным аргументами шаблона. Уже нельзя например передать пользователю массив указателей на базовый класс (где смесь указателей на разные наследники, у каждого из которых своя функцию трансформ).template <typename Derivate, typename Point>
class Transform
{
void transform(Point& out, const Point& in) const { return Derivate::transform(out, in); }
}
Шаблоны второго типа я использовал в своей практике. А вот шаблоны с виртуальным функциями - не помню. Даже наоборот, чтобы избавиться от виртуальности класса я делал его(или его пользователя) шаблонным. Т.е. эти два приёма (в моей практике)исключают друг друга: либо шаблонность, либо виртуальность.
Проклят нарушающий межи ближнего своего (Втор.27:17)
NEW 21.09.09 09:26
почему?
А можно Point = std::vector<Point3> к примеру
in Antwort Murr 21.09.09 00:21
В ответ на:
разве это не одно и то же.
-----
нет.
разве это не одно и то же.
-----
нет.
почему?
В ответ на:
К слову Point здесь может использоваться не только как точка в прямом смыле ;-).
-----
Так ведь без разницы. Можно задать три произвольные парно непаралельные плоскости
и тем самым определить точку в пространстве... А можно и упростить до двумерности,
или даже одномерности, если модель позволяет...
Именно об этом Я тебе и писал...
К слову Point здесь может использоваться не только как точка в прямом смыле ;-).
-----
Так ведь без разницы. Можно задать три произвольные парно непаралельные плоскости
и тем самым определить точку в пространстве... А можно и упростить до двумерности,
или даже одномерности, если модель позволяет...
Именно об этом Я тебе и писал...
А можно Point = std::vector<Point3> к примеру

NEW 21.09.09 10:21
Зависит от того как ты сделаешь. Если начнёшь огород городить с ооп как в этом примере, то будет не одно и тоже. Заинлайнишь функции, будешь держать все вершины в одном линейном пуле - будет одно и тоже, получишь хорошо оптимизированный компилятором код на выхлопе.
А теперь к нашим баранам - виртуальным функциям. 99% случаев когда заводят речь про издержки виртуальных функций - гонят. Потому, что либо задача такая, где две лишние милисикунды не играют роли, либо архитектура кривая, либо неверно выбран алгоритм. Тут как бы глобально разговор завели, про динамические языки сказав: а) виртуальные функции порождают проблемы при изменении кода, б) они медленные. Так вот, глобально - они не порождают там проблем и они быстрые, а специфичные случаи десятков миллионов вызовов, это просто специфичные случаи, где оптимизация в виде отказа от лишнего такта на поиск в vtbl должна проводиться в самую последнюю очередь, после выбора правильной архитектуры и алгоритма.
in Antwort pkrasnop 20.09.09 23:55
В ответ на:
Если функция оптимизирована как inline то разве это не одно и то же.
Если функция оптимизирована как inline то разве это не одно и то же.
Зависит от того как ты сделаешь. Если начнёшь огород городить с ооп как в этом примере, то будет не одно и тоже. Заинлайнишь функции, будешь держать все вершины в одном линейном пуле - будет одно и тоже, получишь хорошо оптимизированный компилятором код на выхлопе.
А теперь к нашим баранам - виртуальным функциям. 99% случаев когда заводят речь про издержки виртуальных функций - гонят. Потому, что либо задача такая, где две лишние милисикунды не играют роли, либо архитектура кривая, либо неверно выбран алгоритм. Тут как бы глобально разговор завели, про динамические языки сказав: а) виртуальные функции порождают проблемы при изменении кода, б) они медленные. Так вот, глобально - они не порождают там проблем и они быстрые, а специфичные случаи десятков миллионов вызовов, это просто специфичные случаи, где оптимизация в виде отказа от лишнего такта на поиск в vtbl должна проводиться в самую последнюю очередь, после выбора правильной архитектуры и алгоритма.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 21.09.09 10:31
Компилятору, я думаю, всё равно, метод класса или функция.
Согласен.
in Antwort voxel3d 21.09.09 10:21
В ответ на:
Зависит от того как ты сделаешь. Если начнёшь огород городить с ооп как в этом примере, то будет не одно и тоже. Заинлайнишь функции, будешь держать все вершины в одном линейном пуле - будет одно и тоже, получишь хорошо оптимизированный компилятором код на выхлопе.
Зависит от того как ты сделаешь. Если начнёшь огород городить с ооп как в этом примере, то будет не одно и тоже. Заинлайнишь функции, будешь держать все вершины в одном линейном пуле - будет одно и тоже, получишь хорошо оптимизированный компилятором код на выхлопе.
Компилятору, я думаю, всё равно, метод класса или функция.
В ответ на:
А теперь к нашим баранам - виртуальным функциям. 99% случаев когда заводят речь про издержки виртуальных функций - гонят. Потому, что либо задача такая, где две лишние милисикунды не играют роли, либо архитектура кривая, либо неверно выбран алгоритм. Тут как бы глобально разговор завели, про динамические языки сказав: а) виртуальные функции порождают проблемы при изменении кода, б) они медленные. Так вот, глобально - они не порождают там проблем и они быстрые, а специфичные случаи десятков миллионов вызовов, это просто специфичные случаи, где оптимизация в виде отказа от лишнего такта на поиск в vtbl должна проводиться в самую последнюю очередь, после выбора правильной архитектуры и алгоритма.
А теперь к нашим баранам - виртуальным функциям. 99% случаев когда заводят речь про издержки виртуальных функций - гонят. Потому, что либо задача такая, где две лишние милисикунды не играют роли, либо архитектура кривая, либо неверно выбран алгоритм. Тут как бы глобально разговор завели, про динамические языки сказав: а) виртуальные функции порождают проблемы при изменении кода, б) они медленные. Так вот, глобально - они не порождают там проблем и они быстрые, а специфичные случаи десятков миллионов вызовов, это просто специфичные случаи, где оптимизация в виде отказа от лишнего такта на поиск в vtbl должна проводиться в самую последнюю очередь, после выбора правильной архитектуры и алгоритма.
Согласен.
NEW 21.09.09 10:40
in Antwort pkrasnop 21.09.09 10:31
Компилятору не всё равно, будет ли линейно лежать или же по произвольным адресам раскидано обрабатываемое, когда он будет цикл обработки массива вершин оптимизировать.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 21.09.09 10:55
in Antwort voxel3d 21.09.09 10:40
Да, это понятно. Но если у меня объекты лежат в массиве и я на каждый объект вызваю функцию, то должно быть одинаково. Коммутативность вроде как. Поэтому и классы тут должны быть непричём.
23.09.09 11:15
in Antwort pkrasnop 21.09.09 10:55, Zuletzt geändert 23.09.09 11:17 (Murr)
На последнего. К вопросу об том, на каком уровне должно быть кодирование:
C# Trading Software Developer v Dublin City
A new position has opened up with one of Dublin-s financial trading companies.
We are seeking a talented Senior Software Engineer who has previous Trading platforms / investment banking development experience.
This position requires the candidate to have solid C# or C++ development skills. Java will also be accepted as long as you can demonstrate the ability to write low-level code. You will be working on a real-time trading system.
З.Ы. из вчерашней почты.
C# Trading Software Developer v Dublin City
A new position has opened up with one of Dublin-s financial trading companies.
We are seeking a talented Senior Software Engineer who has previous Trading platforms / investment banking development experience.
This position requires the candidate to have solid C# or C++ development skills. Java will also be accepted as long as you can demonstrate the ability to write low-level code. You will be working on a real-time trading system.
З.Ы. из вчерашней почты.
NEW 28.09.09 13:11
in Antwort anly 17.09.09 22:44
в ближайшее время с рынка провалят типичные процессоры типа Intel 86
их заменят FPGA
и програмирование на классическом С++ также к динозврам..
накроется медным тазом Windows и братва которая его так долго писала..... "Бил" почит в позе бозе туда ему и дорога.... придурку тормоз ходячий
ну если кому хочеться ещё париться на старых технологиях и инвестировать время в покойников ! почему бы не мусолить тему !
их заменят FPGA
и програмирование на классическом С++ также к динозврам..
накроется медным тазом Windows и братва которая его так долго писала..... "Бил" почит в позе бозе туда ему и дорога.... придурку тормоз ходячий
ну если кому хочеться ещё париться на старых технологиях и инвестировать время в покойников ! почему бы не мусолить тему !
Все вопросы на ответымаил triton@nefkom.net
NEW 28.09.09 13:41
in Antwort diatron 28.09.09 13:11
В ответ на:
и програмирование на классическом С++ также к динозврам..
а на чем программироваться будут эти процессоры?и програмирование на классическом С++ также к динозврам..
В ответ на:
накроется медным тазом Windows и братва которая его так долго писала
ну это вряд ли. Столько программ уже выпущено, они работают и поддерживаются. Никто их переписывать ради новых процессоров не будет. Разве что новые разработки возможно будут писаться сразу на для этой новинки. Но это - много лет, пока количество новых программ превысит и вытеснит количество старых, так что С++ уже нужен не будет.накроется медным тазом Windows и братва которая его так долго писала
Проклят нарушающий межи ближнего своего (Втор.27:17)
NEW 28.09.09 13:49
in Antwort diatron 28.09.09 13:11
мне кажется что вы немного выдаете желаемое за действительность:
1. FPGA никогда незаменят чипы процессоров, хотябы потому что они гораздо дороже чем ASIC при массовом производстве.
2.
гибко, универсально и намного дешевле? сомневаюсь. Стадартизированные языки как раз намного удещевляют и упрощают рещение
конкретных задач.
3.
ипользуются в бизнесе намного чаще чем остальные, и даже в индустрии, поэтому и для потребителя дещевле испльзовать системы для уже
существующих платформ чем заказывать новое железо, новые операционки и т.д.
1. FPGA никогда незаменят чипы процессоров, хотябы потому что они гораздо дороже чем ASIC при массовом производстве.
2.
В ответ на:
програмирование на классическом С++ также к динозврам
почему собственно? Т.е. вы думаете что "аппаратное" программирование намного проще,програмирование на классическом С++ также к динозврам
гибко, универсально и намного дешевле? сомневаюсь. Стадартизированные языки как раз намного удещевляют и упрощают рещение
конкретных задач.
3.
В ответ на:
Windows и братва которая его так долго писала.....
кто бы как неотносился к Билли но факт остается фактом, его продуктыWindows и братва которая его так долго писала.....
ипользуются в бизнесе намного чаще чем остальные, и даже в индустрии, поэтому и для потребителя дещевле испльзовать системы для уже
существующих платформ чем заказывать новое железо, новые операционки и т.д.
все что вы сделаете в интернете может быть использовано против вас!
NEW 28.09.09 13:55
скорее всего человек имеет ввиду чтото типа VHDL или Verilog
in Antwort anly 28.09.09 13:41
В ответ на:
а на чем программироваться будут эти процессоры?
а на чем программироваться будут эти процессоры?
скорее всего человек имеет ввиду чтото типа VHDL или Verilog
все что вы сделаете в интернете может быть использовано против вас!
NEW 28.09.09 15:43
in Antwort diatron 28.09.09 13:11
NEW 28.09.09 15:49
in Antwort anly 28.09.09 13:41
а на чем программироваться будут эти процессоры?
------
Они будут чудесным образом самопрограммирующиеся - на что захотят - на то и запрограммируются...
пока количество новых программ превысит и вытеснит количество старых
-----
Эээ... набери в поисковике "кобол программист" и посмотри насколько вытеснен Кобол последними новинками...
------
Они будут чудесным образом самопрограммирующиеся - на что захотят - на то и запрограммируются...

пока количество новых программ превысит и вытеснит количество старых
-----
Эээ... набери в поисковике "кобол программист" и посмотри насколько вытеснен Кобол последними новинками...

NEW 28.09.09 16:07
кстати когда пред миром остро встала проблема Y2K то многие большие фирмы приглашали "пионеров-пенсионеров" которые знают старые языки и платили им за это неплохие денюЖки...
in Antwort Murr 28.09.09 15:49
В ответ на:
Эээ... набери в поисковике "кобол программист" и посмотри насколько вытеснен Кобол последними новинками...
Эээ... набери в поисковике "кобол программист" и посмотри насколько вытеснен Кобол последними новинками...
кстати когда пред миром остро встала проблема Y2K то многие большие фирмы приглашали "пионеров-пенсионеров" которые знают старые языки и платили им за это неплохие денюЖки...
все что вы сделаете в интернете может быть использовано против вас!
NEW 28.09.09 16:29
in Antwort viger2 28.09.09 16:07
многие большие фирмы приглашали
------
Они и сейчас ищут. И делают это на регулярной основе. Просто далеко не каждый прогер
может работать в режиме - "строка 576, идентификатор 'Home29' заменить на 'Home28'"...
------
Они и сейчас ищут. И делают это на регулярной основе. Просто далеко не каждый прогер
может работать в режиме - "строка 576, идентификатор 'Home29' заменить на 'Home28'"...