从类型检查方面来划分
编译时做类型检查:C,C++,Java,Go…(遇到可能出错的地方,尽量把这些出错的地方前移,让程序在编译时就保存,使程序更加健壮,变量的类型不变)
运行时做类型检查:Python,Perl,JavaScript,Ruby(运行的过程中才可以知道每个变量的具体类型,变量在运行过程中可以改变类型)
从运行/编译场景来划分
编译为机器代码运行:C。C++…(速度快,比java,Python快几倍或者十倍都是有可能的,机器代码要跟系统打交道,要用到系统底层的API,程序迁移到另一个系统比较难,甚至做不到的)
编译为中间代码,在虚拟机运行:Java,C#....(提高程序的跨平台能力,只要目标系统有虚拟机就可以迁移)
解释执行:Python,Perl,JavaScript…(不需要编译,直接每看到一行代码就执行,解释器功能少,还是要和操作系统打交道,所以程序迁移也不是那么容易)
从编程范式来划分:
面向过程:C,Visual Basic,…
面向对象:java,C#,C++,Scala,…(目前主流,处理复杂的逻辑或者数据结构还是面向对象好一些)
函数式:Haskell,Erlang,…(现在很火)