Как отладить 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 на лету. Потеря производительности незначительна, и после загрузки всех модулей разницы нет.