维基百科说:
编程语言是一种机器可读的人工语言,旨在表达可由机器(尤其是计算机)执行的计算。编程语言可用于创建指定机器行为的程序、精确表达算法或作为人类交流的一种模式。
但这是真的吗?今天早上洗澡的时候我突然想到,一种编程语言可能只是一组约定,人类和适当安排的编译器都可以解释的东西。如果是这样的话,那么编程语言的这种定义是否具有误导性?如果不是这种情况,那么编译器和它编译的语言有什么区别?
谢谢!
z。
维基百科说:
编程语言是一种机器可读的人工语言,旨在表达可由机器(尤其是计算机)执行的计算。编程语言可用于创建指定机器行为的程序、精确表达算法或作为人类交流的一种模式。
但这是真的吗?今天早上洗澡的时候我突然想到,一种编程语言可能只是一组约定,人类和适当安排的编译器都可以解释的东西。如果是这样的话,那么编程语言的这种定义是否具有误导性?如果不是这种情况,那么编译器和它编译的语言有什么区别?
谢谢!
z。
编程语言正是那套约定,但我不明白为什么这会使维基百科条目产生误导,真的。如果它让您感觉更好,您可以将其编辑为类似以下内容:
编程语言是一种机器可读的人工语言,旨在表达可由机器(尤其是计算机)执行的计算。编程语言可用于定义指定机器行为的程序,精确表达算法,或作为人类交流的模式。
我看不出你问的有什么不同...
今天早上洗澡的时候我突然想到,一种编程语言可能只是一组约定,人类和适当安排的编译器都可以解释的东西。
...和维基百科的定义。
关键是编程语言只是“一种机器可读的人工语言”。
我明白你在说什么,你是对的。将编程语言描述为“旨在表达可以由机器执行的计算的机器可读人工语言”是不必要的具体。编程语言可以更广泛地概括为任务的既定描述(或“一组约定”),允许一个实体控制另一个实体的行为。我们传统上定义的编程语言只是机器代码和程序员之间的抽象层,是专门为电子计算机设计的。
编程语言不仅限于传统计算机(请参阅K'NEX 计算机),甚至根本不必限于计算设备。例如,当我对我的狗的行为感到满意时,他会得到款待。当我不高兴时,他什么也得不到。随着时间的推移,狗学会了零食/不零食编程,我可以使用零食来控制他的行为(在一定程度上)。
就简化为机器代码而言,编译器确实可以作为一种语言的有效规范 - 但是,由于通常很难通过阅读编译器的源代码来理解一种语言,因此人们通常会根据抽象处理模型来考虑编程语言编译器实现的。这种抽象模型是指编程语言时的含义。
也就是说,确实有许多语言(嗨,PHP!)其中编译器是现有语言的唯一规范。随着编译器错误的修复或引入,这些语言往往会发生不可预测的变化。
编程语言是一个抽象层,有助于使程序员不必用电信号与计算机交谈。该语言的创建者在创建结构(语言)或标准(语法、共轭等)方面做了所有艰苦的工作,然后编译器可以用计算机理解的术语来解释这些结构(语言)或标准。
所有编程语言实际上只不过是用于机器代码或操作处理实体的寄存器和内存的领域特定语言。
这可能是对编程语言真正含义的真正解释:
第 1 步:考虑一种语言及其语法,这是一组使用该语言制作语法有效语句的规则。例如,一种名为 GRID 的语言将块 {0,1} 作为其字母表和语法规则,以确保每个 GRID 语句的长度和高度都相等。
第 2 步(程序定义):到目前为止,GRID 是无用的。我敢于将任何有效的 GRID 声明都视为数据。我们需要向 GRID 添加其他内容:后继函数。所以 GRID={语法、字母表、后继函数}。为了明确这一点,让我们使用“生命游戏”的规则作为后继函数。
第 3 步:生命游戏实际上是图灵完备的,因此 GRID={Grammar, alphabet, successor function = GOL} 可以执行任何可计算的计算。
编程语言不过是具有后继功能的语言。评估语言(程序)的有效语句的环境除了遵循那些后继函数之外什么都不做。例如,变量是其后继函数 =(保持不变)的事物
计算机只是非常快速的环境;)
维基百科的定义可能断章取义。一方面,只有用机器代码编写的程序才是机器可读的。否则,您需要一个编译器将 C++、Java 甚至汇编代码转换为机器代码,以便计算机能够执行您的指令。除非您包含只有人类可读的注释,或者除非您在程序范围内严格讨论某个主题,否则编程不足以进行人类交流。