语言

1、语言

语言是人类最重要的交际工具,是人类的思维工具。 语言可以起到表情达意、交流思想、消除误会、拉近距离,增进了解的作用。

  • 语言是人类最重要的交际工具。
  • 语言是人类的思维工具。
  • 语言是一定社会的产物,是社会特有的一种现象,社会以外无所谓语言,没有社会,也就没有语言,语言的发展受社会制约,语言随着社会的产生而产生,随着社会的发展而发展,随着社会的死亡而死亡。
  • 语言是社会成员相互联系的桥梁和纽带,是相互沟通和表达思想的工具,社会须臾也离不开语言,没有语言,社会就会崩溃,不复存在。
  • 语言是一种纽带。任何一种语言,除了表情达意的功能,还能起到消除误会、拉近距离、增进相互了解的作用。
  • 语言还是一扇窗口。不同国家、不同民族的人,通过互相学习语言,不仅能够走进彼此的心灵,而且能掌握更多的知识,欣赏更多的美景,了解更为广阔的世界。

2、计算机语言

计算机语言的发展过程。机器语言,汇编语言,高级语言

2.1、机器语言

1946年2月14日,世界上第一台计算机ENAC诞生,使用的是最原始的穿孔卡片。这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差别极大,这种语言就称为机器语言。机器语言是第一代计算机语言。这种语言本质上是计算机能识别的唯一语言,人类很难理解。以后的语言就是在这个的基础上简化而来。虽然后来发展的语言能让人类直接理解但最终送入计算机的还是这种机器语言。

最初的计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,计算机只能被少部分人使用,人们需要用0、1组成的指令序列交由计算机执行,对于机器语言的使用与普及都是很令人头疼的问题。对于程序的移植能力几乎没有,从而时间成本,人力成本十分昂贵。但机器语言也不是没有优势,由于这种语言是直接对计算机硬件进行操作,所以在特定型号的计算机上面,运算效率也是很高的,机器语言的出现对于未来的计算机语言发展起到了很好的推动作用,所以机器语言也是第一代计算机语言。

2.2、汇编语言

汇编语言是在机器语言的基础上诞生的一门语言,用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,这也提高了语言的记忆性和识别性。对于程序的开发与维护起到了积极作用。汇编语言同样也是直接对硬件进行操作,这样依然局限了它的移植性。但是使用汇编语言针对计算机特定硬件而编制的汇编语言程序,对于计算机硬件的功能和特长的发挥已有了很大进步,它精炼而质量高,所以至今仍是一种常用的程序开发语言。

2.3、高级语言

面向人类的语言。从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1954年,第一个完全脱离机器硬件的高级语言—FORTRAN问世了,40多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、VC、VB、Delphi、JAVA等。

高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式?生产,发展为产业化、流水线式的工业化生产。

60年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是--项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1969年,提出了结构化程序设计方法,1970年,第一个结构化程序设计语言一Pascal语言出现,标志着结构化程序设计时期的开始。

80年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干千别的事,也无法动态地改变程序的执行方向。这和人们日常处;理事物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程,而应是面向具体的应用功能,也就是对象(object)。其方法就是软件的集成化,如同硬件的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只关心它的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完全不用关心,C++、VB、Delphi就是典型代表。

高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。

 

3、伪代码

伪代码:(Pseudocode)是一种算法描述语言。使用伪代码的目的是使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java等)实现。因此,伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言, 介于自然语言与编程语言之间,以编程语言的书写形式指明算法职能。使用伪代码, 不用拘泥于具体实现。相比程序语言(例如Java, C++,C, Dephi 等等)它更类似自然语言。它是半角式化、不标准的语言。可以将整个算法运行过程的结构用接近自然语言的形式(可以使用任何一种你熟悉的文字,关键是把程序的意思表达出来)描述出来。伪码中常被用于技术文档和科学出版物中来表示算法,也被用于在软件开发的实际编码过程之前表达程序的逻辑。伪代码不是用户和分析师的工具,而是设计师和程序员的工具。计算机科学在教学中通常使用虚拟码,以使得所有的程序员都能理解。】

 

4、语言之间的交流

4.1纵向交流

对于自然语言,类似方言到普通话的翻译;对于计算机语言,类似高级语言到机器语言的翻译

4.2横向交流

对于自然语言,类似中文对英文的翻译;对于计算机语言,分3个层次说明,机器语言是指不同硬件CPU的交流,汇编语言指不同机器语言的交流,高级语言指不同编程语言的交流。这里重点说下高级语言的交流。

在同一台机器上运行不同高级语言开发的程序,怎样让这些程序进行交流呢?通过语言交互接口

这里就有一个概念,叫做FFI (语言交互接口(Foreign Function Interface))

FFI(Foreign Function Interface)是用来与其它语言交互的接口,在有些语言里面称为语言绑定(language bindings),Java 里面一般称为 JNI(Java Native Interface) 或 JNA(Java Native Access)。
由于现实中很多程序是由不同编程语言写的,必然会涉及到跨语言调用,
比如 A 语言写的函数如果想在 B 语言里面调用,这时一般有两种解决方案:
一种是将函数做成一个服务,通过进程间通信(IPC)或网络协议通信(RPC, RESTful等);
另一种就是直接通过 FFI 调用。站在内存的角度,就是CPU的程序指针跳转到指定的内存位置,执行完成后再返回到原来的内存位置
前者需要至少两个独立的进程才能实现,而后者直接将其它语言的接口内嵌到本语言中,所以调用效率比前者高。
 

  python为什么要设计简单?为什么要设计成为胶水语言?

python相比其他语言的FFI门槛要低。

其他语言(如JAVA)的FFI是只能导入C的函数人口点,复杂的数据结构大多手工用byte数组拼接,如果需要回调函数,就更加复杂。

而CPython的C API是双向融合的,可以直接对外暴露封装过的Python对象,还可以运行用户通过继承这些自定义对象来引入新特征,甚至可以从C代码当中再调用Python的函数。

所以Python历史上一直都是科学计算和数据分析的重要工具。(C写的这些基本函数运行速度快)

CPython由C编写,将Python源码编译成CPython字节码,由虚拟机解释执行。没有用到JIT等技术,垃圾回收方面采用的是引用计数

Peter Norvig 在他的博客里 http://norvig.com/python-lisp.html 解释了为什么使用 Python 。一开始他打算把自己书中的 Lisp 代码翻译成 Java,因为他的学生们对 Java 比较熟悉,看到 Lisp 的括号就头大如斗。但他们最后放弃了,因为 Java 太啰嗦了,书里的一小段伪代码需要一大段的 Java 代码来表示,伪代码 和 Java 代码的差异太大了,即使它们表现的是同一个想法。最终 Peter Norvig 找了一种和 伪代码 很相似的程序语言,那就是 Python 。显然,当我们的目的是想要传达想法,方便教学的话,一种便于理解的语言是最好的。首先我们会用 自然语言 ,但是它不够形式化,有太多歧义。其次我们会想到 伪代码(pseudocode),可惜它又不能执行,无法立即验证正确性。所以在这样的场景下,Python 是比较适用的。

 

posted @ 2022-04-02 09:48  古锁阳关  阅读(575)  评论(0编辑  收藏  举报