Статически типизированный Lua
Я ищу компилятор Lua front-end, который проверяется во время компиляции, но выводит стандартный байт-код Lua 5.1 (который имеет только типы времени выполнения). Мне нужно приличное количество статического синтаксического анализа во время компиляции и необязательного набора текста, чтобы обнаружить тривиальные ошибки раньше, чем во время выполнения. Полученный байт-код должен был бы хорошо играть с существующим байт-кодом Lua, который был скомпилирован со стандартной LoadString().
чтобы быть ясным -- любая разница будет происходить только в байт-компиляции. Во время выполнения байтовый код понятия не имел бы, что на этапе компиляции с ним произошло что-то другое/необычное.
то, что я имею в виду, звучит очень похоже на ActionScript; я бы даже не возражал против компилятора ActionScript, который выводит байтовый код Lua!
кто-нибудь слышал о таком стремлении? Я видел некоторые ссылки на использование MetaLua для этого, но, честно говоря, я недостаточно умен, чтобы сделать головы хвостов их документации
6 ответов
летом 2005 года или около того я работал с невероятно умный студент о проблеме выполнения некоторого вывода типа времени компиляции для Lua, возможно, с помощью аннотаций. Эта задача оказывается невероятно сложной! (Мой студент написал короткую техническую записку, но она не предназначена для общего распространения.)
Если бы я хотел решить проблему, которую вы поставили, с двумя ограничениями, которые он разрешить значительные статические введите проверка и вот это взаимодействие со стандартным байт-кодом, скомпилированным Lua-кодом, Я бы создать новый язык с нуля для удовлетворения этих двух ограничений. Это был бы значительный объем работы, но значительно проще, чем пытаться модернизировать систему типа Lua.
см. это сообщение в блоге 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
Это как раз решение.
в любом случае, не стесняйтесь задать свой вопрос в список рассылки Metalua. Если вы хотите расширить синтаксис Lua, Metalua-первый инструмент для просмотра.
P. S. Пожалуйста никогда не пишите Lua как all-caps!
нет такой вещи. Возможно, для этого можно расширить MetaLua, но никто этого не сделал, и AFAIK, нет никаких планов. Lua предназначен для динамического языка, если вы хотите статически типизированный язык, используйте его.
то, что вы по существу ищете, - это что-то вроде Java или C#. В этом случае вы можете использовать проект типаLua.NET интегрировать существующий код Lua с C#. Существует также Калуа для Java.
этому вопросу шесть лет... но вот новый ответ: http://terralang.org/
Как и C, Terra-это простой, статически типизированный, скомпилированный язык с ручное управление памятью. Но в отличие от C, он разработан из начало взаимодействия с Lua. Функции Terra являются первоклассными Значения Lua, созданные с помощью ключевого слова terra. Когда это необходимо JIT-компиляции в машинный код.
есть новая статья "типизированная Lua: необязательная система типов для Lua" от PUC-Rio, только что опубликованная в Dyla'14. http://dl.acm.org/citation.cfm?id=2617553
речь идет о "начальном дизайне типизированного Lua, необязательно типизированного расширения языка сценариев Lua". Это все еще продолжается, и система типов по-прежнему относительно проста. Нет тип вывода/тип проверки инструмента не предусмотрено.
относительно metalua основанной печатая системы, приливной замок: опционный статическая проверка типа и вывод для Lua от Fabien. http://lua-users.org/lists/lua-l/2013-02/msg00403.html.
появилась Рави https://github.com/dibyendumajumdar/ravi
язык программирования Ravi является производной от Lua 5.3 с ограниченным дополнительным статическим типом и компиляторами JIT на основе LLVM и libgccjit
Мне очень нравится программировать на Терре (см. выше)