Programming languages 什么是计算机编程语言?

Programming languages 什么是计算机编程语言?,programming-languages,Programming Languages,冒着听起来幼稚的风险,我提出这个问题是为了更深入地理解编程语言的概念。我写这个问题是为了启发自己和他人 什么是计算机编程语言的有用定义,它的基本和必要组件是什么?区分语言(函数式、命令式、声明式、面向对象、脚本等)的关键特性是什么 思考这个问题的一种方式。想象一下,你正在看一台现代台式机或笔记本电脑的硬件。假设C语言或其任何变体不存在。您如何向其他人描述使计算机具有表现力和功能性所需的所有东西,以及我们今天对个人计算机的期望 与此相关的是,计算机语言允许其他语言存在的原因是什么?例如,以Java

冒着听起来幼稚的风险,我提出这个问题是为了更深入地理解编程语言的概念。我写这个问题是为了启发自己和他人

什么是计算机编程语言的有用定义,它的基本和必要组件是什么?区分语言(函数式、命令式、声明式、面向对象、脚本等)的关键特性是什么

思考这个问题的一种方式。想象一下,你正在看一台现代台式机或笔记本电脑的硬件。假设C语言或其任何变体不存在。您如何向其他人描述使计算机具有表现力和功能性所需的所有东西,以及我们今天对个人计算机的期望

与此相关的是,计算机语言允许其他语言存在的原因是什么?例如,以Javascript、Perl或PHP等脚本语言为例。我认为这些定义的一部分是在C或C++中有可能在某种程度上实现了一个解释程序。可以用Javascript编写Javascript的解释器吗?这是完整语言的要求吗?Perl、PHP等也一样吗


我对一系列可以进一步查找或研究的概念感到满意。

虽然这并不能直接回答您的问题,但我想起了Paul Graham关于编程语言演变的文章。这当然是一个有趣的地方开始你的研究。

像任何语言一样,编程语言只是一种表达和传达思想的交流工具。在这种情况下,我们正在将软件应该如何工作的想法转化为计算机(以及其他懂这种语言的人,在大多数情况下)可以阅读和理解的结构化和有条理的形式

什么是计算机编程语言的有用定义,它的基本和必要组件是什么

我想说,编程语言的定义特征如下:用该语言编写的东西最终会被转换成执行的东西。因此,伪代码虽然可能具有编程语言的结构和严格性,但实际上并不是一种编程语言。类似地,UML可以像编程语言一样以抽象的方式表达许多强大的思想,但它的不足之处在于人们通常不会编写UML来执行

您如何向其他人描述使计算机具有表现力和功能性所需的所有东西,以及我们今天对个人计算机的期望

即使“编程语言”这个词不是我所交谈的小组的共同词汇的一部分,我想其他人也会明白,我们需要一种与计算机交流的方式。正如没有人期望汽车在没有与方向盘和踏板交互的外部指令的情况下自动驾驶一样,没有人能够期望硬件在没有被告知如何操作的情况下正常工作。如上所述,编程语言是我们实现通信的管道

与此相关的是,计算机语言允许其他语言存在的原因是什么

所有有用的编程语言都有一个称为图灵完整性的属性。如果图灵完备集中的一种语言可以做一些事情,那么它们中的任何一种都可以;据说它们在计算上是等价的

然而,仅仅因为它们同样“强大”,并不意味着它们对人类同样友好。这就是为什么许多人愿意牺牲您从编写汇编代码中获得的无与伦比的微观管理,以换取您使用更高级语言(如Ruby、Python或C#)获得的表达能力和能力

可以用Javascript编写Javascript的解释器吗?这是完整语言的要求吗?Perl、PHP等也一样吗

由于有一个用C编写的Javascript解释器,因此必须能够用Javascript编写Javascript解释器,因为两者都是图灵完整的。然而,请再次注意,图灵完整性并没有说明用一种语言做某事与用另一种语言做某事有多困难——只是说明是否可以从一开始就做。Javascript中的Javascript解释器可能效率极低,占用大量内存,需要巨大的处理能力,而且是一个非常丑陋的黑客。但是图灵的完整性保证了它是可以做到的

参见“编程被视为人类活动”,EWD 117。

另请参见有趣的

我想说编程语言的定义特征是基于输入做出决策的能力。有效地,
if
goto
。其他一切都是很多很多的语法糖。正是这个想法催生了Brainfuck,它实际上非常有趣

有些地方线条模糊;例如,我怀疑人们会认为XSLT真的是一种编程语言,但它是图灵完成的。我甚至用它解决了一个项目的问题。(非常非常慢。)

我想到了语言的三个主要特性:

  • 它是如何运行的?它是编译成裸机(C)、通过一些运行时查找编译成裸机(C++)、运行在JIT虚拟机(Java、.NET)、字节码解释(Perl)还是纯解释(uhh…)上?这并不是对语言本身的太多评论,而是涉及到代码的可移植性、我可能期望的速度(以及什么样的任务类可以很好地工作)以及语言的灵活性
  • 它支持什么样的范例?程序性的?功能的标准库是用类还是函数构建的?有反射吗?理想情况下,是否有支持
    Coffee::make()->giveTo($me);
    
    if ($Person->isAgreeable('Coffee::make()')) {
        return $Person->return(Coffee::make());
    }
    
    1 + 1     -> 2
    '1' + '1' -> '11'