Статически типизированный Lua - PullRequest
16 голосов
/ 02 мая 2009

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

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

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

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

Ответы [ 6 ]

14 голосов
/ 02 мая 2009

Летом 2005 года или около того я работал с невероятно умным студентом бакалавриата над проблемой создания некоторого логического вывода во время компиляции для Lua, возможно, с помощью аннотаций. Эта проблема оказывается невероятно сложной! (Мой студент написал короткую техническую заметку, но на самом деле она не предназначена для общего распространения.)

Если бы я хотел решить поставленную вами проблему, с учетом ограничений двойника, что он допускает значительную статическую проверку типов и что он взаимодействует со стандартным Lua-кодом, скомпилированным байт-кодом Я бы разработал новый язык с нуля , чтобы удовлетворить эти два ограничения. Это будет значительный объем работы, но значительно проще, чем пытаться переоборудовать систему типов в Lua.

6 голосов
/ 02 мая 2009

Пожалуйста, смотрите это сообщение в блоге 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 как заглавные буквы !

5 голосов
/ 26 октября 2015

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

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

4 голосов
/ 02 мая 2009

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

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

3 голосов
/ 04 июля 2014

В Dyla'14 вышла новая статья «Типизированная Lua: дополнительная система типов для Lua» от PUC-Rio. http://dl.acm.org/citation.cfm?id=2617553

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

Что касается системы печати на основе metalua, Tidal Lock: дополнительная статическая проверка типов и вывод для Lua от Fabien. http://lua -users.org / списки / Lua-л / 2013-02 / msg00403.html .

2 голосов
/ 03 декабря 2016

Есть также Рави https://github.com/dibyendumajumdar/ravi

Язык программирования Ravi является производным от Lua 5.3 с ограниченной опциональной статической типизацией и JIT-компиляторами на основе LLVM и libgccjit

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

...