什么是计算机编程语言?(What is a computer programming languag

2019-07-03 15:26发布

虽然听起来天真的风险,我在寻找的编程语言的一般概念有了更深的了解问这个问题。 我写这个问题我自己的熏陶人的熏陶。

什么是计算机编程语言的一个有用的定义,什么是它的基本的和必要的组成部分? 什么是区分语言的主要功能(功能,势在必行,声明,面向对象,脚本等)?

一种方式来思考这个问题。 想象一下,你正在寻找一个现代化的台式机或笔记本电脑的硬件。 假设,即C语言或任何变体是不存在的。 你会如何形容别人都使计算机表现和功能来讲我们今天预计个人电脑所需要的东西呢?

切向相关的,这是关于计算机语言,允许其他语言的存在? 例如采取一种脚本语言如JavaScript,Perl或PHP。 我假定这些定义的一部分是,有最有可能在C或C在一定程度上实现++的解释。 是否可以使用JavaScript编写Javascript的一个解释? 这是一个完整的语言要求? 同为Perl,PHP等?

我会很满意,可以查找或进一步研究概念的列表。

Answer 1:

像任何语言,编程语言只是表达和传递思想的交流工具。 在这种情况下,我们把我们的软件应该如何工作成结构化的,有条理的形式,电脑(以及其他人谁知道的语言,在大多数情况下)能看懂的想法。

什么是计算机编程语言的一个有用的定义,什么是它的基本的和必要的组成部分?

我会说一门编程语言的决定性特征如下:该语言编写的事情旨在最终转化为被执行的东西 。 因此,伪代码,虽然可能有一种编程语言的结构和严密性,并不是一个真正的编程语言。 同样,UML可以表达一种抽象的方式很多强大的思想就像一种编程语言可以,但它达不到,因为人们一般不写要执行UML。

你会如何形容别人都使计算机表现和功能来讲我们今天预计个人电脑所需要的东西呢?

即使单词“编程语言”不是我说的组的共享词汇的一部分,我认为这将是明显的是,我们需要一种方式与计算机通讯的其他人。 正如没有人希望汽车在没有外部指令驱动器本身(尚未!)与方向盘和踏板相互作用的形式,没有人能想到的硬件没有被告知做什么工作。 如上所述,编程语言,通过它我们可以作出这样的通信发生的管道。

切向相关的,这是关于计算机语言,允许其他语言的存在?

所有有用的编程语言有一个叫图灵完全产权。 如果图灵完备的集合中的一个语言可以做一些事情,那么任何人都可以; 他们被说成是计算等效

然而,仅仅因为他们是同样“厉害”,并不意味着他们同样好的工作为人类。 这就是为什么很多人愿意牺牲无与伦比的微操你换来的表现力和电源你更高级别的语言得到,像Ruby,Python或C#编写汇编代码得到。

是否可以使用JavaScript编写Javascript的一个解释? 这是一个完整的语言要求? 同为Perl,PHP等?

由于是用C语言编写JavaScript解释,它遵循的是它必须能够使用JavaScript编写JavaScript解释,因为两者都是图灵完备。 然而,再次,注意图灵完备只字未提是多么难做到的东西用一种语言与另 - 只是否有可能开始。 你的JavaScript解释器,里面Javascript的很可能是效率低下的窘况,消耗荒谬的内存量,需要大量的处理能力,并成为一个极其丑陋的黑客。 但是图灵完备性,保证它可以做到的!



Answer 2:

尽管这并不直接回答你的问题,我想起的书呆子的复仇由保罗·格雷厄姆一篇关于编程语言的发展。 这当然是一个有趣的地方开始你的调查。



Answer 3:

没有一个定义,但我认为两者有本质的编程语言开发的两股:

  • 那些从什么机器可以做更多的东西表现力和少绑在机器工作的路上了(大会,FORTRAN,C,C ++,JAVA,...)

  • 那些从计算的一些数学和理论计算机科学概念延续到真机上实现的东西(Lisp的,Prolog的,ML,Haskell中,...)

当然,现实中的图片是不是整齐,和两条链借用最好的想法相互影响。



Answer 4:

提前稍长的咆哮。

计算机语言,其实并不是所有的人类语言的不同。 两者都是用来表达通常理解方面的思想和观念。 在不同的人类语言有语法上的不同,但你可以表达每一种语言相同的事情(这是否使人类语言图灵完整?:))。 一些语言更适合比别人表达某些事情。

例如,虽然在技术上不完全正确的 ,因纽特人的语言似乎很适合用来描述各种雪。 日本以我的经验,非常适合那些表达感情和心灵感谢国家在该领域的大型,简洁的词汇。 德国是被非常精确感谢很大程度上明确的语法相当不错。

不同的编程语言有不同的特色菜,但它们在细节来表达的东西所需要的水平大都不同。 人类和编程语言之间最大的区别是大部分是编程语言缺少很多词汇,并有极少数的“语法”规则。 与图书馆,你可以尽管扩展语言的词汇。

例如:

让我的咖啡。

很容易理解的人,但仅仅是因为我们知道每个单词的意思。

咖啡 :从烘焙和研磨的beanlike热带灌木种子制成的饮料
饮料 :可吞食液体
燕子 :导致或允许继续传承喉咙
... 等等等等

我们知道,通过心脏所有这些定义,但我们必须学习他们在某个时候。

以同样的方式,一台计算机可以“教”到“理解”的话为好。

Coffee::make()->giveTo($me);

这可能是由计算机语言完全有效的表达。 如果计算机“知道”什么Coffeemake()giveTo()表示,如果$me的定义。 它表达了同样的想法的英语句子,只需用一个不同的,更严格的语法。

在不同的环境中,你不得不说略有不同的事情,得到同样的结果。 在日本,例如你可能会这样说:

你可能会被要求做一杯咖啡?
KōhīØtsukuttemoratte莫IIですか?

这将大致翻译为:

if ($Person->isAgreeable('Coffee::make()')) {
    return $Person->return(Coffee::make());
}

同样的想法,同样的结局,但$me是隐含的,如果你不检查isAgreeable首先你可能会得到一个运行时错误。 在计算机术语中,这将是有点类似于Ruby的隐含返回最后一个表达式的结果(“语法特征”),并检查可用内存第一(环境必要性)的行为。

如果你跟一个很慢的人很少的词汇,你可能要解释很多更详细的东西:

去厨房。
你拿一个罐子。
装满水的锅。
...

就像汇编。 :O)

无论如何,问题的关键是,编程语言其实就像一个人的语言的语言。 其语法是问题域(逻辑/数学)和“听众”(计算机)的不同和专业,但他们只是方式运输的思想和理念。

编辑:
关于“优化听者”另一点是,编程语言尽量消除歧义。 该“让我的咖啡”的例子可以从技术上讲,可以理解为“把我变成咖啡”。 一个人能告诉什么意思直观,计算机不能。 因此,在编程语言的一切通常只有一个,一个的意思。 当它不就可以碰到问题时,“ + ”操作符在Javascript中是一个常见的例子。

1 + 1     -> 2
'1' + '1' -> '11'


Answer 5:

请参见“编看作是人类活动。” EWD 117 http://www.cs.utexas.edu/~EWD/transcriptions/EWD01xx/EWD117.html

另请参见http://www.csee.umbc.edu/331/current/notes/01/01introduction.pdf



Answer 6:

人类表达其中:

  • 描述的数学函数
  • 使计算机依次接通和关断


Answer 7:

这个问题是非常广阔的。 我最喜欢的定义是一种编程语言是表达计算的一种手段

  • 恰恰
  • 在高级别
  • 在方面,我们可以推论它们

通过计算我的意思是图灵和教会的意思是:图灵机和演算具有同等的表达能力(这是一个定理),以及教会图灵假说(这是一个猜想)说,大约有没有更强大的计算概念在那里。 换句话说,可以在任何编程语言来表达的各种计算的充其量可以使用图灵机或lambda演算表达的各种程序和一些语言将只能够表达这些计算的一个子集。

计算的定义也包括您的睦邻友好的硬件,这是非常容易使用图灵机和更容易使用的演算,模拟仿真。

计算表达准确的意思是计算机不能扭动了它的义务:如果我们心里有一个特定的计算,我们可以使用一种编程语言强制计算机来执行计算。 (以“实现定义”或“未定义”结构使这项任务变得更加困难。使用这些语言进行编程语言往往愿意接受,也可以不知不觉地解决换一些计算是只有密切相关的,他们心目中的计算。)

在较高的水平表达计算是什么编程汉语语言的全部意义。 一个重要的原因是有这么多不同的编程语言在那里是有思考的问题这么多不同的高级方式。 通常情况下,如果你有一个重要的新类的问题要解决,你可能最好是去创建一个新的编程语言。 例如,Larry Wall的书面建议,解决一类被称为“系统管理”的问题是一个动机为他创造的Perl。

(另一个原因有这么多不同的编程语言在那里是创造一种新的语言是一个很大的乐趣,和任何人都可以学着做吧。)

最后,许多程序员希望的语言, 使得它容易推理程序 。 例如,今天我的学生实现了新的算法,使他的程序运行速度的六倍。 他必须非常仔细地推理C数组的内容,以确保新算法会做旧做同样的工作。 幸运的是,C有对推理程序,例如体面的工具:

  • 在改变a[i]可以在不影响的值a[i-1]

我的学生还应用了推理原则,即是无效的在C:

  • 的序列的总和无符号整数将至少作为序列中的任一整数一样大。

这是不是在C正确的 ,因为总和可能会溢出。 其中一个原因一些程序员喜欢像标准ML语言是在SML,这个推理原则始终是有效的。 广泛使用的语言,可能Haskell有最强的推理原则理查德·伯德已经发展有关方案,以高度的艺术等式推理。


我不会试图解决一切按照你的开放问题切线细节。 但我希望你能得到的东西的答案,旨在提供一个更深入的了解,因为你问起编程语言中的根本性问题的。



Answer 8:

有一件事情有很多“IT”类型忘记的是,有2种类型的计算机编程语言:

  1. 软件编程语言:C,Java和Perl中,COBAL等。

  2. 硬件编程语言:VHDL,Verilog的,系统的Verilog等。



Answer 9:

有趣。

我会说一门编程语言的定义性特征是使基于输入决策的能力。 实际上, ifgoto 。 一切是很多很多的语法糖。 这是催生Brainfuck,这实际上是非常有趣的(尝试)使用的想法。

有些地方的线模糊; 例如,我怀疑人们会考虑XSLT,真正成为一门编程语言,但它是图灵完备。 我甚至已经解决项目欧拉问题的。 (非常,非常缓慢。)

语言的三个主要性能浮现在脑海中:

  1. 它是如何运行的? 是它编译为裸金属(C),编译为大多裸金属与某些运行时查询(C ++),一个JIT虚拟机(Java,.NET)上运行时,字节码解释(Perl的),或纯粹解释(侏儒.. )? 这不评论太多的语言本身,而是讲的代码可以如何便携式是,我可能会想到什么样的速度(因此哪些任务的大类将工作做好),有时是如何灵活的语言。
  2. 它支持哪些范例? 程序? 功能? 与类或函数建立的标准库? 有没有反思? 在那里,理想情况下,对于几乎任何我想做的支持?
  3. 我怎么能代表我的数据? 是否有数组,他们是固定大小与否? 有多容易使用字符串? 是否有内置的结构或哈希? 什么是类型系统是怎样的? 是否有对象? 他们是基于类或基于原型? 一切物体,还是有原语? 我可以从内置的对象继承?

我知道最后一个是一个非常大的潜在回收的问题,但它在我脑海中所有相关。

我想完全从头重建编程语言景观会的工作几乎是它怎么做了第一次:反复。 开始组装,处理器理解直接命令的列表,并与东西有点更容易使用包裹。 重复,直到你满意。

是的,你可以使用JavaScript编写JavaScript解释,或在Python Python解释器(参见:PyPy),或在Javascript Python解释器。 这种语言被称为自托管。 看看Perl 6的; 这一直是其从一开始就主要实现的目标。

最终 ,一切都只是有翻译成机器代码,不一定C.你可以,如果你想要写d或Fortran语言或哈斯克尔或Lisp的。 Ç恰好是一个老的标准。 如果你写的语言美孚编译器能够最终吐出的机器代码,不论以何种方式,那么你可以重写美孚编译器以及跳过中间商。 当然,如果你的语言是纯粹的解释,这可能会导致堆栈溢出...



Answer 10:

作为一个朋友教我的计算机语言,语言是一个世界。 这个世界上,这台机器的通信。 它是世界上实现思想,算法,功能性,莫宁和阿兰描述。 这是上述的科学家建立的数学结构的技术等同。 它与epxressions,也限制的语言。 然而,正如维特根斯坦说:“我的语言的界限意味着我的世界的界限”,总是有局限性,这就是一个如何选择它的语言,更好地适应自己的需要。

这是一个通用的答案......一些想法其实和以下的答案。



文章来源: What is a computer programming language?