附录G 多语言开发
通读全书,你会产生一个印象:DSL不必总用一种语言来编写,我们可以根据需求来选择最适合的语言。然而当各种语言不加选择地凑在一起,互相格格不入时,语言间的摩擦又可能令我们的应用成为灾难的现场。当然,这种情形是可以避免的。那么,如何判断自己的项目是否远离了语言冲突的漩涡呢?很简单!当你真正遇到语言冲突时,肯定会像图G-1的程序员那样挠头的。
图G-1 别让自己落到这个地步
本篇附录的作用是引导读者搭建一个有序的多语言开发环境。如果我们希望在JVM上开发DSL应用,那么此时Java语言将在开发中扮演基本宿主语言的角色。应用的主体部分使用Java语言,DSL的部分则选择其他语言,从而满足目标客户对于API表现力的要求。在此有个小小的提醒——本篇附录是为初涉多语言范式下DSL开发的读者准备的,已经有过相关经验的开发者完全可以忽略。
我们会用两个例子来说明开发环境的搭建方法,例中将按照我们的设想,使用Java以外的JVM语言来开发DSL,然后将之集成到基于Java的应用主体。第一个例子针对动态类型语言Groovy,主要展示Java和Groovy语言的混合项目在现代IDE里天衣无缝的集成效果。第二个例子针对静态类型语言Scala,讲解Java和Scala混合项目的开发环境配置。