Quanto bene funzionano le lingue funzionali su Android?


10

Questo è un caso speciale di questa domanda che ritengo particolarmente pertinente.

Sto lavorando a un gioco per Android e sto pensando di usare Scala con libgdx. Sto pensando di creare un gioco performante, ma non necessariamente un gioco iper-performante. Ho visto la documentazione di libgdx su Garbage Collection e questo mi fa pensare:

  1. La programmazione funzionale implica molti oggetti immutabili.
  2. Pertanto, la mutazione di un oggetto richiede la creazione di un nuovo oggetto.
  3. Pertanto, molti oggetti vengono raccolti in modo inutile, il che peggiora le prestazioni.

È un problema insormontabile? Ci sono altri problemi significativi con lo stile funzionale su Android?

Risposte:


3

Puoi stare bene con Scala, ma in realtà non vuoi allocare nuovi oggetti troppo frequentemente . GC senza pause non è più un mito (su Android) e ai giocatori non piace quando il tuo gioco non funziona. Ma questo non significa che non puoi trarre alcun beneficio dall'uso di un linguaggio più serio, anzi, puoi. E starai bene con lo "stile funzionale" che non si svolge nel ciclo di gioco principale. Inoltre, Scala su Android stesso richiede di combattere con alcuni problemi di build aggiuntivi, ma una volta appreso, è sopportabile. E non è molto preciso nominare Scala un linguaggio funzionale, ma ha alcune caratteristiche legate alla programmazione funzionale.


2

Per i giochi? Evita i linguaggi funzionali. Il loro intero paradigma non riesce a integrarsi bene con i giochi. I linguaggi procedurali, OOP si adattano meglio alle esigenze dei giochi di frequenti cambi di stato, gestione esplicita della memoria e delle risorse, astrazione di dati e modelli utili in molti luoghi, progettazione orientata ai dati in alcuni sistemi e così via. Gli elementi funzionali sono una cosa, un vero linguaggio funzionale è un'altra.

Il linguaggio funzionale con le migliori prestazioni per Android offrirà comunque un'esperienza di sviluppo peggiore rispetto a Java o C ++. Non perché sono lingue migliori ovunque, ma perché sono migliori per il compito specifico da svolgere. Lo strumento giusto per il lavoro e tutto il resto.

Questo è vero su dispositivi mobili, PC, console e così via. Nessuno usa linguaggi funzionali per i giochi. Naughty Dog utilizza LISP per lo scripting , ma non il codice di gioco principale. Non possono. Non funzionerebbe se ci provassero.

La maggior parte delle persone più vicine sono gli shader, che sono funzionali in qualche modo ma scritti in linguaggi altamente procedurali come HLSL o GLSL.


> Per giocare? Evita i linguaggi funzionali. Interessante che la Google AI Challenge del 2010 sia stata vinta da un bot Lisp. Potrebbe non essere buono per scrivere giochi, ma è apparentemente abbastanza utile quando si tratta di giocarci. semanticweb.com/…

Sicuro. Caso d'uso diverso. LISP è comune per l'IA reale, che ha poco a che fare con l'IA di gioco. L'intelligenza artificiale del gioco consiste nel fare in modo efficiente scelte che ingannano il giocatore nel vedere l'intelligenza e realizzare un gioco divertente. La vera IA consiste nel prendere decisioni effettivamente intelligenti, le opinioni umane sono dannate (la smart può e sembra stupida a volte, poiché gli osservatori umani spesso non vedono l'intero quadro come l'IA).
Sean Middleditch

2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.In realtà ho letto alcuni articoli di sviluppatori di giochi di alto profilo che esprimono un interesse nella programmazione funzionale. Ce n'era uno di Tim Sweeney scribd.com/doc/5687/… e John Carmack sembra avere un interesse attivo nella valutazione dei linguaggi funzionali e sta attualmente effettuando un port di Wolfenstein 3d a Haskell, tinyurl.com/cnzx57u
James McMahon

Inoltre hai una citazione per Naughty Dog usando solo Lisp per lo scripting? Avevo l'impressione che avessero un dialetto personalizzato di Lisp, con un compilatore personalizzato destinato all'hardware PS2 e che vi avesse scritto la maggior parte delle serie Jax e Dexter. EDIT: Non importa, l'ho trovato, 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.