Хотелось бы понять, как переход от C++ к C связан с быстродействием генерируемого кода с использованием современных компиляторов? Большинство компиляторов просто заменяют виртуальный вызов на невиртуальный, т.к. инстанс известен во время компиляции.
Он замедляет команду приблизительно на 2 порядка, т.к. требует сброса кеш линии, а значит использовать его нужно как можно реже.
Можно с этого места поподробнее? Когда-то я делал тесты, и 2 порядка (напомню, что 2 порядка — это в 100 раз) я там не обнаружил. Т.е. вопрос: откуда там 2 порядка и почему происходит сброс кеш линии?
В принципе, ничем, за исключением того, что namespace detail — это для буста общепринятая концепция, а также тем, что все оборачивается под одним неймспейсом без разделения (namespace my_lib пишется только один раз). Предложение состоит в том, чтобы использовать уже имеющиеся стандартны и naming conventions, вместо изобретения своих.
Во, у меня такая микроволновка, старая модель. Я не понимаю, как можно пользоваться более современными. Ручки гораздо удобнее цифровых кнопок. Помню, попалась микроволновка, где надо было нажимать вверх и вниз, чтобы выставить нужное время. Проще было использовать сковороду и газовую плиту, чем указать, что тебе нужно.
Можете описать подробнее, как происходит заворачивание исключений?
Вот к примеру библиотека использует исключение my_exception: public std::runtime_error. Как при этом код, который вызывает эту функцию извне может понять, что там сидит тип my_exception и извлечь нужные параметры, например, которые сидят в исключении?
У меня был точно такой же алгоритм: каждый раз заново все обсчитывалось. Прикол в том, что очень сложно было следить за муравьями, т.к. на вход подавался вектор из муравьев, который каждый раз пересоздавался заново. Плюс надо учитывать, что ты не видишь всего, что происходит, есть «туман войны». Плюс муравьи могут погибнуть в любой момент (их убьют или они самоликвидируются), плюс иногда передвигаешь муравья, а он может не передвинуться (например, когда ты идешь на еду, тогда этот ход игнорируется). Все это сильно усложняет логику по сохранению состояния, поэтому проще все время пересчитывать с нуля.
Да, у xathis не был самый лучший стратегический алгоритм (хотя он очень сильный), но вот тактический алгоритм (атака/защита/уход) был самый лучший. Именно это и позволило ему быть самым первым, т.к. количество муравьев, которое остается после битвы, определяет контроль зоны и победу в конечном счете.
Можно с этого места поподробнее? Когда-то я делал тесты, и 2 порядка (напомню, что 2 порядка — это в 100 раз) я там не обнаружил. Т.е. вопрос: откуда там 2 порядка и почему происходит сброс кеш линии?
Вот к примеру библиотека использует исключение my_exception: public std::runtime_error. Как при этом код, который вызывает эту функцию извне может понять, что там сидит тип my_exception и извлечь нужные параметры, например, которые сидят в исключении?
Но можно на самом деле посчитать, сколько кубик в метрах, чтобы было соответствие Земле.