【问题标题】:the halting problem and background compilation?停机问题和后台编译?
【发布时间】:2010-10-09 19:54:54
【问题描述】:

我正在尝试弄清楚如何为 Lua 编写自动完成算法,但由于与许多脚本语言一样,它缺少静态类型系统,我认为我需要后台编译,但在后台编译期间很容易陷入停顿问题所以我想知道是否有人以前解决过这种事情,解决编译和停止的标准策略是什么?

【问题讨论】:

  • “遇到停机问题”是什么意思?我怀疑您的意思不是“停止问题”通常在计算中所指的......
  • 停止的问题是程序无法被评估,从这个意义上来说它是一样的,编译器=脚本执行所以它是同样的问题,即使是VS的后台编译也可以在写坏时停止C++中的模板代码
  • 我同意混乱——这听起来根本不是“停机问题”。这听起来像是编译器的问题。
  • 好吧,也许它没有直接停止相关,但问题仍然存在。当评估可能永远持续时,您如何为脚本编写后台编译
  • 评价什么?我今天可能很慢,但我真的不明白你的问题是什么。我很想根据我没有看到真正问题的原则投票结束。

标签: scripting autocomplete compilation halting-problem


【解决方案1】:

基于静态文本分析的自动补全听起来比尝试在后台编译更合理。大多数提供自动完成功能的文本编辑器都使用这种方法,尽管它并不准确。

为此,您可以解析文档以查找名称并记录它们所属的范围。当该点在文档中移动时,您的自动完成功能会记录它当前所在的范围,并提供在该点应该可用的名称。

由于默认情况下 LUA 是全局范围,如果您的程序员没有使用“local”关键字来缩小范围,您最终可能会得到一个相当污染的命名空间。

【讨论】:

    【解决方案2】:

    你可以

    • 实际执行代码,看看某个特定的变量代表什么类型的对象,如果耗时过长则中途中断执行
    • 猜猜如果 Lua 有类型,实际变量会有什么类型。这意味着您必须创建一个类型系统,这是一项不平凡的任务(您必须具有足够的限制性以允许对对象模型进行推理,并且足够允许足够多的 Lua 程序实际上符合您的模型)。然而,所有闪亮的新 javascript 引擎都试图这样做,AFAIK,所以你可以在那里寻找指针。
    • 只是从语法中猜测。例如,仅查找相同前缀的 emacs 补全功能在其他 IDE 通常失败(C++ 模板)的情况下就像魅力一样工作

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多