语言分类的疑问和猜测

语言分类的疑问和猜测

  1. 强弱类型的分类
    就强弱类型的分类我们应当知道,这是一个相对的概念,并无一个统一的严格定义来说到达什么程度算强什么程度算弱(知乎上看过一个回答提到一种标准划分的方法,但从评论来看,它依然很暧昧,更别提完成统一),普遍地接受的一个笼统的说法是,以类型检查时期对隐式类型转换的容忍程度作为划分依据。
    为什么是隐式类型转换呢?因为它对程序的安全性影响重大,一种语言无论它是编译还是解释执行,都应当在出现不安全行为时给予制止行为,而隐式转换则是类型检查时期难以规避的问题,比如long long类型转换成int类型会发生截断,假设一种语言允许这种隐式转换,我们难以发现这个错误,在程序运行的某一刻会出现我们不期望的bug,而去排查这个bug在什么地方产生又是一个费功夫的事。
    上面的描述来看强类型应当成为语言的主流设计思想,但是安全和易学灵活往往是矛盾的,弱类型语言虽然在安全性上不足,但是抛弃了强类型带来的包袱其适学性更强,对于要求不是那么专业的编程工作,它可以成为一个合适的小工具。不过这是目前的设计理念来看了,目前的编程语言大部分是前二十年就完成了初版的设计,那个时候强弱类型的概念还是指动静态,弱类型很大可能是过去遗留的历史包袱。

  2. 动态,静态,编译,解释执行
    很难去提出对这两套标准的分类的疑问,这应当是超出了我的知识范畴,虽然我知道,动态是运行时检查类型,静态是编译时类型检查,但类型检查的工作是如何具体执行的我却缺乏实际的认知,这需要一本编译原理来为我解释编译器究竟为我做了什么工作(虽然就C与8086汇编的学习中我是有些初步的模糊认知),而解释执行和java的虚拟机是什么?一种对特定程序而言类似操作系统一样地位的辅助程序吗?希望我能有机会学习编译原理,来浅显地回答这些疑问。


解释执行器某种意义上是一个虚拟机,之前把虚拟机认为是一种类似操作系统的东西,但实际上它是在操作系统的控制下的,一个对硬件模拟的软件,这里模拟的是硬件,具体到cpu指令集架构上,虽然它属于操作系统的管控下,但实际上它对底层的亲切不比操作系统低。
事实上虚拟机是操作系统下的一个软件,因此有操作系统为它分配的独立内存空间,进一步也会分配一部分磁盘,在主机中,虚拟机的内存是受操作系统保护,因此可以说是独立的,其他软件无权干涉,虽然磁盘是不受保护的(分配的虚拟磁盘,不知道具体技术原理是什么样的,在主机上呈现出一个单个文件,而非文件夹什么的),但一般来说除非刻意也很难去修改破坏对应的磁盘空间。这样,把分配的内存看成内存的全部,分配的磁盘看成磁盘的全部,虚拟机的一切操作在这片存储空间上,当不从主机加以干涉时,它就是一个独立的机器,在其模拟的CPU架构上能运行的软件自然也能在虚拟机上运行(显然主机的硬件必须有相应支持可以支撑不同指令集架构间的映射)。
就我目前的认知水平来看,我感受不到解释执行的优势,最终都是在CPU上运行指令,而编译的机器码还没中间商赚差价。
但是听说,相比实现一个到机器码的编译器,到中间码在到解释执行器执行的实现要简单很多,这种中间码也就是字节码,比起到汇编所要做的语义分析等编译工作,它更加简单快速(猜测:中间码是位该语言量身设计,而汇编不是造成了这种原因),与此同时,虚拟机可以监控程序的运行状态,能实现动态地保护和优化。
另外听说有些语言将解释执行和编译机器码混合,比如java对运行中执行的大量重复代码会即时编译,这或许是一种趋势了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值