Performance 空白何时影响性能?

Performance 空白何时影响性能?,performance,compiler-construction,whitespace,interpreter,comments,Performance,Compiler Construction,Whitespace,Interpreter,Comments,这是我一直想知道的事情,所以就这样吧 在编写代码时,我被教导划出行、注释行等。。。提高可读性(我想我们大多数人都是这样)。我显然不认为这是什么问题,但它让我思考,如果编译器/解释器或其他任何东西忽略了所有这些空白和注释部分,这会对其性能产生多大影响 诚然,我对编译器如何操作不太了解——只知道基本概念。然而,我有一个公平的想法,一个人要能够“忽略空白”,首先需要识别它(至少),这需要工作,因此需要时间 然后我想,空白或者极端级别的注释呢?比如说,它们的数百万或数十亿部分 我想我要问的问题是:在什么

这是我一直想知道的事情,所以就这样吧

在编写代码时,我被教导划出行、注释行等。。。提高可读性(我想我们大多数人都是这样)。我显然不认为这是什么问题,但它让我思考,如果编译器/解释器或其他任何东西忽略了所有这些空白和注释部分,这会对其性能产生多大影响


诚然,我对编译器如何操作不太了解——只知道基本概念。然而,我有一个公平的想法,一个人要能够“忽略空白”,首先需要识别它(至少),这需要工作,因此需要时间

然后我想,空白或者极端级别的注释呢?比如说,它们的数百万或数十亿部分

我想我要问的问题是:在什么情况下(即极端级别),被忽略的代码段会影响编译器/解释器生成及时结果的能力,从而影响用户体验


谢谢。

它不会像这个词所暗示的那样影响编译后的数据。但是请不要发表评论,它会影响其他程序员的性能。

源文件中的空白对用户体验没有影响。一旦二进制文件被编译,就是这样。编译器是否花费delta-t更长的时间来解析源代码并不重要,因为有数百万条注释。

请尝试以下方法:

编辑以供评论

使用hello world in方案的简单示例,该方案具有无数条注释行:

netbsd1# ls -l file* 
-rw-r--r--  1 root  wheel        1061 Mar 11 00:01 file.out
-rw-r--r--  1 root  wheel      102041 Mar 11 00:01 file1.out
-rw-r--r--  1 root  wheel    10200041 Mar 11 00:01 file2.out
-rw-r--r--  1 root  wheel  1020000041 Mar 11 00:03 file3.out
netbsd1# for i in file*
> do
> echo $i
> time ./scm $i
> done
file.out
hello world
    0.06s real     0.01s user     0.01s system
file1.out
hello world
    0.03s real     0.01s user     0.02s system
file2.out
hello world
    0.64s real     0.28s user     0.30s system
file3.out
hello world
   61.36s real    11.78s user    41.10s system
netbsd1# 
显然,1GB文件产生了重大影响,考虑到我在这个盒子上只有512M的RAM,这并不一定令人惊讶


此外,这也是解释/编译速度。如果您实际编译了这些文件,那么运行时将完全相同。您可以自己得出定义影响的结论。

当空格编译成机器指令时,空格会影响性能。幸运的是,大多数理智的语言都不会这样做。

编译(和链接)是第一阶段

执行是第二阶段

由于阶段1至少为O(输入长度),您可以期望阶段1所用的时间与输入长度成比例(至少)。 如果文件长度小于10^4行,可能不会给您带来太多麻烦。 如果文件长度为10^12行,则可能需要数年的时间,如果某些内容没有首先中断


但这不会影响第二阶段。影响第二阶段的是程序做了多少工作以及需要做多少工作。

如果你说的是已编译的二进制文件,那么对性能的影响就完全是零——它们只是执行的一系列指令,从这个意义上讲,空白并不是真正存在的概念。如果你说的是解释性语言,那么我想理论上数百万行的空白对性能的影响很小,但不足以引起注意

简而言之,尽管从学术角度来看这是一个有趣的问题,但无论您使用的是编译语言还是解释语言,您都不必担心。始终支持可读性和注释。如果您引用性能的原因是不使用空格或注释,那么未来的代码维护人员将对您进行攻击

视情况而定

在编译语言中,编译可能需要更长的时间,但您可能不在乎,因为这是一次性完成的

在解释语言中,如果解释器将文本保留在内存中,则会浪费加载时间、执行时间和更多内存使用

在JavaScript交付到浏览器的过程中,您不仅需要担心解析时间,还需要将所有这些注释传输到客户端的浏览器。正因为如此,许多人会通过一个微型程序来运行他们的脚本,这个微型程序会提取注释并使用其他技巧来减少代码大小


对于评论严重过多的代码、代码生成器发出的评论、过于热心的修订控制系统和“宗教评论者”,我实际上更担心的是那些可怜的读者/评论者,他们不得不费力地阅读所有这些几乎无用且可能不同步的文本才能找到代码。

哪种语言?空白和注释保证不会对编译语言的性能产生可测量的影响。“诚然,我不太了解编译器是如何操作的……”试着看看优秀的“编译器:原理、技术和工具”()。这本书很古老,但它是关于这个主题的经典文本,写得很好。@Cody Gary,真的,任何语言都可以。另外,谢谢你的链接nithins。这是我想要的答案。威尔,你回答的最后一行是我最感兴趣的。“他们会显著地影响它吗?不太可能。”那么我想提出的一点是,如果不太可能,在什么时候会变得“可能”?感谢对这一点的深入了解。真的很有趣。