计算机本质上来讲就是可以运行一系列命令的机器,比如电灯拥有开和关的两个命令,计算机相比电灯要更加复杂一些罢了。
编程语言就是控制计算机的命令,好比电灯开我们就用数字1来表示,关我们就是用数字0来表示。可是对人类的自然语言来说01这样的命令实在太复杂了。如果我想让计算机进行加减乘除的计算可能就需要输入一串根本看不懂的01组合。好在后来发明了汇编语言。
汇编语言
汇编语言让我们可以使用字母符号来给计算机发送指令。比如:
操作:寄存器BX的内容送到AX中
1000100111011000 机器指令
mov ax,bx 汇编指令
汇编是直接面向CPU的程序设计语言,如果我们想要开发更高级的程序使用汇编语言可能就费劲了。这时候静态类型的语言就出现了。
静态语言
我们所谓的静态语言是什么?比如C语言这样的语言,我们可以通过英文进行逻辑编写和数据处理,这些英文代码通过C语言的编译器编译成01这种机器语言,让其可以在计算机上运行。区别就在于,我们可以尽可能的使用人类的自然语言去编写程序,然后通过编译器翻译成机器所能看懂的语言就可以了。除了C语言意外还有诸如c++,java,golang,erlang这样的静态类型语言,他们不尽相同,又各具特色。以上的静态类型语言不好评判好坏的区分,主要区别还是在于编译器的优劣,以及在不同应用场景下的表现。
静态语言也有自身的问题,语法复杂,每次测试都需要编译,开发效率底下,况且现在计算机硬件空前发达我们几乎不需要手动去操作内存了。所以这时候动态类语言就显现出来了。
动态语言
动态语言就是在程序运行的时候将代码编译成机器可以运行的程序,好处就是不用花时间编译。马上就能看到结果。诸如php,python,JavaScript这种都是动态类型语言。因为动态类型语言涉及到运行时才编译成机器可以运行的程序,显然没有静态类语言直接编译成机器码运行的速度快。
关于密集计算和密集IO
如果涉及到密集计算的业务,比如处理大量数据,显然使用静态类型的语言是更好的选择,因为我们希望CPU或者GPU这些计算设备可以以更快的形式进行运算。
如果涉及到密集IO的业务,比如网站的C10K问题,其实静态语言和动态语言区别不大,因为这种业务类型最关键的问题在于IO效率而不是计算瓶颈,让机器在单位时间内进行更多的IO操作才是关键。为此还要涉及一些进程,线程和协程的知识了。