前言
- 在刚接触编程的时候,我没怎么考虑这些概念,因为查询出来的资料对我来说,完全是天方夜谭。后来深入一点了,就感觉自己略懂一二了吧,所以也就简单记录一下吧(算是为别人做点小小的贡献吧)。
- 没有什么专业术语,我的博客本身的原则就是:通俗易懂。
- 最后面一个图是我找的,不是我自己的,侵删。
- 如果有什么错误,希望大佬及时指正。
正文
动静态类型语言:
- 静态类型语言:比较严格,在运行前就给你数据类型检查了,不允许你变来变去的。就比如java,那么多的声明就是为了这。
- 动态类型语言:比较随意,因为在跑起来的时候才做类型检查,这个时候只要类型对了,那么过程中类型是怎么变的也就不管了。就比如python,它需要声明吗?。
- 需要补充的是:这也是为什么很多人说python不太适合大项目的缘故(我觉得只要公司和自己对编码的要求严格规范点,也没啥),因为python没有各种类型的声明,如果再不遵循PEP8及其它规范,那么对于一个庞大的项目,工程师们该怎样阅读和容错那些代码?
动静态语言(和动静态类型语言不是一个概念):
- 动态语言:就是指程序在运行的过程中可以一点点检查,运行,然后可以动态的的给自己增加代码,比如:导包啊,生成新的代码啊,都是可以的。
- 静态语言:就是指运行的时候全部都检查完了,所有的程序固定了,不会自己再修改了,结构不会再变了,运行就完事了。
- 需要补充的是:这个过程不是你在编辑器中点击运行代码后,快速的去尝试增加或者删除代码然后看看程序还在不在运行的过程。
- 比如python,如果代码中有错误,但是还是会执行一些没错误的代码,如果有打印语句,还是会打印出来点东西的。这就是动态。
- 但是java就不行,错了就是错了,就算有打印语句,也啥都没有,赶紧去把bug修复了再运行吧。这就是静态。
强弱类型语言:
- 强:你就理解为,不同类型的数据类型不允许加减就可以了。
- 弱:你就理解为,不同类型的数据类型允许加减就可以了。
- 需要补充的是:
- python同别的强类型语言一样,是强类型语言;而js才是弱类型语言(它这样设计是有缘故的)。
- 彩蛋:python的字符串(中文也可以)可以不使用任何方法进行大小的比较,原则是:英文:首先按照第一个字符的ASCII,中文:没有深究,个人感觉是按照utf8的编码规范,如果第一个字符相同,就依次比较下一个字符。哈哈。
编译解释型语言:
- 解释型:就是运行的一行代码的时候需要解释器帮忙翻译一下再运行(有可能是一条条翻译,也有可能是一次性全部翻译好),比较慢,也正因为其有解释器的关系,只要平台有解释器就可以运行了,还是比较好移植的。
- 编译型:就是提前把代码都编译成机器码,运行一行代码的时候可以脱离环境。比较快,但是如果到别的平台上,需要再次编译一下,就不太好移植。
- 这是因为不同系统可能对数据的基本类型存储的方式不一样。
- 需要补充的是 :打包为exe等其它可执行文件,不一定都是编译成机器码的,这是和语言有关系的。
- 比如python:它打包的过程其实是将相关模块和解释器一并打包了,并没有直接编译为机器码。
- 比如golang:它build的过程其实就是将模块编译为机器码了,这是不一样的。
- 再补充一点:有的朋友会认为java也有build的过程,为什么不是编译性语言?
- 这是因为: 它其实是首先由编译器编译成.class(字节码)文件,然后在通过解释器(JVM),从.class文件中读一行解释执行一行。
- 具体过程可以参考下图,都是大差不差的。