为什么编译器只能在我输入时编译我的代码?

时间:2010-09-14 21:15:06

标签: syntax-highlighting compiler-theory

为什么编译器只能在输入时编译我的代码?

从用户的角度来看,它可以像今天的语法着色一样顺畅。如果您停止输入足够长的时间(可能是几秒钟),编译(不是链接)将完成,并且将使用语法着色等方法识别代码错误。

这不像我的3GHz四核怪物计算机真的忙于做其他事情。为什么不让它一直编译?

8 个答案:

答案 0 :(得分:6)

这正是Visual Studio中的VB.NET代码编辑器所做的。

优点是智能感比C#更准确。缺点是它浪费了大量的处理器时间和内存。 : - (

答案 1 :(得分:5)

它可以。或者,为了更有用,这个问题的答案取决于

  1. 用什么语言
  2. 您需要何种程度的优化
  3. 如果你暂时输入一些愚蠢的东西,你会有多烦恼,编译器会编译并将结果注入你正在调试的二进制文件中,然后才能修复它。
  4. 一些非常强大的优化会让人很烦恼。另一方面,基本编译,如果不需要担心为X86指令分配偏移量?肯定。

答案 2 :(得分:3)

某些IDE在键入时会编译(或至少检查语法和语义)代码。例如,我认为Eclipse就是这样做的。我认为Visual Basic 6(也许是早期版本)就是这样做的。

答案 3 :(得分:3)

请注意确定您正在使用的IDE,但这就是VB.NET的工作原理。

答案 4 :(得分:2)

我不熟悉编译器或代码转换为IL和机器语言等的方法。但即便如此,我也可以看到如何通过一个流控制语句改变我的程序可以完全使编译器无效已经做到了这一点。通过添加或更改单行代码,程序的整个部分可能会过时,未使用或以其他方式需要重新评估。

我认为我宁愿为distributed.net或SETI @ Home保存那些CPU周期,而不是在我改变它时不断重新编译我的代码。

答案 5 :(得分:0)

这完全取决于语言。

具有上下文无关语法的语言“可以”在键入后预编译表达式。但是,编译这样的语言项目总是很快,那么为什么在代码准备就绪时可以快速批处理工作时使用cpu?

其他语言,如臭名昭着的C ++,与上下文有关。在大多数情况下,如果没有在表达式之前读取整个代码,编译器就无法理解表达式。这真的很难解析,这就是为什么我们现在只在编译之前进行错误检查(在VS2010和其他最近的ide中)。在这种情况下,实现您要求的功能似乎是不可能的。

那就是说,我根本不是专家。这就是我所知道的。

答案 6 :(得分:0)

来自JetBrains的

Resharper插件在您输入时使用您的代码进行最小的语法检查。你应该试试看。

http://www.jetbrains.com/resharper/

答案 7 :(得分:0)

即使像PHP这样的解释型语言也支持Komodo编辑器。我相信还有更多的编辑可以支持几乎任何语言。