Nuovi linguaggi

Discussioni su qualunque linguaggio di programmazione o engine
Avatar utente
Slime
Membro attivo
Messaggi: 367
Iscritto il: 23/12/2013, 20:21
Specialità: Esistere
Uso: GM:Studio 1.4 Standard
Contatta:

Nuovi linguaggi

Messaggio da Slime »

Salve gente :cappa:
In questo periodo mi è venuta voglia di imparare un linguaggio diverso da GML, un linguaggio serio. Ma la domanda è: Quale?
La mia cerchia si è ristretta a Java, C++, C#.
Ovviamente il mio fine principale è quello dei videogiochi e mi piacerebbe sapere quale secondo voi si addice meglio a conseguire questo scopo.
Il Java ho letto che è utilizzabile anche con dispositivi Android, a differenza degli altri due, e per imparare mi piacerebbe anche moddare Minecraft (cosa alquanto figa).
Il C# mi sembra di aver capito che era simile a Java, quindi all'inizio la scelta era fra questi due, ma poi ho scoperto che giochi che conosco sono scritti in C++ (Terraria/Starbound) e quindi ho aggiunto anche lui alla lista.
Altra cosa, non voglio appoggiarmi a Unity, vorrei imparare bene il linguaggio senza sotterfugi come ho fatto fino ad ora (vedi GM) e ad usarlo come nei giochi sopra citati.
Poi nel sito di Starbound ho letto questo:
FAQ ha scritto:What language is Starbound coded in?
C++ and Lua
Cosa mi significa? Non capisco come faccia il gioco ad essere costruito con due linguaggi differenti, potreste gentilmente spiegarmelo?
Il lua poi mi ha incuriosito perchè è un linguaggio che incontrai poco più di un anno fa usando la mod ComputerCraft e mi piacque fin da subito. E' possibile realizzarci giochi? Sul sito ufficiale è scritto di sì, ma al tempo mi era parso un linguaggio tanto semplice che non capisco come. Se sì, allora aggiungiamo anche lui alla lista :lol:
Sono completamente niubbo in questi linguaggi orientati agli oggetti quindi mi affido completamente a voi : )

Ah altra cosa, vorrei sapere se tutti quelli che ho citato hanno utilizzi in entrambi 2D e 3D

Grazie :cappa:
Huzzah!

Immagine

Le Tartarughe Spaziali

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

Slime ha scritto:
FAQ ha scritto:What language is Starbound coded in?
C++ and Lua
Cosa mi significa? Non capisco come faccia il gioco ad essere costruito con due linguaggi differenti, potreste gentilmente spiegarmelo?
Ci sono vari modi per fare ciò. Uno di questi è utilizzare la calling convention (modo in cui una funzione va chiamata) dell'altro linguaggio, spesso il C (cdecl). Questa cosa si può fare anche con Game Maker, usando le DLL, ma in modo molto limitato ed esclusivamente dinamico. Invece in altri linguaggi è possibile farlo staticamente: i sorgenti dei due linguaggi importano ed esportano funzioni utilizzando la calling convention dell'altro e vengono compilati in file oggetto statici per poi essere linkati in un eseguibile indipendente (senza DLL o roba simile). Un'altro è usare un linguaggio come scripting dell'altro, e considerando che Lua è un linguaggio di scripting, è possibile che quel gioco sia fatto in questo modo.

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Nuovi linguaggi

Messaggio da Sla »

Lua è un linguaggio di scripting. In c++ puoi utilizzare la libreria fornita da Lua che contiene il suo parser e ti permette di eseguire degli script in lua. In pratica è come se includessi nel tuo eseguibile l'intero motore di Lua.
E' qualcosa di molto semplice proprio perché si tratta di un linguaggio di scripting. Il codice lua che andrai ad eseguire sarà testuale, quindi non è roba che viene compilata.
Tuttavia è anche possibile "mescolare" diversi linguaggi compilati sfruttando le lebrerie dinamiche. Un esempio?
In C++ (o in un altro linguaggio) scrivi un'insieme di funzioni e lo compili in un file di libreria a collegamento dinamico (dynamic link library). Si tratta di codice compilato per una famiglia di processori, e dunque codice pronto per essere eseguito, solo che invece di trovarsi all'interno di un eseguibile sta in una libreria.
Successivamente un qualunque programma, a prescindere dal linguaggio con cui è stato creato, è in grado di collegarsi alla DLL estraendo il codice che gli serve, per poi farlo girare come se fosse proprio. Naturalmente questo non sarebbe possibile se non ci fosse un accordo comune, la "calling convention", che specifica in che modo vengono scambiati i dati tra il programma e la funzione richiamata dalla libreria.
Scendendo di livello è anche possibile programmare in C/C++ e contemporaneamente in ASM, come spesso avviene per la scrittura dei driver, ma questa è una peculiarità del C (non so nemmeno se sia una regola del linguaggio o se siano semplicemente i compilatori a permetterti di farlo).

Un altro esempio di "mistura" tra diversi linguaggi è il code injection, quando allochi dello spazio nella memoria di un processo e ci ficchi dentro delle istruzioni tue, tipicamente un richiamo a DLL che faccia partire una libreria che hai fatto tu.
eppure mi sembra tutto giusto...

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

Sla ha scritto:In pratica è come se includessi nel tuo eseguibile l'intero motore di Lua.
Non è mica Game Maker. Sicuramente la libreria viene spesso linkata dinamicamente, e quindi il codice del motore sta in un file a parte, ma anche se venisse linkata staticamente, solo le funzioni necessarie sarebbero inserite nell'eseguibile.
Sla ha scritto:Tuttavia è anche possibile "mescolare" diversi linguaggi compilati sfruttando le lebrerie dinamiche.
A meno che ogni parte del codice scritta in un linguaggio diverso (ad eccezione di quella principale) sia una libreria indipendente, fare ciò è un crimine orribile, ma tanto per chi programma su Windows alias DLL Hell è normale (non ti sto attaccando).

Avatar utente
Slime
Membro attivo
Messaggi: 367
Iscritto il: 23/12/2013, 20:21
Specialità: Esistere
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Nuovi linguaggi

Messaggio da Slime »

Grazie mille per le spiegazioni :cappa:
Ma ora mi sorge spontanea una domanda (probabilmente stupida): quale è il guadagno in tutto ciò?
Huzzah!

Immagine

Le Tartarughe Spaziali

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Nuovi linguaggi

Messaggio da Sla »

Statico è meglio ;)
Nix ha scritto:Non è mica Game Maker. Sicuramente la libreria viene spesso linkata dinamicamente, e quindi il codice del motore sta in un file a parte, ma anche se venisse linkata staticamente, solo le funzioni necessarie sarebbero inserite nell'eseguibile.
Questa non l'ho capita.. quindi? E' l'espressione "includere" che non ti garba?

@Slime: il guadagno è poter usare un linguaggio di scripting come LUA (più facile e immediato) per le parti non critiche del progetto, che poi sono la maggior parte, mantenendo il resto in C++, più difficile ma potente. Detta proprio terra terra.
eppure mi sembra tutto giusto...

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

@Slascio: Sì, ma avevo capito che con includere intendevi dire ricopiarlo letteralmente dentro all'eseguibile.

@Slime: Dipende da quali vantaggi posseggono i due (o più) linguaggi. Per esempio, si può usare un linguaggio di scripting insieme al C perché il primo è più semplice e sicuro, ma anche meno efficiente, il secondo è più complicato e più facilmente buggabile, ma molto più veloce e richiede poche risorse. L'assembly è invece obbligatorio se si ha intenzione di programmare molto a basso livello (per esempio un OS), ma è poco usabile per programmi grossi (è una rappresentazione testuale, a volte con macro, del linguaggio macchina, fatto per essere il target dei compilatori, non degli umani), dunque in questi viene generalmente accompagnato a un altro più ad alto livello, nel quale viene scritta gran parte del codice. In ogni caso spesso questa cosa di mischiare linguaggi viene abusata, se non hai un motivo valido non farlo.

Avatar utente
Slime
Membro attivo
Messaggi: 367
Iscritto il: 23/12/2013, 20:21
Specialità: Esistere
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Nuovi linguaggi

Messaggio da Slime »

Grazie mille :D
Altra cosa: non capisco bene la differenza tra linguaggi di scripting e non, potreste spiegarmi anche questo? Sono molto niubbo ma ho voglia di imparare tutto ciò che devo sapere per programmare bene :D
Huzzah!

Immagine

Le Tartarughe Spaziali

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

I linguaggi di scripting sono generalmente linguaggi di supporto per altri programmi (es. browser, shell, giochi moddabili), da cui quindi vengono interpretati. Con gli altri invece si scrivono programmi indipendenti. La differenza non è comunque così netta, molti linguaggi di scripting possono essere usati anche per scriverci programmi indipendenti, anche se non è il loro scopo principale, e i linguaggi "normali" possono essere usati come script.
Ultima modifica di Nix il 09/03/2014, 20:57, modificato 1 volta in totale.

Avatar utente
Slime
Membro attivo
Messaggi: 367
Iscritto il: 23/12/2013, 20:21
Specialità: Esistere
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Nuovi linguaggi

Messaggio da Slime »

Capito, grazie :cappa:
Ora possiamo tornare all'argomento principale del topic. Che consigli mi date?
Huzzah!

Immagine

Le Tartarughe Spaziali

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

C++ è più difficile di Java, e C# è simile al Java ma è proprietario e non multipiattaforma (Mono fa schifo), quindi per esclusione comincia con Java. Poi prova C++ e vedi quale ti piace di più tra i due.
Comunque perché dev'essere uno di questi 3? Sappi che non esistono solo i linguaggi OOP (che personalmente ritengo i peggiori, ma non ho intenzione di iniziare un'infinita discussione con i loro sostenitori).

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Nuovi linguaggi

Messaggio da Sla »

Nix ha scritto: Comunque perché dev'essere uno di questi 3?.
Te la canti e te la suoni da solo..
eppure mi sembra tutto giusto...

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

Gli ho solo fatto una domanda.

Avatar utente
Slime
Membro attivo
Messaggi: 367
Iscritto il: 23/12/2013, 20:21
Specialità: Esistere
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Nuovi linguaggi

Messaggio da Slime »

Perchè pensavo fossero i più adatti al mio scopo (videogames), ma se ce ne sono altri buoni: BEN VENGANO!
Potresti farmi qualche nome?
Inoltre chiedo, per orientare Java alla produzione di giochi come devo muovermi? Devo scaricare qualcosa? Ripeto sono molto niubbo in questo settore.

Ma quindi il Lua viene indicato erroneamente come adatto alla produzione di videogiochi? Oppure anche utilizzandolo da solo è possibile ottenere buoni risultati?
Grazie :cappa:
Huzzah!

Immagine

Le Tartarughe Spaziali

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

Non sono i linguaggi ad essere adatti alla produzione di videogames, ma la disponibilità di librerie. Quindi gran parte dei linguaggi lo sono. Per esempio, sicuramente potrebbe esserti utile JavaScript (NB: c'entra poco con Java), con cui puoi fare applicazioni (anche 3D) per il browser senza plugin. Altri sono C e Python.
Spoiler
E Haskell. Ma Slascio, Jak, ecc. avranno da ridire pur non sapendo nulla di questo linguaggio, che ritengo il migliore per qualunque applicazione.
Riguardo al Java, non l'ho mai usato per cose del genere (e in generale per progetti seri), quindi non so dirti.

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Jak »

Per creare un gioco ti consiglio di evitare di usare un linguaggio puro come lo trovi ed usare un motore dietro, ti risparmi un'enorme mole di lavoro iniziale che tanto lo rifaresti uguale o peggiore. Tuttavia se insisti e/o a scopo educativo (perchè male non fa, anzi) ti consiglio di andare su linguaggi con delle buone librerie dietro quindi NON partire da linguaggi di scripting "puri" tipo LUA (che per definizione sono pensati per avere un qualche motore dietro fatto con altri linguaggi, in genere C/C++) ed ovviamente puntare su linguaggi di alto livello (perchè per fare un gioco il basso livello è solo uno spreco di tempo e fatica) quindi direi C# e java.
Consiglio ovviamente di imparare il c++ ma in questo caso mi toglierei anche l'idea di iniziare subito con l'idea di fare un gioco visto che le differenze con game maker sono tante ed è un linguaggio abbastanza distruttivo se non presti particolare attenzione ad ogni dettaglio vista la sua rigidità. Il c++ va preso con calma.

Per iniziare partendo subito con l'idea di fare un gioco e senza motori dietro direi quindi che java sia la scelta migliore. Sufficientemente potente, veloce, serio, facile e pieno di librerie e comunità.

PS: semplificando, linguaggio ad alto livello significa "facile, ma con basse prestazioni", a basso livello è l'esatto contrario che quindi si avvicina di più a come è strutturato un computer.

PPS: LUA è adatto alla creazione di giochi, così come per molti ambiti, però non è pensato per essere usato DA SOLO.
In genere si va il motore grafico/sonoro/fisica ecc in linguaggi più adatti e veloci (e facili per questi ambiti dove in genere è tutto un grande database e quindi hai un'ottimo controllo sui dati) mentre LUA è flessibile e quindi è adatto per il gioco vero e proprio. Le cose da gestire sono poche e LUA in questo ambito è molto più veloce e facile da usare.

Non esiste il linguaggio perfetto, per ogni ambito cè un linguaggio che fa il suo lavoro meglio di altri, il trucco è usare più linguaggi in contemporanea ognuno dedicato al compito specifico nel quale se la cava meglio. Questo è il motivo per cui esistono i linguaggi di scripting e quindi spesso si usano 2/3 linguaggi assieme.

@nix: no non ho da ridire su haskell proprio perchè non lo conosco.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

BotaniciTraffici
Membro attivo
Messaggi: 348
Iscritto il: 31/01/2014, 12:38
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

Re: Nuovi linguaggi

Messaggio da BotaniciTraffici »

Scusa Nix... prima dici
Comunque perché dev'essere uno di questi 3? Sappi che non esistono solo i linguaggi OOP (che personalmente ritengo i peggiori, ma non ho intenzione di iniziare un'infinita discussione con i loro sostenitori).
Va be... se non era tua intenzione iniziare una discussione la frase avrebbe potuto fermarsi prima della parentesi. Il fatto che tu l'abbia scritto già mi fa pensare che il tuo scopo fosse proprio quello.

Poi continui con
E Haskell. Ma Slascio, Jak, ecc. avranno da ridire pur non sapendo nulla di questo linguaggio, che ritengo il migliore per qualunque applicazione.
Meno male che non era tua intenzione. Mi sembra evidente invece il contrario.

Forse faresti meglio ad aprire una discussione a parte (che seguirei molto volentieri) visto che hai iniziato.

Avatar utente
Slime
Membro attivo
Messaggi: 367
Iscritto il: 23/12/2013, 20:21
Specialità: Esistere
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Nuovi linguaggi

Messaggio da Slime »

Grazie mille Jak per la risposta esaustiva :D
Quindi: che Java sia :rockrock:
Cosa devo fare per iniziare? Che librerie si usano per creare giochi in java? Ho letto di directx e opengl, ma non so se sia ciò che cerco, nel caso quale delle due?

PS: Qui su GMI è presente qualcuno che sappia usare Java e che possa aiutarmi? Mi piacerebbe rimanere aggrappato a questa community perchè è come una famiglia :lol:
Dico sul serio, preferisco questa aria famigliare che è presente su questo forum piuttosto che quelle professionali presenti su altri forum di programmazione generale, qui posso mostrare completamente quanto sono nabbo in questo campo senza problemi per farmi aiutare meglio da voi :D

EDIT: ho letto che Minecraft è stato creando usando l'engine JMonkeyEngine, pensavo che giochi del genere fossero creati senza utilizzo di engine :O
forse potrei farci un pensierino anche io allora. Ma per il 2D mi consigliate qualcosa in particolare?
Huzzah!

Immagine

Le Tartarughe Spaziali

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: Nuovi linguaggi

Messaggio da Nix »

BotaniciTraffici ha scritto:...
Infatti non ho detto cos'ha Haskell di meglio rispetto agli altri, ma che secondo la mia opinione è il migliore.
Comunque non voglio aprire una discussione per fare propaganda, perché non interessa a nessuno.

@Slime: Come ho detto in un altro topic, non ha senso usare OpenGL o DirectX per cose semplici.
@Slime 2: Sei sicuro? A me sembra che sia stato fatto con LWJGL, ma forse lo hanno cambiato recentemente.

Avatar utente
Slime
Membro attivo
Messaggi: 367
Iscritto il: 23/12/2013, 20:21
Specialità: Esistere
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Nuovi linguaggi

Messaggio da Slime »

@Nix: Boh, io l'ho letto qua http://giuseppederito.altervista.org/bl ... i-in-java/

E libgdx sia!
Avete qualche tutorial da consigliarmi? Vanno benissimo anche in inglese ovviamente (forse anche meglio in certi casi, alcuni tutorial italiani sono :roll: )
Va bene anche qualche libro se ne avete, però vorrei imparare insieme java e libgdx
Huzzah!

Immagine

Le Tartarughe Spaziali

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti