我似乎无法找到对此的直接答案。使用多个搜索引擎给我的结果非常模糊,或者只回答了一半的问题。
那么,详细来说,当您编写一个程序并对其进行编译/解释时,计算机是按时间顺序顺序读取每一行还是默认情况下跳过?
Example:
使用 C 风格的源代码,因为这是我首先想到的。
printf("I'm the first line of your program! Yay!");
printf("I'm the second, woo!");
printf("And I'm the third, yay!");
上面可以看到有三行代码,运行时会按顺序运行并按顺序输出到控制台。
我假设,除非被告知跳转到源文件中代码的特定部分,否则它将按顺序读取每行代码。那么这就是程序在计算机中的解释方式吗?所有编程语言都是这样编译/解释的吗?程序读取语言的方式是否特定?
我知道这是关于编程语言和计算机科学的基本问题,但我想要一些澄清,并且没有任何具体的答案。
我可能在搜索中错误地表达了问题 - 这可能就是为什么我没有找到任何东西。谢谢!
答案很大程度上取决于一些先决条件。
首先,存在所谓的“脚本”编程语言。
这个名字本身就概括了这种方法口译员这样的
执行用该语言编写的程序时,语言需要:因为它们
从字面上看是scripts,它们按顺序读取并执行
口译员读出完整的陈述。
换句话说,因为脚本应该被读取
从上到下,各种东西的定义必须来
早于使用该物品的地方。
与那些相反,compiled语言通常给予更多的自由
给程序员。例如,在现代语言中,经常
可以在使用类型的“下方”以文本方式声明类型
声明/定义这些类型或其他类型的变量
这些类型。
但据说“脚本”之间存在更深刻的区别
和编译语言:对于后者,文件作为媒介更多陈述性的而不是至关重要的。
例如,采取Go https://golang.org。
Go 程序的所有源代码都被组织成“包”。
包由位于特定目录中的所有源文件组成
并有一个共同的包声明。
现在位于特定包的文件中的任何代码片段
能够使用任何其他symbol(包级变量、类型或
该包的函数)——无论该符号是在哪个文件中定义的,以及在该文件中的哪个位置定义的。
这就是“大体上”的运作方式。
如果您对编译器精确地了解如何使用源文件,然后我想这些天他们倾向于“吞咽”然后大量进入记忆
或者以流式传输的方式阅读它们——边读边解析它们的内容。
这根本不重要,因为编译器不会以某种方式直接
转换源代码文件中写入的内容,而不是构建
从这些内容中提取出所谓的抽象语法树,然后
将这些 AST 转换为目标机器(或 VM)代码,而这本身,
通常分几个阶段发生——所有阶段都使用自己方便的方式
中间表示。
TL;DR
编译器如何读取文本文件的问题并不重要:
这是一个无趣的微小实现细节。 ;-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)