Подтвердить что ты не робот

Есть ли какие-нибудь последние Lua-конвертеры или интерпретаторы JavaScript где-нибудь?

Мне нужно найти хороший конвертер Lua для JavaScript; lua2js на luaforge.org устарел (примерно 3 года и выглядит так, как будто он не работает на Lua 5.1), и я еще ничего не нашел в Google.

Есть ли у кого-нибудь опыт работы с другими преобразователями? Он должен работать на Lua 5.1 и предпочтительно быть основан на .NET, но .NET не является обязательным требованием. Также будет работать переводчик javascript lua.

4b9b3361

Ответ 1

Появляется новый претендент: Lua.js https://github.com/mherkender/lua.js

Для некоторых удивительных демонстраций, доказывающих его зрелость, см. https://github.com/ghoulsblade/love-webplayer

Lua.js работает, преобразовывая код Lua непосредственно в ECMAscript (включая JavaScript, ActionScript), что дает ему важное преимущество по сравнению с решениями, которые пытаются реализовать Lua VM в JavaScript.

Ответ 2

Это повторяющийся вопрос в списке Lua, я думаю, из-за поверхностного сходства двух языков.

К сожалению, есть много важных отличий, которые не столь очевидны. Для его работы нужен либо полномасштабный компилятор, предназначенный для JS вместо байт-кода Lua, либо переписывающий Lua VM в JavaScript.

Я не знаю исходных целей Lua2js; но если бы это был просто ограниченный "переводчик", то писать код Lua, предназначенный для перевода, лишил бы большинство (всех?) хороших вещей о Lua. Например, я не думаю, что вы могли бы использовать функцию в качестве ключевого слова таблицы, поскольку в JavaScript ключи - это только строки (и числа? Я не уверен).

Выбор .NET более разумен, можно было бы изменить существующий компилятор, чтобы испускать байт-код CLR вместо стандартного байт-кода Lua. Даже если CLR спроектирован и оптимизирован для других языков, он определенно достаточно общий, чтобы работать очень хорошо. Главным препятствием будет доступность библиотек.

Еще один вариант, который я только что нашел, - это эта статья Роберто Иераульсши и Фабио Маскаренхаса, где они изучают перевод байт-кода LuaVM в байт-код CLR.

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

Ответ 4

ljs имеет рабочую демонстрацию lua vm в javascript. Исходный код можно даже скомпилировать в браузере с помощью интерпретатора lua, написанного в lua.

https://github.com/humbletim/ljs

Ответ 5

Я использовал эту реализацию https://github.com/mherkender/lua.js, о которой упоминалось в предыдущем ответе. Он выполняет либо автономный, либо синтаксический анализ времени загрузки, и я нашел его очень простым в использовании.

Сценарии My Lua вызывали через C-функции, и преобразование этого C-кода в Javascript и его подключение к lua.js было довольно простым.

Ответ 6

посетите http://luajs.org, чтобы увидеть мою работу.

В меню сайта есть демонстрации и тесты.

Это только 35,5K перед сжатием и 12,2K после сжатия. Он может напрямую обращаться к объектам/массивам Javascript. Он обновляется почти каждый день.

Это быстрее, чем lua.vm.js. (Не так быстро из-за метастабильной реализации), и я продолжаю оптимизировать его.

Ответ 7

Перевод на javascript интересен тем, что позволяет использовать javascript на стороне браузера. Мы могли бы взять немного безопасности типа в браузере. Ориентация на javascript как платформу нацелена на одну из самых распространенных платформ - браузеров планеты. GWT делает java2js, но я не уверен, хочу ли я представить GWT только для нескольких страниц в приложении. Я должен думать об этом. Для вашей функции в качестве ключа в таблице должно быть какое-то волшебство. Возможно, просто назначьте уникальное имя каждой функции при компиляции и используйте ее для своего ключа. Вы также можете добавить префикс для всех ваших ключей для проверки типов, и это хороший старт.

Ответ 8

Одним из способов сделать это может быть использование LuaSub и генерация JavaScript вместо вывода Lua. Это можно сделать с разумными усилиями (в настоящее время LuaSub этого не делает).

Места, где JS нельзя согнуть требованиям Lua, можно было обнаружить во время компиляции и вызвать ошибку.

В будущем я собираюсь сделать много JS + SVG, и если на стороне JS появится головная боль, это может попробовать. Если кто-то еще захочет пойти, пожалуйста, сделайте это. Источник LuaSub существует для вас.

Первоначально LuaSub был создан как расширитель синтаксиса для Lua 5.1, чтобы представить простые в использовании концепции (прирост s.a., проверку типа) без совместимости с стандартом Lua или необходимость его исправления. Это похоже на MetaLua в этом (что стало более обычным явлением).

Ответ 9

Я написал частично полный Lua для статического компилятора ECMAscript.

https://github.com/mherkender/lua2js-experiment

Это может не соответствовать вашим потребностям, поскольку в проекте отсутствуют многие ключевые функции, и я не спешу завершить его, потому что это тупик. Подробнее читайте в README.

Несмотря на некоторые из проблем, которые я наблюдал в Интернете, есть только несколько особенностей, связанных с Lua (например, функции fenv или большая часть библиотеки отладки), которые Javascript не может действительно поддерживать. Другие, такие как библиотека файлов, ограничены функциями, доступными для виртуальной машины.

Я также лично попробовал вариант Lua + Emscripten, и хотя он впечатляет, он также очень медленный.