Domanda

Sto cercando un compilatore front-end Lua che viene controllato per tipo al momento della compilazione, ma genera un codice byte Lua 5.1 standard (che ha solo tipi di runtime). Quello che voglio è una discreta quantità di analisi sintattiche statiche in fase di compilazione e di digitazione opzionale, per rilevare errori banali prima del runtime. Il codice byte risultante dovrebbe giocare bene con il codice byte Lua esistente che è stato compilato con LoadString standard ().

Per essere chiari - qualsiasi differenza si verificherebbe solo al momento della compilazione dei byte. In fase di esecuzione, il codice byte non avrebbe idea che durante la fase di compilazione fosse successo qualcosa di diverso / insolito.

Quello che ho in mente suona molto come ActionScript; Non mi dispiacerebbe nemmeno un compilatore ActionScript che emette il codice byte Lua!

Qualcuno ha sentito parlare di un tale sforzo? Ho visto alcuni riferimenti all'utilizzo di MetaLua per farlo, ma onestamente non sono abbastanza brillante da fare la coda della loro documentazione

È stato utile?

Soluzione

Nell'estate del 2005 o giù di lì, ho lavorato con un studente universitario incredibilmente intelligente sul problema di fare qualche Inferenza del tipo di compilazione in tempo per Lua, eventualmente assistita da annotazioni. Questo problema si rivela incredibilmente difficile! (Il mio studente ha scritto una breve nota tecnica, ma in realtà non è destinato alla circolazione generale.)

Se volevo risolvere il problema che hai posto, con i vincoli gemelli che consente un controllo statico significativo del tipo e che interagisce con il codice Lua standard compilato dal bytecode , Vorrei progettare una nuova lingua da zero per soddisfare questi due vincoli. Sarebbe una notevole quantità di lavoro, ma significativamente più semplice rispetto al tentativo di adattare un sistema di tipi a Lua

Altri suggerimenti

Vedi questo post sul blog di Metalua .

-{ extension "types" }

function sum (x :: list(number)) :: number
  local acc :: number = 0
  for i=1, #x do acc=acc+x[i] end
  return acc
end

Questa sembra una soluzione di runtime però.

Comunque, sentiti libero di porre la tua domanda nella Mailing list Metalua . Se vuoi estendere la sintassi di Lua, Metalua è il primo strumento da guardare.

P.S. non scrivere mai Lua in maiuscolo !

Questa domanda ha sei anni ... ma ecco una nuova risposta: http://terralang.org/

  

Come C, Terra è un linguaggio semplice, tipizzato staticamente, con   gestione manuale della memoria. Ma a differenza di C, è progettato dal   iniziando a interagire con Lua. Le funzioni di Terra sono di prima classe   Valori Lua creati usando la parola chiave terra. Quando necessario lo sono   Compilato JIT in codice macchina.

Non esiste nulla del genere. Potrebbe essere possibile estendere MetaLua per farlo, ma nessuno lo ha fatto, e AFAIK, non ci sono piani per farlo. Lua è pensato per essere un linguaggio dinamico, se vuoi un linguaggio tipicamente statico, usane uno.

Quello che stai essenzialmente cercando è qualcosa come Java o C #. In tal caso, è possibile utilizzare un progetto come Lua.NET per integrare codice Lua esistente con C #. Esiste anche Kahlua per Java.

Esiste un nuovo documento "Lua tipizzato: un sistema di tipi opzionale per Lua" da PUC-Rio appena pubblicato in Dyla'14. http://dl.acm.org/citation.cfm?id=2617553

Riguarda il "progetto iniziale di Typed Lua, un'estensione facoltativa del linguaggio di scripting Lua". È ancora in corso e il sistema dei tipi è ancora relativamente semplice. Nessuna inferenza di tipo / strumento di verifica del tipo fornito.

Per quanto riguarda il sistema di tipizzazione basato su metalua, Tidal Lock: controllo statico opzionale e inferenza per Lua di Fabien. http://lua-users.org/lists/lua-l /2013-02/msg00403.html.

C'è anche Ravi https://github.com/dibyendumajumdar/ravi

Ravi Programming Language è un derivato di Lua 5.3 con tipizzazione statica opzionale limitata e compilatori JIT basati su LLVM e libgccjit

Mi piace molto programmare in Terra (vedi sopra)

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