我试图写一些游戏,基于 Love2d 框架,从 moonscript 编译。每次当我在代码中出错时,我的应用程序都会抛出错误,这个错误是指编译的 lua 代码,而不是moonscript,所以我不知道这个错误到底发生在哪里。请告诉我,在这种情况下有什么解决方案?谢谢。
2 回答
对于几乎任何源到源编译系统来说,调试都是一个问题。目的语不知道原语的存在,所以只能用目的语说话。目标语言和原始语言越不同,调试就越困难。
这是 C++ 编译器不再编译为 C 的很大一部分原因。
处理这个问题的唯一真正方法是非常熟悉Moonscript 编译器如何从您的 Moonscript 代码生成 Lua。学习 Lua 并仔细阅读输出 Lua,将其与给定的 Moonscript 进行比较。这将使您更容易将给定的 Lua 错误和源代码映射到创建它的实际 Moonscript 代码。
moon
Moonscript 确实支持源映射/错误重写,但仅在解释器中运行时才支持: https ://moonscript.org/reference/command_line.html#error_rewriting
我认为它可以在另一个 lua 环境中启用,但我不完全确定会涉及什么。
它肯定需要 moonscript 保留在编译期间创建的源映射表,因此您不能使用moonc
; 而是使用该moonscript
模块来即时编译需要的模块:
主程序.lua
-- attempt to require moonscript,
-- for development
pcall(require, 'moonscript')
-- load the main file
require 'init'
初始化月亮
love.draw = ->
print "test"
正确安装此代码和moonscript,您可以love .
正常运行项目。该require 'moonscript'
调用将更改为require
即时编译 moonscript 模块。性能损失可以忽略不计,加载所有模块后没有区别。