|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
[Vari]Scripting: se lo conosci lo eviti?
Salve,
*premetto che nel post critico l'interazione fra linguaggio di scripting e linguaggio di base, e non i linguaggi stessi... lo dico perchè ci capita in mezzo Python e non vorrei scatenare un disastro* Lo scripting sarebbe la pratica di delegare parte delle funzionalità di un programma scritto a basso livello (ma non sempre) a codice ad alto livello, nella maggior parte dei casi completamente interpretato. Ora, di questi tempi specie nei videogame sembra andare del tutto per la maggiore, e non si conta chi usa Lua, Python, Squirrel, Ruby o addirittura un linguaggio proprietario, a cui si delegano semplici eventi, alcune cutscenes, o addirittura l'intero gameplay (crysis, CivIV)... tanto che, passando per questi forum, mi convinsi ad integrare Lua nel progetto del mio gioco... la domanda semplice, che tutti i "software architect" concreti dovrebbero porsi è: ma ne vale la pena? A distanza di quasi un anno, la mia risposta tende decisamente verso il NO, avendo fallito nell'obiettivo principale: rendere lo sviluppo più rapido e semplice. Credo che la maggior parte della gente che si trova a valutare la tecnologia dello scripting si trovi abbagliata da tante features superficiali che venendo da linguaggi arcigni come C++ fanno sembrare tutto un eden felice: typing dinamico, garbage collectors, tables, funzioni anonime, ricompilazione in tempo reale, moddabilità per chiunque abbia un editor di testo Lo scopo che sta alla base dell'utilizzo di un secondo linguaggio nella propria applicazione sarebbe quindi diminuire la complessità del codice, rimuovendo tutta quella roba che non piace a nessuno come codice usato una sola volta, architetture poco generiche, complessi cast, settaggi hardcoded, catene di if e chi più ne ha più ne metta. Tuttavia, e parlo per esperienza, questa è una mera illusione; i problemi che si lanciano dalla porta rientrano accompagnati dalla finestra... infatti a mio parere la complessità che si crede di eliminare viene "wrappata" "dinamicizzata" "moddata" o quant'altro, ma rimane lì, nel nostro programma. Le il gameplay/i tools/i plugins sono arbitrari, sono regole che qualche parte devono stare scritte... scriptandole si ottengono scripts poco mantenibili come qualsiasi codice low level, con sopra il carico da 11 che ogni singola feature che si vuole usare va esposta: appoggiandosi a pesanti framework (Boost) o creando un enorme code bloat facendo tutto a mano. Inoltre il flusso del codice così facendo entra ed esce continuamente da un dominio all'altro creando parecchi problemi, non ultimo la completa indebuggabilità del codice, e i conflitti di thread errori ed eccezioni. Per non parlare dello spiegare come funziona l'intero attrezzo ad uno che parte da 0. Quindi nel mio caso, a fronte di alcune centinaia di righe in lua ho dovuto fare enormi sforzi architetturali e non; che si hanno reso più chiare alcune parti, ma che ne hanno definitivamente compromesse altre... spostando e rendendo caotica una complessità che in C++ si sarebbe tradotta nell'implementazione di alcune Factories. In finale, ecco secondo me "gli svantaggi dello scripting che volevate sapere ma non avete osato chiedere": *Calo di prestazioni (si, a qualcuno da fastidio )*Aumento delle dipendenze *Creazione di un layer di interfaccia che VA configurato e mantenuto, per avere una reale espressività *I tipi dinamici vanno bene di per se, ma la base potrebbe digerirli male *Con la permissività degli script si ricorre a soluzioni poco eleganti (variabili globali, etc) *L'user puo modificare qualcosa, ma anche *tutto* *O si convive con l'insicurezza o si crea una sandbox (ancora tempo da perdere) *debug decisamente arduo A pensarci bene, non vedo perchè risolvere un problema con DUE linguaggi dovrebbe essere più pulito che con uno solo ![]() Lo consiglio solo a chi fa della community un punto vincente E ha 1/2 persone da dedicare del tutto al wrapper. Io da parte mia, credo che farò un refactor massiccio per liberarmi di questa palla al piede e iniziare a ridurre davvero la complessità Chissà se a qualcuno interessa abbastanza da arrivare a questa frase ![]() Cosa ne pensate? Ultima modifica di Tommo : 29-08-2009 alle 02:49. |
|
|
|
|
|
#2 |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Penso che in un progetto di piccole dimensioni usare un linguaggio di scripting sia controproducente, in un progetto più grosso come potrebbe ad esempio essere un videogioco commerciale penso che sia quasi indispensabile.
|
|
|
|
|
|
#3 |
|
Messaggi: n/a
|
Non è che volevi direi il contrario?
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Cosa ne penso? Che se per tutti i videogiochi da un po' di anni a questa parte si utilizzano linguaggi di scripting, gli sviluppatori avranno avuto i loro buoni motivi.
Ecco qui tutte le API Python che espone Civilization 4. Il gioco è interamente "scriptabile". Altro esempio, Blender. E' chiaro che si tratta di API e interfaccia (con C++) da mantenere, ma evidentemente ne vale la pena. Poi, Tommo, hai usato LUA che non è che sia il massimo dell'espressività: è un linguaggio semplice e con pochi costrutti sintattici. E' vero che l'embedding è molto semplice, ma, come si dice dalle mie parti: "poco mi dai e poco ti do". My 2 cents. x Sgurbat: javaboy ha detto giusto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#5 |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
|
|
|
|
|
|
#6 |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Piuttosto mi chiedo come mai nel campo dei VG Lua vada per la maggiore.
A me sinceramente fa venire l'orticaria! |
|
|
|
|
|
#7 |
|
Messaggi: n/a
|
Pardon, avevo capito male.
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non vedo alcun problema nell'uso di più linguaggi in uno stesso progetto. Se poi tra questi c'è C++ ben vengano gli ausiliari, ancora meglio se ausiliano C++ fuori dalla finestra.
|
|
|
|
|
|
#9 | |||||||||
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
provo a rispondere punto per punto a quelli che secondo te sono aspetti negativi dello scripting. poi per il resto vale quanto detto da cdimauro: evidentemente ne vale la pena Quote:
Quote:
Quote:
Quote:
![]() cos'é la base? Quote:
![]() questa motivazione é completamente da scartare. Quote:
Quote:
Quote:
|
|||||||||
|
|
|
|
|
#10 | ||||||
|
Member
Iscritto dal: Jul 2009
Messaggi: 210
|
Quote:
Mi spiego. Creare un engine del gioco è dispendioso. Poterlo usare più volte è invece una cosa d'obbligo per non dover sempre reinventare la ruota. Modificare ogni volta il sorgente richiede nuovamente fasi di testing e debug - quindi più tempo -. Integrare invece un sistema di configurazione richiede semplicemente la riscrittura del modulo di configurazione e sei sicuro che non ci sono bug nel sorgente - o almeno nuovi bug -. Certo, se un engine non è sempre adatto a tutti i tipi di gioco e spesso si riscrivono (più o meno interamente), soprattutto quando escono nuove console... Quote:
PS. ovvio che implementare un linguaggio di scripting richiede dello sviluppo in più nella fase di creazione, ma il non dover mettere mano al codice, credo sia una buona motivazione. Quote:
Quote:
Se ti riferisci a prodotti commerciali, beh, idem. I prodotti sono destinati all'enterprise, non ai ragazzi che sviluppano in cantina. Quote:
Ciao. PPS. Quote:
__________________
La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
Isaac Asimov Ultima modifica di Y3PP4 : 29-08-2009 alle 23:24. |
||||||
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Jul 2009
Messaggi: 210
|
Quote:
Può darsi che sia per la facilità di embedding. A chi interessa uno dei tutorial trovati in rete per un semplicissimo esempio: qui Comunque io a suo tempo usai per imparare Python come linguaggio di configurazione e anche lì è semplicissimo.
__________________
La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
Isaac Asimov |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Python richiede molto più "effort" (mi spiace, non mi viene la parola adesso), ma per fortuna esistono librerie come BOOST che rendo l'embbedding (o extending, se sviluppiamo estensioni per Python) estremamente semplice. Sia chiaro: io già non digerisco il C++ (e concordo con PGI E senza dubbio utilizzerei Python come linguaggio di scripting: è di gran lunga più "espressivo" (e ben dotato: oltre alla ricca libreria standard, c'è un notevole supporto di terze parti). Per la velocità (LUA è più veloce), Google ci stà già pensando, per cui mi aspetto grandi cose in futuro.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#13 |
|
Messaggi: n/a
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
"Se lo conosci, lo eviti. Se lo conosci, non ti uccide"...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#15 |
|
Messaggi: n/a
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
i suoi pro ed i suoi contro coincidono: permettono/costringono lo sviluppatore ad occuparsi di aspetti che altri linguaggi gestiscono automaticamente.
|
|
|
|
|
|
#17 |
|
Messaggi: n/a
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
il più citato: gestione della memoria.
- rispetto a .NET e Java, in C++ sai esattamente quando un oggetto viene distrutto - puoi posizionare una variabile nell'area di memoria che preferisci. In .NET collocare un'istanza di una struct nell'heap ed un'istanza di una classe nello stack è impossibile. Lo stesso in Java. in genere, quello che scrivi in C++ è quello che viene eseguito. Ad esempio in ogni oggetto java è insita la gestione thread-safe. Questo significa che quando assegni un valore ad un intero Codice:
int i; i = 0; spero di non aver scritto cazzate, soprattutto rispetto al Java, che non mastico da tempo. |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
|
|
|
|
|
|
|
#20 | |
|
Member
Iscritto dal: Jul 2009
Messaggi: 210
|
Io personalmente C++ lo apprezzo. Mi piace molto l'OOP e dovendo scegliere tra C e C++ (ovviamente parlando orientativamente -senza considerare il progetto e tutti gli studi del caso-) preferirei usare C++.
Ovviamente anche in C coi puntatori e con un po' di astuzia si emula l'OOP (occhio, si emula). Se scritto da un buon programmatore il codice diventa comunque riutilizzabile, ma in C++ tutto questo diventa una realtà. Adesso potremmo star qui a dire perchè ci sono linguaggi da preferire a C++, ma anche questi sono stati scritti in C/C++ Comunque il fatto di dover gestire la memoria è una lama a doppio taglio: è un vantaggio poter decidere come usare la memoria disponibile, ma è altresì vero che devi pensare a tutto te (logicamente). A me questa cosa non dà noia. Certo, se posso fare qualcosa con un linguaggio come Python ben venga, ma da li a dire che C++ fà schifo ne passa... Quote:
Beh si potendo scegliere anche io userei Python per i motivi che hai citato nel tuo precedente post sul fatto che è un linguaggio più completo. Comunque riquoto un mio post precedente: nei videogame lo scripting è una necessità data dal non dover modificare il sorgente degli engines per ogni gioco, in questo modo si riduce al minimo la modifica dei sorgenti, si sfruttano i linguaggi di scripting e si migliora la mantenibilità del codice.
__________________
La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
Isaac Asimov Ultima modifica di Y3PP4 : 30-08-2009 alle 15:45. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:43.










)










