Pergunta

Estou procurando um compilador de front-end Lua que seja verificado no momento da compilação, mas produz o Standard Lua 5.1 Byte-Code (que possui apenas tipos de tempo de execução). O que eu quero é uma quantidade decente de análises sintáticas estáticas e de tempo de compilação e digitação opcional, para detectar erros triviais mais cedo que o tempo de execução. O código de byte resultante teria que jogar bem com o código Lua byte existente que foi compilado com o padrão de carga padrão ().

Para ficar claro-qualquer diferença ocorreria apenas no tempo de compilação de bytes. Em tempo de execução, o código de bytes não teria idéia de que nada diferente/incomum aconteceu com ele durante a fase de compilação.

O que tenho em mente parece muito com o ActionScript; Eu nem me importaria com um compilador ActionScript que produz o código Lua Byte!

Alguém já ouviu falar de tal esforço? Eu já vi algumas referências ao uso de metalua para fazer isso, mas honestamente não sou brilhante o suficiente para fazer cabeças de caudas de sua documentação

Foi útil?

Solução

No verão de 2005 ou mais ou menos, trabalhei com um estudante de graduação incrivelmente inteligente Sobre o problema de fazer alguma inferência de tipo de tempo de compilação por Lua, possivelmente assistida por anotações. Esse problema acaba sendo incrivelmente difícil! (Meu aluno escreveu uma breve nota técnica, mas não é realmente destinada à circulação geral.)

Se eu quisesse resolver o problema que você colocou, com as restrições gêmeas que Permitir uma verificação significativa do tipo estático e isso interoperar com o código Lua compilado por bytecode padrão, Eu poderia projetar um novo idioma do zero Para satisfazer essas duas restrições. Seria uma quantidade substancial de trabalho, mas significativamente mais fácil do que tentar adaptar um sistema de tipo para Lua.

Outras dicas

Por favor, veja Esta postagem do blog de 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

Isso parece uma solução de tempo de execução.

Enfim, fique à vontade para fazer sua pergunta em Metalua Mailing List. Se você deseja estender a sintaxe do Lua, a Metalua é a primeira ferramenta a serem observadas.

Ps por favor Nunca escreva lua como todas as capas!

Esta pergunta tem seis anos ... mas aqui está uma nova resposta: http://terralang.org/

Como C, a Terra é uma linguagem compilada simples, estaticamente, com gerenciamento manual de memória. Mas, diferentemente do C, ele foi projetado desde o início até a interoperada com a Lua. As funções Terra são os valores de Lua de primeira classe criados usando a palavra-chave TERRA. Quando necessário, eles são compilados JIT para o código da máquina.

Não existe tal coisa. Pode ser possível estender a metalua para fazer isso, mas ninguém fez isso, e Afaik, não há planos de fazê -lo. Lua deve ser uma linguagem dinâmica, se você deseja um idioma tipado estaticamente, use um.

O que você está procurando é algo como Java ou C#. Nesse caso, você pode usar um projeto como Lua.net para integrar o código Lua existente ao C#. Há também Kahlua para java.

Existe um novo artigo "Lua tiped Lua: um sistema de tipo opcional para Lua" da PUC-Rio acabado de publicar em Dyla'14. http://dl.acm.org/citation.cfm?id=2617553

Trata-se de "design inicial do Lua digitado, uma extensão opcionalmente tipada da linguagem de script Lua". Ainda está em andamento, e o sistema de tipos ainda é relativamente simples. Nenhuma ferramenta de verificação de inferência/tipo de tipo fornecida.

Em relação ao sistema de digitação baseado em metalua, trava de maré: verificação opcional do tipo estático e inferência por Lua da Fabien. http://lua-users.org/lists/lua-l/2013-02/msg00403.html.

Há também ravihttps://github.com/dibyendumajumdar/ravi

A linguagem de programação ravi é um derivado de Lua 5.3 com digitação estática opcional limitada e compiladores JIT baseados em LLVM e libgcjit

Eu realmente gosto de programar em terra (veja acima)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top