所有编程语言都是按顺序读取的吗?

2024-05-20

我似乎无法找到对此的直接答案。使用多个搜索引擎给我的结果非常模糊,或者只回答了一半的问题。

那么,详细来说,当您编写一个程序并对其进行编译/解释时,计算机是按时间顺序顺序读取每一行还是默认情况下跳过?

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(使用前将#替换为@)

所有编程语言都是按顺序读取的吗? 的相关文章

  • GPU的编程语言有哪些

    我读过一篇文章 指出 GPU 是超级计算的未来 我想知道在GPU上编程使用什么编程语言 OpenCL 是开放式跨平台解决方案 可在 GPU 和 CPU 上运行 另一个是 NVIDIA 为其 GPU 构建的 CUDA HLSL Cg 等少数几
  • 将 dll 注册到 GAC 或从 ASP.NET 中的 bin 文件夹引用它们是否更好

    如果答案是 视情况而定 您能否提供一个简短的解释 GAC 旨在包含以下组件跨多个应用程序共享 如果是这种情况 您应该对程序集进行强命名并向 GAC 注册 如果不是 请将程序集保留为私有程序集并将其作为项目 dll 引用进行引用 PS 没有真
  • 如何制作一个makefile只用于编译一些java文件?

    我有三个java文件 名为A java B java C java A将创建对象B B将创建对象C 但我以前从未构建过makefile 有谁可以帮我构建一个 makefile 来编译这三个 java 文件吗 我应该使用什么工具来制作 mak
  • 如何使用 javascript 更改文件扩展名

    有谁知道在 Javascript 中更改文件扩展名的简单方法吗 例如 我有一个带有 first docx 的变量 但我需要将其更改为 first html 这将改变字符串包含文件名 let file first docx file file
  • 可以重复应用并产生相同结果的数据库操作吗?

    我现在一片空白 或者像有些人说的那样 正在经历一个高级时刻 我知道这个概念有一个正式的定义和名称 其中在数据库中运行的数据库操作 存储过程 如果重复运行将产生相同的结果 它属于数学家的自反 对称 传递等类型 您的意思是 确定性 吗 如果使用
  • 在 MacOS 10.9 (Mavericks) 上构建 Boost.Python 应用程序

    我升级到 Mavericks 经过多次故障排除后现在无法构建我的应用程序 在链接过程中 我收到错误 Undefined symbols for architecture x86 64 boost python objects functio
  • 如何在不执行Python脚本的情况下检查它的语法?

    我以前用过perl c programfile检查 Perl 程序的语法 然后退出而不执行它 对于 Python 脚本 是否有等效的方法来执行此操作 您可以通过编译来检查语法 python m py compile script py
  • 解释型语言的优点和缺点是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我现在正在学习Perl 解释型语言的优点和缺点是什么 公然抄袭维基百科 http en wikipedia org wiki Inte
  • CC、gcc 和 g++ 之间的区别?

    CC gcc g 这3个编译器在编译时有什么区别 汇编语言中的 C 和 C 代码 代码生成 可用库 语言特性等 这个问题的答案是特定于平台的 例如 Linux 上发生的情况与 Solaris 上发生的情况不同 最简单的部分 因为它不是特定于
  • “单体”是什么意思?

    我在课堂上看到过它 我怀疑这意味着该类可以被分解为逻辑子单元 但我找不到一个好的定义 你能举一些例子吗 谢谢您的帮助 编辑 我喜欢聪明的回复 但我显然指的是软件上下文中的 整体 我了解巨石 巨石 支石墓以及所有与石头相关的背景 哎呀 我的国
  • PKG_CONFIG_PATH变量,编译RRDtool时如何设置LDFLAGS和CPPFLAGS

    任务是在 Red Hat 衍生版本上安装 rrdtool 并且禁止使用 yum 或软件包 将rrdtool的所有依赖项从源代码编译为 单独的目录 应用程序 运行 sepatare folder 所以基本上我所看到的都是这样的 ls cair
  • CodeDomProvider.CompileAssemblyFromSource - 找不到 Roslyn (csc.exe)

    我们最近从旧的 CodeDomProvider 升级到名为 Microsoft CodeDom Providers DotNetCompilerPlatform 的新 Roslyn CodeDomProvider 它工作正常 但它在错误的位
  • Maven编译错误:包不存在

    我正在尝试向现有企业项目添加 Maven 支持 这是一个多模块项目 前 2 个模块编译和打包没有问题 但我面临编译错误 我尝试在多个模块中使用相同的依赖项 我的结构是 gt parent gt pom xml gt module 1 gt
  • 定点数与浮点数

    我只是无法理解定点数和浮点数 因为在谷歌上很难阅读它们的定义 但我读过的文章都没有对它们的真正含义提供足够简单的解释 我可以通过例子得到一个简单的定义吗 定点数具有为整数部分 小数点左边的部分 保留的特定位数 或位数 和为小数部分 小数点右
  • h5py安装后出现错误[重复]

    这个问题在这里已经有答案了 可能的重复 在 OS X 上安装 h5py https stackoverflow com questions 6988010 installing h5py on os x 我正在尝试让 h5py 在我的 OS
  • 编译器之间的重载分辨率不同

    我构建了以下我的问题的最小示例 include
  • 学习在 Xcode 中编译 C++

    我已经开始在学校广泛使用 C 现在我的程序已经达到了拥有超过 1 个文件 即头文件 驱动程序 实现文件 的地步 我对软件开发了解不够 无法通过查看苹果的指南来理解或掌握如何设置构建过程 有人可以指导我如何在 xcode 中编译一个带有头文件
  • Google Foobar power_hungry

    Locked 有对该问题内容的争议 help locked posts此时正在解决 目前不接受新的答案或互动 您好 我需要帮助解决我的 Google foobar 问题之一 这是我到目前为止所得到的 package com google c
  • 使困惑。 OO 本质上是命令式的还是多范式的?

    当我通读 stackoverflow 的答案和问题时 我得到的印象是 OO 被划分为本质上是命令式的 但是 OO 不就是一种将代码和数据划分为现实世界对象的方法吗 如果是这样 为什么要放弃其他较低级别的范例来在这样的平台上工作 IOW 默认
  • ASP.net MVC 项目无法在 IIS 上编译

    我以前只是将 ASP NET 网站上传到实时服务器 IIS 会自动编译它们 但是 当我对 asp net MVC 项目执行相同操作时 我只是收到错误 并且我需要在上传项目之前发布 构建 项目 注意1 我使用的是VWD 2008 Expres

随机推荐