Jak dobrze funkcjonują języki na Androidzie?

10

Jest to szczególny przypadek tego pytania, które moim zdaniem jest szczególnie istotne.

Pracuję nad grą dla Androida i planuję używać Scali z libgdx. Planuję stworzyć grę performatywną, ale niekoniecznie grę hiper-wydajną. Widziałem dokumentację libgdx dotyczącą Garbage Collection , i to sprawia, że ​​myślę:

  1. Programowanie funkcjonalne implikuje wiele niezmiennych obiektów.
  2. Dlatego mutowanie obiektu wymaga utworzenia nowego obiektu.
  3. W ten sposób wiele obiektów jest zbieranych śmieci, co obniża wydajność.

Czy to problem nie do pokonania? Czy są jakieś inne istotne problemy z funkcjonalnym stylem na Androidzie?

Jason Baker
źródło

Odpowiedzi:

3

Scala może być w porządku, ale tak naprawdę nie chcesz zbyt często przydzielać nowych obiektów . GC bez pauz wciąż nie jest niczym więcej niż mitem (na Androida), a gracze nie lubią, gdy gra się zepsuje. Ale to nie znaczy, że nie możesz czerpać korzyści z używania poważniejszego języka - rzeczywiście możesz. I będziesz w porządku z „funkcjonalnym stylem”, który nie ma miejsca w głównej pętli gry. Również Scala na Androida wymaga walki z dodatkowymi problemami z kompilacją, ale gdy się go nauczysz, da się to znieść. Nazywanie Scali językiem funkcjonalnym nie jest zbyt precyzyjne, ma jednak pewne funkcje związane z programowaniem funkcjonalnym.

Wyświetlana nazwa
źródło
2

Do gier? Unikaj języków funkcjonalnych. Cały ich paradygmat nie pasuje do gier. Języki proceduralne, OOP lepiej pasują do potrzeb gier w zakresie częstych zmian stanu, jawnego zarządzania pamięcią i zasobami, abstrakcji danych i modeli przydatnych w wielu miejscach, projektowania zorientowanego na dane w niektórych systemach i tak dalej. Elementy funkcjonalne to jedno, prawdziwy język funkcjonalny to coś innego.

Najskuteczniejszy język funkcjonalny dla Androida nadal będzie zapewniał gorsze wrażenia programistyczne niż Java lub C ++. Nie dlatego, że wszędzie są lepsze języki, ale dlatego, że lepiej nadają się do konkretnego zadania. Odpowiednie narzędzie do pracy i tak dalej.

Dotyczy to urządzeń mobilnych, komputerów PC, konsol itp. Nikt nie używa funkcjonalnych języków do gier. Naughty Dog używa LISP do pisania skryptów , ale nie jest to podstawowy kod gry. Nie mogą. Nie działałoby, gdyby próbowali.

Najbardziej zbliżone do większości ludzi są shadery, które są pod pewnymi względami funkcjonalne, ale napisane w wysoce proceduralnych językach, takich jak HLSL lub GLSL.

Sean Middleditch
źródło
> Do gier? Unikaj języków funkcjonalnych. Ciekawe, że w 2010 Google AI Challenge wygrał bot Lisp. Może nie być dobre do pisania gier, ale najwyraźniej jest bardzo przydatne, jeśli chodzi o granie w nie. semanticweb.com/…
Pewnie. Inny przypadek użycia. LISP jest wspólny dla prawdziwej AI, która ma niewiele wspólnego z AI gry. Gra AI polega na efektywnym dokonywaniu wyborów, które oszukiwają gracza w dostrzeganie inteligencji i tworzenie przyjemnej gry. Prawdziwa sztuczna inteligencja polega na podejmowaniu faktycznie inteligentnych decyzji, przeklętym ludzkim opiniom (mądry może i czasem wygląda głupio, ponieważ ludzcy obserwatorzy często nie widzą całego obrazu tak jak AI).
Sean Middleditch,
2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.Właściwie przeczytałem kilka artykułów od znanych twórców gier, które wyrażają zainteresowanie programowaniem funkcjonalnym. Był jeden przez Tima Sweeneya scribd.com/doc/5687/... i John Carmack wydaje się mieć aktywny interes w ocenie języków funkcjonalnych i obecnie robi port Wolfenstein 3d w Haskell, tinyurl.com/cnzx57u
James McMahon
Czy masz również wzmiankę o Naughty Dog używającym Lisp tylko do pisania skryptów? Miałem wrażenie, że mieli niestandardowy dialekt wewnętrzny Lisp, z niestandardowym kompilatorem ukierunkowanym na sprzęt PS2 i że napisali w nim większość serii Jax i Dexter. EDYCJA: Nieważne, znalazłem to, 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)
James McMahon