Вопрос

Я ищу интерфейсный компилятор Lua, который проверяется на тип во время компиляции, но выводит стандартный байтовый код Lua 5.1 (который имеет только типы во время выполнения).Что мне нужно, так это приличный объем статического синтаксического анализа во время компиляции и необязательный ввод текста, чтобы обнаруживать тривиальные ошибки раньше, чем во время выполнения.Результирующий байт-код должен был бы хорошо сочетаться с существующим байт-кодом Lua, который был скомпилирован со стандартной LoadString().

Чтобы было ясно - любая разница будет возникать только во время компиляции байтов.Во время выполнения байт-код не будет иметь ни малейшего представления о том, что с ним произошло что-то другое / необычное на этапе компиляции.

То, что я имею в виду, очень похоже на ActionScript;Я бы даже не возражал против компилятора ActionScript, который выводит байтовый код Lua!

Кто-нибудь слышал о такой попытке?Я видел несколько ссылок на использование MetaLua для этого, но, честно говоря, я недостаточно умен, чтобы разобраться в их документации

Это было полезно?

Решение

Летом 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 заглавными буквами!

Этому вопросу шесть лет ... но вот новый ответ: http://terralang.org/

  

Как и C, Terra - это простой, статически типизированный, скомпилированный язык с   ручное управление памятью. Но в отличие от C, он разработан из   начинает взаимодействовать с Луа. Терра функции первоклассные   Значения Lua, созданные с помощью ключевого слова terra. При необходимости они   JIT-компилируется в машинный код.

Нет такой вещи. Может быть возможно расширить MetaLua, чтобы сделать это, но никто не сделал этого, и AFAIK, нет никаких планов сделать это. Lua должен быть динамическим языком, если вы хотите использовать статически типизированный язык, используйте его.

По сути, вы ищете что-то вроде Java или C #. В этом случае вы можете использовать такой проект, как Lua.NET для интеграции существующий код Lua с C #. Существует также Kahlua для Java.

Появилась новая статья "Typed Lua: дополнительная система типов для Lua" из PUC-Rio, только что опубликованного в Dyla'14. http://dl.acm.org/citation.cfm?id=2617553

Речь идет о «первоначальном дизайне Typed Lua, опционально типизированного расширения языка сценариев Lua». Это все еще в процессе, и система типов все еще относительно проста. Никакой вывод типа / инструмент проверки типов не предоставляется.

Что касается системы набора текста на основе metalua, Tidal Lock: дополнительная статическая проверка типов и вывод для 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

Мне очень нравится программировать на Terra (см. выше)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top