0

我试图写一些游戏,基于 Love2d 框架,从 moonscript 编译。每次当我在代码中出错时,我的应用程序都会抛出错误,这个错误是指编译的 lua 代码,而不是moonscript,所以我不知道这个错误到底发生在哪里。请告诉我,在这种情况下有什么解决方案?谢谢。

4

2 回答 2

1

对于几乎任何源到源编译系统来说,调试都是一个问题。目的语不知道原语的存在,所以只能用目的语说话。目标语言和原始语言越不同,调试就越困难。

这是 C++ 编译器不再编译为 C 的很大一部分原因。

处理这个问题的唯一真正方法是非常熟悉Moonscript 编译器如何从您的 Moonscript 代码生成 Lua。学习 Lua 并仔细阅读输出 Lua,将其与给定的 Moonscript 进行比较。这将使您更容易将给定的 Lua 错误和源代码映射到创建它的实际 Moonscript 代码。

于 2018-10-14T15:44:10.747 回答
1

moonMoonscript 确实支持源映射/错误重写,但仅在解释器中运行时才支持: 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 模块。性能损失可以忽略不计,加载所有模块后没有区别。

于 2019-01-28T17:30:09.910 回答