Domanda

Ho un progetto lato server c ++ in cui devo incorporare una sorta di scripting. Fa parte di un tipo di server MMO online. Ho una significativa esperienza nell'uso di TCL e sembra che si adatti perfettamente. Ho fatto una minima quantità di Lua nei miei giorni di sviluppo del gioco e mi chiedo se questo potrebbe essere un linguaggio migliore per gli script incorporati. È anche bello imparare una nuova lingua. Quali sono i relativi punti di forza e di debolezza di TCL vs Lua? Grazie!

È stato utile?

Soluzione

Onestamente, sono entrambi estremamente adatti all'attività. Entrambi sono facili da incorporare in un'applicazione e hanno una sintassi abbastanza semplice. So per certo che è estremamente semplice aggiungere nuovi comandi (per interagire con l'applicazione) in Tcl, e mi hanno detto che Lua è molto brava anche in questo tipo di cose.

La mia raccomandazione sarebbe di giocare con Lua per un po 'per vedere come ti piace (dal momento che conosci già Tcl) ... e quindi scegliere quello che ti fa sentire più a tuo agio. Se stai scrivendo gran parte del codice, finirai per lavorarci molto, quindi avrai bisogno anche di qualcosa che puoi usare. Alla fine, entrambe le scelte linguistiche dovrebbero essere abbastanza facili da inserire per gli utenti finali.

La mia preferenza personale è Tcl, sia perché non mi piace Lua (ho fatto una quantità ragionevole di programmazione in esso per i componenti aggiuntivi di Warcraft) sia perché amo Tcl (ho fatto MOLTA programmazione in esso per lavoro professionale e privato).

Modifica: aggiunta la nota sull'essere entrambi facili per gli utenti finali. Ho ottenuto 2 voti negativi e non potevo pensare a nient'altro che potesse essere diverso dal non chiarire il motivo per cui parte della mia dichiarazione.

Altri suggerimenti

Immagino di essere l'opposto di RHSeeger lì. Ho usato sia Lua che TCL incorporati nei giochi (giochi online, per inciso) e non toccherei più TCL con un bargepole da 10 'se potessi scegliere. La mia opinione molto soggettiva è che Lua è un linguaggio sano e TCL no. Rispetto alle altre opzioni per i linguaggi di scripting, la sintassi TCL è molto oscura per la maggior parte delle persone, con tutti i segni set ed ex e dollaro e un sacco di parentesi ecc. L'unico vantaggio oggettivo che ha è la facilità di incorporamento - ma Lua non è sciatta in neanche quel dipartimento.

Se questa interfaccia di scripting è puramente per te, puoi anche andare con TCL perché Lua non ti offrirà nulla di nuovo (a meno che l'orientamento agli oggetti non faccia per te). Nelle mani di un utente esperto TCL è uno strumento ragionevole. Se, tuttavia, ti aspetti che gli utenti meno esperti utilizzino il sistema, vai con Lua: la sintassi più semplice acquisterà molta produttività.

Sospetto che Tcl disporrà di più librerie che potresti trovare necessarie o convenienti lungo la strada.

Come altri hanno affermato, entrambe le lingue funzionerebbero molto bene. Una terza opzione che probabilmente funzionerebbe anche su JavaScript è dato che si adatta alla stessa nicchia. Invece di provare a corteggiarti l'uno o l'altro (poiché mi piacciono molto entrambe le lingue), proverò a concentrarmi su alcune delle differenze oggettive e farò notare dove penso che l'una sia davanti all'altra.

È probabile che il problema più importante in un server di gioco sia rappresentato dalle prestazioni non elaborate. Entrambe le lingue sono mature e ben ottimizzate, ma entrambe riconoscono anche che alcuni problemi possono essere ottimizzati rimandando al codice compilato. Entrambe le lingue usano sostanzialmente lo stesso meccanismo per eseguire ciò. Dal punto di vista delle lingue stesse, sembra che Lua sia solo un po 'più veloce. link

Dal punto di vista delle Biblioteche, che è il prossimo grande fattore, nessuna lingua richiede l'uso di alcuna biblioteca per essere utile; cioè entrambe le lingue sono molto compatte, rispetto a lingue come Java che richiedono utili librerie di runtime di grandi dimensioni; Ancora una volta, questa è una conseguenza dei loro requisiti di progettazione originali. Entrambe le lingue hanno numerose librerie aggiuntive tra cui scegliere, ma almeno la mia impressione che TCL abbia un po 'più varietà in questa categoria. tcl :( Archivio estensione Tcl / Tcl Extension Repository ) lua: ( LuaForge )

Un'altra differenza è tra le lingue principali stesse. Entrambe le lingue apprezzano la semplicità rispetto allo stile, ma è qui che finisce la somiglianza. Lua usa quella che potrebbe essere una sintassi familiare per la maggior parte dei programmatori, con una grammatica molto semplice e senza contesto. Anche la sintassi TCL è semplice, ma in realtà non ha nulla in comune con altre lingue esistenti, anche se sembra superficialmente un po 'come il linguaggio shell unix. Tcl è probabilmente più semplice solo per i non programmatori perché la sua sintassi dei comandi orientata alla linea è piuttosto chiara, ma i programmatori esperti in altre lingue di solito si oppongono alla sua sintassi arcana. Nessuno dei due sta perdonando terribilmente in termini di generazione del codice, ma entrambi hanno solide strutture di metaprogrammazione (comparabili, ma forse non robuste come le macro CLISP).

L'API Lua C è estremamente facile da integrare in un'applicazione. Da C hai accesso completo allo stato Lua e ai suoi tipi di dati nativi. Ho consigliato di usare Lua solo per ottenere l'implementazione della tabella hash, anche senza script, ad esempio.

Le funzioni Lua scritte in C possono essere iniettate come nomi globali, raccolte in una tabella come la maggior parte delle funzioni di libreria standard o implementate in DLL e caricate dinamicamente in fase di esecuzione. Ciò consente all'applicazione di fornire un'API stabile, nonché di supportare plugin scritti in Lua o C.

Lua come linguaggio è sorprendentemente potente, con supporto per stili di programmazione sia orientati agli oggetti che funzionali. È anche sorprendentemente leggero: il kit sorgente completo e la documentazione completa si adattano a meno di 1 MB e l'intera VM, il compilatore e le librerie standard in una DLL sono solo 164 KB su Windows.

Non ho esaminato seriamente TCL dalla versione 2 o giù di lì ... Non proverò a confrontarli in modo concreto. Credo che entrambi siano stati inventati per adattarsi alla stessa nicchia, e allo stesso tempo. Sono certamente entrambe lingue mature con accanite comunità di utenti.

Lua ha LuaJIT , che è un compilatore JIT che raggiunge velocità C su loop stretti e viene utilizzato per progetti come Snabb Switch , dove le prestazioni sono fondamentali (Snabb può gestire gigabit al secondo, tutte elaborate tramite LuaJIT). LuaJIT ha anche un FFI di facile utilizzo che consente di accedere alle funzioni C senza scrivere codice stub C.

PUC-Lua (l'implementazione standard) supporta il recupero dall'esaurimento della memoria. Né LuaJIT né TCL lo fanno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top