当前位置 博文首页 > 编程哲学家的专栏:【编程语言】静态语言与动态语言的本质区别以

    编程哲学家的专栏:【编程语言】静态语言与动态语言的本质区别以

    作者:[db:作者] 时间:2021-07-09 19:03

    ?从宏观的语言层面来说,编程语言类型共分为两大类:静态语言(又叫强类型语言)与动态语言(又叫弱类型语言)。静态语言通常是低级(底层)语言,动态语言一般为高级(应用)语言,静态语言运用通常是通过编译器,而动态语言解释器。

    ?动态语言

    动态语言即脚本语言又叫弱类型语言(严格的来说不算编程语言),依靠解释器解释运行(解释器不会做任何的代码优化的),每次运行每次解析。这样编译运行机制,让其在运行效率上与静态语言相比会差一大截,毫不避讳的说动态脚本语言在性能上与静态编程语言相比,望尘莫及,毕竟是低级语言vs高级语言,动态语言在性能上丝毫不占任何优势

    但(重点来,敲黑板),动态语言其自身定位和设计之初就不是追求极致性能的(如果是这样的话动态语言也没必要出现了),动态语言就是为弥补静态编程语言的缺陷而生的,它的特性和静态语言刚好相反:方便快捷无需编译解释运行(方便调试,节省时间)、所见即得的代码逻辑、静态语言无可比拟的超高的开发效率(重点,核心竞争力,脚本语言的特点之一)、变量无需预先定义/无需声明数据类型即可使用、变量可随着程序的运行动态改变数据类型。

    优点:

    • 方便快捷无需编译解释运行(方便调试,节省时间)
    • 开发效率高、开发周期短、试错成本低,动态语言可快速试错,产品可快速迭代(天下武功唯不快不破),无惧需求变化(真的不怕么?相对静态语言来说好太多,毕竟开发高)
    • 所见即得的代码逻辑、
    • 相对静态语言,入门简单,学习容易,上手快
    • 据说,对公司来说性价比很高(phper):价格实惠、从业者众多,适合当下急功近利的中国国情(这也算是优点吗?也许吧)
    • 自动垃圾回收

    • 成本低,投入小,见效快

    缺点:

    • ?性能软肋,每次运行都需要解释器去解释(弱类型动态语言永远的痛)
    • 大型项目中有点心有余而力不足
    • 相对静态语言代码不规范
    • 无编译器优化、在大型项目架构上没有较为成熟的解决方案、大型项目是短板
    • .debug相对静态语言来说较困难
    • 无法常驻内存,绝大部分动态语言是无法常驻内存的,虽然个别语言可以通过某些奇技淫巧实现常驻内存,但仍是鸡肋。

    应用场景:适合项目初期、孵化阶段,可快速迭代成型,快速上线抢占市场先机、适合对性能要求不是特别高的的业务场景、适用于中小型项目、配合其他语言做些辅助性工作、相对来说适合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八杆子打不着、牛马不相及。

    ?优点

    • 静态编译型语言性能强悍、运行稳定,一次编译即可到处运行,后面直接运行编译生成的二进制文件。
    • 编译器会优化代码
    • 代码相对规范
    • debug相对动态语言较容易
    • 能hold的住大型项目和架构。
    • 更能充分利用、发挥硬件性能

    ? 缺点:

    • 开发效率低周期长
    • ?需要格外注意变量的类型、过多的类型声明会增加更多的代码
    • ?相对动态语言来说语法罗嗦冗长(尤其是java,像是在写英文句子)
    • ?开发小功能上不够灵活,有点死板。
    • 不适合小项目
    • 成本高,投入大,见效相对动态语言来说较慢

    应用场景:中大型项目和高并发场景,或大型软件核心场景、核心业务场景,适合要求性能苛刻、低延迟高响应的应用场景,比较适合项目后期阶段,业务成熟,项目已经稳定运营了。

    静态语言有哪些:c、c++、java、go、c#、.net...

    ?

    cs
    下一篇:没有了