Поскольку функциональный код по определению избегает изменчивости, насколько это возможно, можно написать программу с сохранением состояния, разворачивая состояние из предыдущего с течением времени. Итак, я пишу игру в F # исключительно в функциональном стиле, и, конечно, игры, как правило, имеют много и много состояний. Я по существу использую записи для игровых объектов (например, игроков), и я просто сопоставляю все эти состояния, чтобы получить следующее состояние. Это работает очень хорошо. Но, поскольку моя игра становится все сложнее и сложнее, я волнуюсь, что она станет вялой из-за того, что копирует каждое обновление. Мне интересно, как я могу попытаться избежать этих подводных камней в будущем (не так сейчас, так как это пока не очень проблема).Эффективность с функциональной парадигмой
Значит, существуют ли существенные оптимизации в функциональном стиле, которые F # не делает для меня, в частности, связанные с копированием больших фрагментов данных, когда могут быть изменены только небольшие части? Кроме того, есть ли что-то, что F # имеет, что я могу использовать в своих интересах таким же образом?
Еще одна вещь - вот мои две основные проблемы, которые могут быть даже неправдой. Я бы хотел, чтобы они были выпрямлены:
Сбор мусора. Поскольку я в конечном итоге копирую тысячи записей в секунду, должно быть огромное количество генерации объектов, все из которых крайне недолговечны, так как я просто выбрасываю старое состояние. Это кажется вероятной причиной коротких, но едва заметных прыжков в игре каждую секунду или около того.
Является ли F # эффективным при копировании записей со всеми, кроме нескольких полей, обновленных? Если это не так, как я могу улучшить эффективность самостоятельно?
Это очень широкий вопрос. Попытайтесь сосредоточиться на одном вопросе на вопрос (желательно что-то конкретное - попробуйте написать что-то медленное, а затем спросите о том, как писать его быстрее, таким образом у нас есть что-то конкретное, с которым можно работать). – mydogisbox
Я бы локализовал горячий путь вашего приложения, отделил его от остальной части кода, а затем сделаю его изменчивым внутри. –
na, не беспокойтесь. основным препятствием для перформанса является понятность. В первом приближении любой понятный код будет быстрее, чем любой другой непонятный код, независимо от того, какой метод используется. конечно, чтобы выжать последний бит сока, и только после правильного измерения таймингов вы должны использовать мутацию, но это должно быть наименьшее из ваших забот. – nicolas