【问题标题】:what is a programming language?什么是编程语言?
【发布时间】:2009-05-15 17:39:31
【问题描述】:

维基百科说:

编程语言是一种机器可读的人工语言,旨在表达可由机器(尤其是计算机)执行的计算。编程语言可用于创建指定机器行为的程序、精确表达算法或作为人类交流的一种模式。

但这是真的吗?今天早上洗澡时我突然想到,编程语言可能只是一组约定,人类和适当安排的编译器都可以解释的东西。如果是这样的话,那么编程语言的这种定义是否具有误导性?如果不是这样,那么编译器和它编译的语言有什么区别?

谢谢!

z.

【问题讨论】:

    标签: programming-languages theory wikipedia


    【解决方案1】:

    编程语言正是那套约定,但我不明白为什么这会使 Wikipedia 条目产生误导,真的。如果它让您感觉更好,您可以将其编辑为如下内容:

    编程语言是一种机器可读的人工语言,旨在表达可由机器(尤其是计算机)执行的计算。编程语言可用于定义程序来指定机器的行为、精确地表达算法或作为人类交流的模式。

    【讨论】:

      【解决方案2】:

      我明白你在说什么,你是对的。将编程语言描述为“旨在表达可以由机器执行的计算的机器可读的人工语言”是不必要的具体。编程语言可以更广泛地概括为任务的既定描述(或“一组约定”),允许一个实体控制另一个实体的行为。我们传统意义上的编程语言只是机器代码和程序员之间的抽象层,是专门为电子计算机设计的。

      编程语言不仅限于传统计算机(请参阅K'NEX Computer),甚至根本不一定限于计算设备。例如,当我对我的狗的行为感到满意时,他会得到款待。当我不高兴时,他什么也得不到。随着时间的推移,狗学会了零食/不零食编程,我可以使用零食来控制他的行为(在一定程度上)。

      【讨论】:

      • 你的狗可能会争辩说他正在控制你的行为。 ㅋㅋㅋ
      【解决方案3】:

      我看不出你问的有什么不同...

      今天早上洗澡时我突然想到,一种编程语言可能只是一组约定,人类和适当安排的编译器都可以解释。

      ... 和维基百科的定义。

      关键是编程语言只是“一种机器可读的人工语言”。

      【讨论】:

      • 是什么让它机器可读,我想这是我的问题。机器可读是什么意思。谢谢!
      • 嗯,机器有一种非常简单的内置编程语言。它由 CPU 解释,由直接映射到 CPU 硬件功能的指令组成。所以这是您计算机上唯一真正“机器可读”的语言。其他编译器或多或少是用于将更抽象的编程语言翻译成这种非常简单的语言的中介工具。
      • 而且它是机器可读的,因为它内置在硬件中。 CPU 是硬连线的,可以在特定位置查找它理解的指令并做出适当的响应。其他的,通过代理,是机器可读的,因为我们已经创建了一个系统来在它们之间进行翻译。
      【解决方案4】:

      就简化为机器代码而言,编译器确实可以作为一种语言的有效规范 - 但是,由于通常很难通过阅读编译器的源代码来理解一种语言,因此人们通常会从以下方面考虑编程语言编译器实现的抽象处理模型。这种抽象模型是指编程语言时的含义。

      也就是说,确实有许多语言(您好,PHP!),其中编译器是现有语言的唯一规范。随着编译器错误的修复或引入,这些语言往往会发生不可预测的变化。

      【讨论】:

      • 编译器也可能有错误或有目的的遗漏和更改;无法保证任何编译器实际上是 100% 忠实地表示一种语言(假设语言设计者已经在其他地方创建了正式的规范。)
      • 然而,它是 它实现的语言的 100% 忠实表示,这可能与程序员心目中的语言不等价。
      【解决方案5】:

      编程语言是一个抽象层,有助于使程序员不必用电信号与计算机交谈。该语言的创建者在创建结构(语言)或标准(语法、共轭等)方面做了所有艰苦的工作,然后编译器可以根据计算机理解的术语对其进行解释。

      【讨论】:

        【解决方案6】:

        所有编程语言实际上只不过是用于机器代码或操作处理实体的寄存器和内存的领域特定语言。

        【讨论】:

          【解决方案7】:

          这可能是对编程语言真正含义的真正解释:

          第 1 步:考虑一种语言及其语法,它是一组规则,用于使用该语言生成语法上有效的语句。例如,一种名为 GRID 的语言将块 {0,1} 作为其字母表和语法规则,以确保每个 GRID 语句的长度和高度都相等。

          第 2 步(程序定义):到目前为止,GRID 是无用的。我敢于将任何有效的 GRID 声明都视为数据。我们需要向 GRID 添加其他内容:后继函数。所以 GRID={语法、字母表、后继函数}。为了明确这一点,让我们使用“生命游戏”的规则作为后继函数。

          第 3 步:生命游戏实际上是图灵完备的,因此 GRID={Grammar, alphabet, successor function = GOL} 可以执行任何可计算的计算。

          编程语言不过是具有后继功能的语言。评估语言(程序)的有效语句的环境除了遵循那些后继功能之外什么都不做。例如,变量是后继函数 = (STAY THE SAME)

          计算机只是非常快速的环境;)

          【讨论】:

            【解决方案8】:

            维基百科的定义可能断章取义。一方面,只有用机器代码编写的程序才是机器可读的。否则,您需要一个编译器将 C++、Java 甚至汇编代码转换为机器代码,以便计算机可以执行您的指令。除非您包含只有人类可读的 cmets,或者除非您在程序范围内严格讨论某个主题,否则编程不足以进行人类交流。

            【讨论】:

              猜你喜欢
              • 2014-06-07
              • 1970-01-01
              • 2022-12-10
              • 2018-08-27
              • 2011-02-09
              • 1970-01-01
              • 1970-01-01
              • 2011-03-20
              • 1970-01-01
              相关资源
              最近更新 更多