Насколько хорошо функционируют языки на Android?

10

Это особый случай этого вопроса, который я считаю особенно уместным.

Я работаю над игрой для Android и планирую использовать Scala с libgdx. Я планирую сделать эффективную игру, но не обязательно гипер-производительную игру. Я видел документацию libgdx по сборке мусора , и это заставляет меня задуматься:

  1. Функциональное программирование подразумевает множество неизменных объектов.
  2. Следовательно, изменение объекта требует создания нового объекта.
  3. Таким образом, многие объекты собирают мусор, что снижает производительность.

Это непреодолимая проблема? Есть ли другие существенные проблемы с функциональным стилем на Android?

Джейсон Бейкер
источник

Ответы:

3

С Scala у вас все в порядке, но вы действительно не хотите размещать новые объекты слишком часто . GC без пауз все еще не более, чем миф (на Android), и геймерам не нравится, когда ваша игра глючит. Но это не значит, что вы не можете получить никакой пользы от использования более серьезного языка - на самом деле, вы можете. И вы будете в порядке с «функциональным стилем», которого нет в основном игровом цикле. Кроме того, Scala на Android сам по себе требует борьбы с некоторыми дополнительными проблемами сборки, но как только вы изучите его, это будет терпимо. И называть Scala функциональным языком не очень точно, однако у него есть некоторые особенности, связанные с функциональным программированием.

Показать имя
источник
2

Для игр? Избегайте функциональных языков. Вся их парадигма плохо сочетается с играми. Процедурные языки ООП лучше соответствуют потребностям игр в частых изменениях состояния, явном управлении памятью и ресурсами, абстракции данных и полезной модели во многих местах, ориентированном на данные проектировании в некоторых системах и так далее. Функциональные элементы - это одно, а настоящий функциональный язык - это другое.

Наиболее эффективный функциональный язык для Android все равно даст худший опыт разработки, чем Java или C ++. Не потому, что это лучшие языки, а потому, что они лучше подходят для конкретной задачи. Правильный инструмент для работы и все такое.

Это верно для мобильных устройств, ПК, консолей и т. Д. Никто не использует функциональные языки для игр. Naughty Dog использует LISP для написания скриптов , но не основной код игры. Они не могут. Это не сработает, если они попробуют.

Наиболее близкие люди получают шейдеры, которые в некотором роде функциональны, но написаны на процедурных языках, таких как HLSL или GLSL.

Шон Миддледич
источник
> Для игр? Избегайте функциональных языков. Интересно, что в 2010 году Google AI Challenge выиграл бот Lisp. Может быть не годится для написания игр, но, видимо, это довольно удобно, когда дело доходит до игры в них. semanticweb.com/...
Конечно. Другой вариант использования. LISP распространен для реального ИИ, который имеет мало общего с игровым ИИ. ИИ игры - это эффективный выбор, который вводит игрока в заблуждение и делает игру увлекательной. Настоящий ИИ - это принятие действительно разумных решений, проклятие человеческих мнений (умные могут и иногда выглядят глупыми, поскольку наблюдатели часто не видят всей картины, как ИИ).
Шон Мидлдич
2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.На самом деле я прочитал несколько статей от известных разработчиков игр, выражающих интерес к функциональному программированию. Один из них был написан Тимом Суини scribd.com/doc/5687/… и Джон Кармак, похоже, активно интересуется оценкой функциональных языков и в настоящее время делает порт Wolfenstein 3d в Haskell, tinyurl.com/cnzx57u
Джеймс МакМахон
Также есть ли у вас цитата для Naughty Dog, использующего только Lisp для написания сценариев? У меня сложилось впечатление, что у них есть собственный внутренний диалект Lisp, с собственным компилятором, предназначенным для аппаратного обеспечения PS2, и что они написали в нем большинство серий Jax и Dexter. РЕДАКТИРОВАТЬ: Неважно нашел его, gamasutra.com/view/feature/131394/… Practically all of the run-time code (approximately half a million lines of source code) was written in GOAL (Game Object Assembly Lisp)
Джеймс МакМэхон