为什么编译器不能像我输入代码一样立即编译它?

9

为什么编译器不能在我输入代码时直接编译它呢?

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

这并不像我的3GHz四核怪兽电脑真的很忙于做其他事情。为什么不让它一直编译呢?


2
也许是因为当你拥有它时,有人想要关闭它。https://dev59.com/EUbRa4cB1Zd3GeqP4_L3 - Conrad Frix
你使用的是什么编程语言?现在IDE实时编译也不是什么稀奇的事情了。 - nos
7个回答

6

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

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


只有当它没有被使用时,它才是浪费。 - Rocketmagnet
@Rocketmagnet:它可能会使用户界面变得缓慢,并干扰后台进程(即其他程序)。这不像SQL Server,您可以在内存和CPU使用上设置限制。 - egrunin
@Rocketmagnet:不幸的是,它已经用完了。VB.NET解决方案的大小和复杂性有非常明显的上限。相比之下,我曾经处理过20倍于此的C#解决方案,但仍未达到实际限制。 - Christian Hayter

5
它可以。或者更有用的是,这个问题的答案取决于:
  1. 使用什么语言
  2. 需要多少程度的优化
  3. 如果您暂时输入了一些愚蠢的内容,编译器在您修复之前将其编译并注入到您正在调试的二进制文件中,那么您会有多烦恼。
某些非常强大的优化可能很难即时处理。另一方面,如果不必担心为X86指令分配偏移量,基本编译怎么样?没问题。

3

一些集成开发环境(IDE)在输入代码时会进行编译(或至少检查语法和一些语义)。例如,我认为Eclipse就是这样做的。我认为Visual Basic 6(以及可能更早的版本)也是如此。


就我所知,Eclipse(至少是JDT)在输入时进行语法检查,但实际的编译(即生成类文件)仅在保存文件时完成。(尽管在最近几年中可能已经发生了改变。) - Paŭlo Ebermann

3
不确定你使用的是哪个集成开发环境,但这就是VB.NET的工作方式。

2
我并不精通编译器或代码转换为IL和机器语言的方法等。但即使如此,我也能看到通过更改一个流控制语句可以完全使编译器之前所做的工作无效。通过添加或更改一行代码,整个程序的部分可能会变得过时、未使用或以某种其他方式需要重新评估。
我认为我更愿意将这些CPU周期用于distributed.net或SETI @ Home,而不是在修改代码时不断重新编译它。

0

这完全取决于编程语言。

拥有上下文无关语法的语言可以在输入表达式后预编译一次。然而,这类语言项目的编译速度总是很快的,所以为什么不在代码就绪时快速批量处理工作而不使用 CPU 呢?

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

话虽如此,我完全不是专家。这就是我所知道的全部。


0

即使是像PHP这样的解释性语言,Komodo编辑器也支持此功能。我相信还有许多其他编辑器支持几乎所有语言的此功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接