Как отладить moonscript?

Я пытался написать какую-то игру, основанную на фреймворке Love2d, скомпилированную из moonscript. Каждый раз, когда я делаю ошибку в своем коде, мое приложение выдает ошибку, и эта ошибка относится к скомпилированному lua-коду, но не к moonscript, поэтому я понятия не имею, где именно происходит эта ошибка. Скажите пожалуйста, какое решение в этой ситуации? Благодарю.

1 ответ

Решение

Отладка является проблемой практически для любой системы компиляции исходного кода. Целевой язык не знает, что существует исходный язык, поэтому он может говорить только о вещах в терминах целевого языка. Чем больше расходятся язык цели и оригинал, тем сложнее будет отладка.

Это большая часть причины, по которой компиляторы C++ больше не компилируются в C.

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

Moonscript поддерживает отображение источника / перезапись ошибок, но поддерживается только при запуске в moon переводчик: https://moonscript.org/reference/command_line.html

Я думаю, что это может быть включено в другой среде lua, но я не совсем уверен, что будет вовлечено.

Это определенно потребует, чтобы moonscript держался за таблицы исходной карты, созданные во время компиляции, поэтому вы не могли использовать moonc; вместо этого используйте moonscript модуль для своевременной компиляции требует модули:

main.lua

-- attempt to require moonscript,
-- for development
pcall(require, 'moonscript')

-- load the main file
require 'init'

init.moon

love.draw = ->
  print "test"

с правильно установленным кодом и moonscript вы можете просто запустить проект, используя love . как обычно. require 'moonscript' звонок изменится require компилировать модули moonscript на лету. Потеря производительности незначительна, и после загрузки всех модулей разницы нет.

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