Lua spicca la testa sopra le altre scelte.
... il miglior supporto per la manipolazione delle stringhe pur essendo facile da incorporare?
Lua è progettato da incorporare in C; l'API è chiara e facile da usare; la documentazione è eccezionale.
Alcune altre risposte hanno denigrato le capacità di stringa di Lua. Penso che stiano sottovalutando Lua. Le funzionalità di stringa di Lua in realtà trovano un punto debole tra "solo concatenazione" e la completa complessità delle espressioni regolari. La capacità di formattazione delle stringhe è molto forte e accumulare stringhe tramite "buffer" o tabelle è semplice ed efficiente.
La scansione delle stringhe è, a mio parere, una delle parti migliori del progetto. Non ha "o" schemi, ma in caso contrario fornisce una grande parte di ciò che ottieni dalle espressioni regolari, inclusa una funzione di "cattura" molto potente ed elegante. Ad esempio, posso convertire una stringa esadecimale catturando ogni singolo carattere e applicando una funzione ad esso:
s:gsub('.', function(c) return string.format("%02x", string.byte(c)) end)
O posso scappare non alfanumerici, caratteri non-spaziali in ottale:
s:gsub('[^%w%s]', function(c) return string.format([[\%03o]], string.byte(c)) end)
Alcune delle caratteristiche esposte qui:
Il carattere di escape per la scansione stringa è %
, che è diverso dal carattere di escape per la quotatura delle stringhe, che è \
. Questa decisione è brillante e dovrebbe vincere un premio di per sé :-)
Ci sono diversi meccanismi di citazione stringhe letterali, tra cui [[...]] in cui non caratteri devono essere sfuggito. Se vuoi generare o associare stringhe con barre retroverse (come LaTeX per esempio), questa è una manna dal cielo.
Se si desidera che tutta la potenza di un parser libera dal contesto, si può sempre usare LPEG, una libreria scritta da uno dei designer di Lua.
prestazioni è piuttosto importante (tempo soprattutto di avvio)
Lua vince sempre premi di performance. L'avvio è velocissimo: l'intero sistema (compresi compilatore, libreria, garbage collector e sistema di runtime) si adatta a 150 KB. Per evitare i tempi di pausa, Lua fornisce garbage collection incrementale. Vedere anche domanda SO Why is Lua faster than other scripting languages?
È possibile rendere l'avvio ancora più veloce da precompilare i propri script, ma non ho mai ritenuto necessario per fare questo codice — e perché compilato (in contrasto con il codice sorgente) non è portabile, precompilazione di solito crea più mal di testa di quello che risolve.
esigenze essere facilmente compilati su più piattaforme
Lua compila utilizzando puro ANSI C e non richiede nemmeno POSIX. Ho una versione in esecuzione sul mio PalmOS PDA.
Deve essere una lingua che sarà ancora in giro tra 5 anni.
Lua è in giro dal 1993. Inoltre, i due membri del team che forniscono il maggior sostegno sono professori di ruolo presso il PUC-Rio. Lua è il loro sostentamento. Infine, l'intero sistema ha solo 17.000 righe di codice. Se Rio fosse caduto fuori dalla mappa domani, chiunque avesse un buon corso di compilatore universitario avrebbe potuto ritirare il sistema e mantenerlo. Ci sarebbero molti volontari.
Ho guardato un po 'alla Python e Lua, ma non so davvero abbastanza su di loro
vedere così in discussione Which game scripting language is better to use: Lua or Python?.
Ma non è affatto facile da incorporare in un programma C da quello che ho capito. Conosci diverso? –
Mai provato, personalmente non ho usato C/C++ molto oltre "Hello World". So che almeno uno (C++ penso) progetto opensource che lo incorpori però, se vuoi curiosare e vedere come è fatto. –
Sì, come si chiama? –