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

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
31
0
23 574
9

Ответы 9

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

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

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

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

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

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

Интересно, какова настоящая цель людей? Они знают Lua и хотят писать JavaScript, не изучая JavaScript? У них есть большое приложение, написанное на Lua, и вы хотите перенести его в веб-приложение с минимальной работой? Мне все это не кажется очень вероятным

davr 08.10.2008 20:15

Интервью на computerworld.com.au/index.php/id;1028768484 говорит о том, что Lua.NET - это недавний и продолжающийся проект.

Mike G. 09.10.2008 23:22

Приветствую, в javascript можно использовать функцию как ключ таблицы. Ваше мнение кажется необоснованным.

tomdemuyt 06.07.2010 19:43

Я только что пробовал использовать Firefox 3.6.6 и Rhino 1.7r2. любое нестроковое значение (функции, объекты, логические значения, четные числа), которое я использую в качестве ключа, принимается и, казалось, работало, пока я не сделал for (k in t) {console.info(k,typeof(k));}, это все строки. В большинстве случаев это не имеет значения, если оно согласовано; но в Lua все по-другому (в качестве ключа можно использовать любое значение, кроме nil), и от этого зависит много кода. если вам нужен «переводчик» Lua-> JS, вы должны учитывать эти вещи, иначе это будет просто JS с синтаксисом Lua.

Javier 06.07.2010 23:43

Чтобы быть более точным, в Javascript значения преобразуются в их строковые представления перед использованием в качестве ключей. Это может вызвать проблемы, поскольку очень легко привести к конфликту вещей: например, и число 1, и строка «1» имеют одинаковое строковое представление и, по умолчанию, все объекты сериализуются в одну и ту же строку «[object Object]». Еще одно различие между таблицами JS и таблицами Lua заключается в том, что, хотя оба дают undefined / nil при чтении неиспользуемых ключей, в Javascript установка ключа на undefined не удалит его из объекта (он все равно будет итеративным, а hasOwnProperty вернет true).

hugomg 28.05.2012 18:47

@davr Если вы используете Lua для других частей своего стека - например, для написания сценариев Nginx или Redis - идея использовать его для внешнего интерфейса довольно привлекательна.

solidsnack 29.01.2013 20:34

Ссылка lua.inf.puc-rio.br/luanet/lua2il_jucs.pdf - 404 по состоянию на 2016 год.

Arto Bendiken 25.06.2016 01:47

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

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

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

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

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

Emscripten содержит интерпретатор Lua, преобразованный в JavaScript. Вы можете попробуйте в своем браузере. Однако размер составляет 1,5 МБ.

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

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

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

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

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

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

https://github.com/humbletim/ljs

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

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

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

@Akavel попытался отредактировать этот ответ, чтобы добавить некоторую информацию. Правка не прошла процесс утверждения, но, тем не менее, я думаю, что она полезна. Я цитирую: «Некоторые потрясающие демонстрации, подтверждающие его зрелость, см .: github.com/ghoulsblade/love-webplayer Lua.js работает путем преобразования кода Lua непосредственно в ECMAscript (включая JavaScript, ActionScript), что дает ему важное преимущество в скорости по сравнению с решениями, которые пытаются реализовать виртуальную машину Lua в JavaScript ".

Breton 04.03.2013 08:11

я подумал, что вы, вероятно, забыли об этом, поэтому я надеюсь, что вы вернетесь и обновите это

SheetJS 27.09.2013 00:31

@Breton Я просто получаю синий фон для всех демок? ghoulsblade.schattenkind.net/love-webplayer

user310291 10.10.2020 07:47

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

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

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

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

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

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

Ссылка на luajs.org больше не работает.

Chris Sprance 06.11.2017 22:23

Невозможно получить доступ к сайту без разрешения уведомлений. Мне кажется подозрительным.

Shawn Dotey 03.02.2019 01:53

Другие вопросы по теме