adinxu
by adinxu
~1 分钟 阅读用时

分类

标签

编程语言小记_incomplete

本文旨在对比不同类型的编程语言,针对各语言特性做一个梳理与学习,找到一些共通的,或者独树一帜的设计思路,从而能够达到更好的学习新语言的目的。


编程,即编写程序。
Programming is the process of creating a set of instructions that tell a computer how to perform a task.
编程就像写作文,画画,唱歌,是一个表达的过程。编程有很多不同的语言,下面是3月的语言排行:
3月语言排行
上面图片中列出的只是排行靠前的语言,实际还有语言未画在上面。
我学的第一门语言是c语言,是小学学的(大概是吧,记不清了),然后后面学习了汇编语言,是51单片机上的,后面用过c++,接触过lua,python等等语言。语言有很多种分类方法:低级语言和高级语言;编译型和解释型;面向对象和面向过程,强类型语言,弱类型语言,动态类型语言,静态类型语言等等。
高级语言低级语言,在我理解就是,低级语言是更接近底层的语言,比如汇编语言。而高级语言,已经抽象化的比较完全,可以脱离平台来谈。低级语言,要和硬件打交道,汇编语言要操作寄存器,像Python估计就没有操作寄存器这一说。所以我上面说我学的是51的汇编,大概没有人会说,我学的是intel的java吧。低级语言更接近底层,以至于高度特化,和平台相依凭。而高级语言,可以跨平台运行。
汇编语言端口置1,过程可以简化为:内部寄存器写1,推挽输出电路中,寄存器通过总线使与电源相接的三极管导通,端口输出高电平。人们制造出二极管三极管,就有了0和1的变化。电路在我看来更像是一个多米诺骨牌一样,是借助电子器件的特性,精心构建的一个复杂装置。汇编语言通过汇编器汇编成二进制代码–机器语言,这才是最接近底层的,学习过数字电路的人应该明白指令的简化执行流程。
c语言应当是介于低级语言和高级语言之间的语言,因为他有指针这个概念,指针就是地址,那肯定与硬件有关了,c51更是可以直接读写寄存器。
有些高级语言初始时只能解释执行,比如java和Python(应该是吧,有错误请指正),编译执行的语言,最终变为机器码。解释执行的语言直接执行。解释执行的语言之所以不需要编译成二进制代码就能执行,依赖的是解释器。解释器就像一个api一样,为解释语言提供了运行环境,因此编译型语言编译好之后,运行的平台基本就固定了,因为他已经转化为了与平台相对应的机器码。而解释型语言由于有解释器存在,可以跨平台运行,而解释器,应当是依赖平台的,但是他为这门语言提供了环境,屏蔽了平台差异。
面向对象面向过程,算是两种编程范式,按我的理解,面向过程的语言着重于描述按步骤做哪些事情,而面向对象的语言,更着重于通过分析对象间的关系,让原本孤立的数据之间建立联系,并抽象,获得某种开发效率的提升和开发思想思路的改变。因为我目前只会c,这部分就不多谈了,以免出错。
强类型语言,与弱类型语言,按我的理解就是,如果存在隐式转换,那么就是弱类型,不允许隐式转换,则是强类型。
动态类型语言静态类型语言,我暂时理解为,编译时检查和运行时进行类型检查。
关于这四者的区别,我说的也不严谨,甚至有错误,具体可以参考这个

写程序就是一个表达的过程,你给定一个输入,就有特定的输出,就像摆好的多米诺骨牌。编程语言如此之多,有的长的比较像,有的差异很大,但语言设计出来的目的都是为了–表达。为了让人们更好地表达,各种各样的语言被设计出来。
c语言里比较常见的概念有:数据类型,变量,运算符,表达式,控制流。这些概念都是人类世界的概念,现在,人们将这些抽象为编程语言中的要素,来帮助人们操纵晶体管来完成目的。
我现在比较认同的观点是每种语言都有他自己擅长的领域,不同的语言都有其作者根据自己考量而设计的各种特性。

未完待续,本来还想再写一些的,先发出来吧,有问题请帮忙指正,感谢!