程序员必知的六种隔离技术( 三 )


5、隔离运行环境(语言虚拟机)
最后一个要介绍的可能就是更加抽象的,但是也是更加实用的一个,JVM就是这方面的一个代表 。在我们的编程生涯里,我们很容易就会遇到跨平台问题——即我们在我们的开发机器上开发的软件,在我们的产品环境的机器上就没有办法运行 。特别是当我们使用Mac OS或者windows机器上开发了我们的应用,然后我们需要在Linux系统上运行,就会遇到各种问题 。并且当我们使用了一个需要重新编译的库时,这种问题就更加麻烦 。
如下图所示的是JVM的架构示意图
 

程序员必知的六种隔离技术

文章插图
 
 
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。它可以实现“编写一次,到处运行” 。
换句话来说,它在底层实现了环境隔离,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行 。
基于此,只要其他编程语言的编译器能生成正确Java bytecode文件,这个语言也能实现在JVM上运行 。如下图所示的是基于JVM的Jython语言的架构图:
 
程序员必知的六种隔离技术

文章插图
 
 
其底层是基于JVM,而编写时则是用Python语言,并且他可以使用Java的模块来编程 。
常见拥有同样架构的工具,还有MySQL,如下图是所示的是MySQL的架构图:
 
程序员必知的六种隔离技术

文章插图
 
 
MySQL在最顶层提供了一个名为SQL的查询语言,这个查询语言只能用于查询数据库,然而它却是一种更高级的用法。它不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言,即领域特定语言 。
6、隔离语言(DSL)
这是一门特别有意思也特别值得期待的技术,但是实现它并不是一件容易的事 。
作为讨论隔离环境的一部分,我们只看外部DSL 。内部DSL与外部DSL最大的区别在于:外部DSL近似于创建了一种新的语法和语义的全新语言 。如下图所示是两中DSL的一种对比:
 
程序员必知的六种隔离技术

文章插图
 
 
在这样的外部DSL里,我们有自己的语法、自己的解析器、类型检测器等等 。最简单且最常用的DSL就是Markdown,如下图所示:
 
程序员必知的六种隔离技术

文章插图
 
 
如果我们可以将我们的业务逻辑写成DSL,那么我们就不需要担心底层语言的变动过多地影响原有的业务逻辑 。换句话说,这相当于创建了我们自己的语言隔离环境,我们不需要思考用何种语言来实用我们的业务 。




推荐阅读