当前位置 博文首页 > 编程哲学家的专栏:【编程语言】静态语言与动态语言的本质区别以
?从宏观的语言层面来说,编程语言类型共分为两大类:静态语言(又叫强类型语言)与动态语言(又叫弱类型语言)。静态语言通常是低级(底层)语言,动态语言一般为高级(应用)语言,静态语言运用通常是通过编译器,而动态语言解释器。
动态语言即脚本语言又叫弱类型语言(严格的来说不算编程语言),依靠解释器解释运行(解释器不会做任何的代码优化的),每次运行每次解析。这样编译运行机制,让其在运行效率上与静态语言相比会差一大截,毫不避讳的说动态脚本语言在性能上与静态编程语言相比,望尘莫及,毕竟是低级语言vs高级语言,动态语言在性能上丝毫不占任何优势。
但(重点来,敲黑板),动态语言其自身定位和设计之初就不是追求极致性能的(如果是这样的话动态语言也没必要出现了),动态语言就是为弥补静态编程语言的缺陷而生的,它的特性和静态语言刚好相反:方便快捷无需编译解释运行(方便调试,节省时间)、所见即得的代码逻辑、静态语言无可比拟的超高的开发效率(重点,核心竞争力,脚本语言的特点之一)、变量无需预先定义/无需声明数据类型即可使用、变量可随着程序的运行动态改变数据类型。
优点:
自动垃圾回收
成本低,投入小,见效快
缺点:
应用场景:适合项目初期、孵化阶段,可快速迭代成型,快速上线抢占市场先机、适合对性能要求不是特别高的的业务场景、适用于中小型项目、配合其他语言做些辅助性工作、相对来说适合i/o频繁的,不适合cpu计算密集型的
动态语言有哪些:python、php、perl、js、asp....
?
静态语言的概念是相比较动态语言的特性产生的概念。
静态语言通常为底层/(低级)语言,如c/c++,静态语言性能强悍,运行稳定,编译运行,编译器会先优化代码,然后再编译,所以即使你代码写的很烂也关系不大: ),使用变量需要预先声明变量和变量数据类型,强类型语言,代码相对规范,有时候还需要手动回收垃圾和时刻注意指针,否则就指针溢出:object null。
当然了,还一个奇怪的语言类型,它似乎既拥有静态语言的特性又具备动态语言的特点——java。没错就是java。java是先编译后解释,先编译成字节码然后再由jvm解释运行,java属于半编译式语言,严格来说java是静态语言,因为其变量数据类型是强类型,使用变量之前也需要预先定义,编译的时候也会有代码优化,据说.net平台c#编译器优化的相当厉害。
这里区分的一点是安卓开发所用的java和运行在vm上的java是不一样的,Android studio将java代码编译后运行的,不存在解释运行,可以看作是谷歌只是用了java的语法,而底层运用、编译、优化都完全和jvm上的java八杆子打不着、牛马不相及。
?优点:
? 缺点:
成本高,投入大,见效相对动态语言来说较慢
应用场景:中大型项目和高并发场景,或大型软件核心场景、核心业务场景,适合要求性能苛刻、低延迟高响应的应用场景,比较适合项目后期阶段,业务成熟,项目已经稳定运营了。
静态语言有哪些:c、c++、java、go、c#、.net...
?
cs