博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态语言和静态语言、编译型语言和解释型语言、强类型语言和弱类型语言的分析...
阅读量:7056 次
发布时间:2019-06-28

本文共 1506 字,大约阅读时间需要 5 分钟。

 

一.动态语言和静态语言

1.

    我们常说的动、静态语言,通常是指:

动态类型语言 Dynamically Typed Language

静态类型语言 Statically Typed Language

可能还有:动、静态编程语言 Dynamic\Statically Programming Language

2.

    动态类型语言:在运行期间检查数据的类型的语言
例如:Ruby\Python
这类语言编程,不会给变量指定类型,而是在附值时得到数据类型。
Python是动态语言,变量只是对象的引用,变量a和b本身都没有类型,而它们的值有类型。

    静态类型语言:数据类型是在编译其间检查

例如:C/C++、Java/C#

Static typing when possible, dynamic typing when needed。

    java是静态语言,但是有许多动态特性,比如Reflection、Annotation、Dynamic proxy

3.关于动、静态语言的安全性

    本来是动态语言或静态语言与安全性是无关的,但是:

动态语言不支持很多静态检查
安全分析工具不能处理动态语言的一些行为
    所以,动态语言有时会被认为不安全。但是从设计思想上,比如:
Python的一个设计哲学是,相信程序员。如果代码有问题,那是你的问题不是Python的问题。所以代码简洁。
Java相反,不相信程序员。需要按部就班的写代码,需要编译器做静态检查。所以代码冗长。

 

二.编译型语言和解释型语言

1.运行过程
    编译型语言:先编译,再执行

最早可以追溯到汇编,就是编译器(Compiler)把源代码转换成可执行代码,这个过程称为编译(Compile)。

如果是多个文件,还有一个链接的过程。链接程序(Linker)-链接(Link)

    解释型语言:直接解释执行

例如BASIC,就是只有源代码,没有可执行文件。程序每执行到源程序的某一条指令,由解释器将源代码转换成二进制代码以供执行。并且是一个不断解释不断执行的过程。

优点:不需要编译,直接运行、调试。
缺点:运行速度较慢。并且没有编译期的语法检查。

    解释类型语言的移植性由解释器完成,编译类型语言的移植性由编译器完成。

  其实许多语言是编译型还是解释型划分已经很模糊,比如java既有编译器javac,又要由JVM解释执行。

3.

解释型语言运行较慢的一个原因是,相当于将编译的过程放到执行过程中。
动态类型语言运行较慢的一个原因是,在执行的过程中需要判断变量的类型。

 

三、强类型语言和弱类型语言

通常强类型语言就是在定义变量时,变量的类型是明确的。一旦一个变量被声明为某种类型,除了通过强制类型转换之外,它就永远被当成该类型处理。

这里强\弱类型语言划分,与动\静态语言划分的区别与联系,还可以再深入研究,就先到这里吧。

 

深入探讨可参考这里:https://www.zhihu.com/question/19918532,看下面的评论有一些争议,我想可能是因为,现代语言在设计上的相互借鉴,使得语言类型的界限变得模糊。了解从不同角度去分析语言类型的差异,以及每一种语言本身的设计思想和特性,才是重要的。

无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell

转载于:https://www.cnblogs.com/ppp21spider/p/5218921.html

你可能感兴趣的文章
/var/log目录下的20个Linux日志文件功能详解
查看>>
我的友情链接
查看>>
去除中国菜刀密码的方法
查看>>
PHP下载断点续传 转
查看>>
【新手】【转】如何学习java程序设计
查看>>
企业邮箱发送不到sina、hotmail等解决
查看>>
如果finalize()抛出异常会怎样?
查看>>
自己的微博
查看>>
php取整函数ceil,floor,round,intval函数的区别
查看>>
NH5-Nhibernate映射中的三种关系
查看>>
SpringBoot项目启动时自动执行指定方法
查看>>
设计模式(行为型模式)——命令模式(Command)
查看>>
vi常用命令
查看>>
Office 2013 兼容性测试(四)——部署遥测处理器
查看>>
Struts1和Struts2的区别和对比
查看>>
Forms开发中触发器的执行顺序
查看>>
SEO博客三个月没更新排行骤步康复
查看>>
JQuery 插件开发的入门介绍
查看>>
马哥2016全新Linux+Python高端运维班第五周作业
查看>>
联想扬天A4680R台式电脑增加内存不识别的解决方案
查看>>