本来是很想写关于VS的DSL的文章的,有点小忙,就一直在拖延,忽然有看见了“《在Visual Studio 2012中使用VMSDK开发特定领域语言》”,又有写的欲望了,这段时间没事,而且处于寂寞无聊的状态,就准备写一个关于自己应用DSL(Domain-Specific Languages)经验的小系列,不讲详细的系统的技术,只讲具体应用中用到的。而且作为编程的新手,就分享一下仅有的一点点经验,不知道能不能坚持下来。
我用过的是VS2010,那这篇文章就针对VS2010的DSL来写,我参考过的文献资料有:
1.Visualization and Modeling SDK - Domain-Specific Languages——微软的MSDN里面的,重要;
2.LearnVSXNow------如何开发VSX系列——明年我18的,重要,在MSDN里面英文不理解的,可以参考这个;
3.T4 Code Generation——代码生成用到的,还有代码生成器;
具体的技术细节基本在上面的这些文档里面可以找得到,就不再这里翻译或者是讲述了。做特定领域开发,用的比较多的有Java的MetaEdit+,现在在微软发布的VMSDK上用DSL Tool的也逐渐多了起来。在VS2010里面做这个开发需要VS2010 SDK,需要建模的VMSDK,这些都可以到微软官网去下载,可能还需要MPF的源文件,这个需要到MSDN里面看说明,下载以及配置方法。
在VS2010中开发建模,用到实际应用中,而不仅仅是停留在微软的说明文档的层级上,首先需要确定一下问题:
一、开发的工具是Integrated Model还是Isolated Model?
根据应用场景,还有软件需求,所开发的工具是作为插件放在VS210之中,还是用VS2010的shell做一个独立的软件,这两个工作量有很大的不同,也和是否要生成代码,以及生成什么语言的代码有关系。一般是希望做为一个独立的软件也就是Isolated Mode模式开发的,目前,据我自己经过一个月的考证,如果进行这样的开发,比较明晰的是如果生成的代码是.Net工程的用哪一种模式,都可以,如果生成C++的工程的,只能用插件模式,也就是Integrated Model。当然,如果不想生成代码,或者说是只用建模的,这个关系到不大。这个会单独写一篇位置来说。
二、VS2010的DSL开发的技术应用实践
这个也会作为一个一篇来具体的写,具体会设计到VS DSL或者说是VMSDK中定义的属性定义要注意的事项,属性定义类型的具体实现,这个好像涉及的比较细,但是比较少,这个也是我在开发的时候碰到的比较刺手的问题,主要还是概念的理解。
三、生成C++代码
这里只讲T4模板的,现在网络上的文档多事生成.Net源代码的文章,这里要说一个比较简单的生成C++代码的方法,包括多个代码文件生成等具体的应用的实践。
做VMSDK开发到真正的应用不仅涉及了对DSL的定义,而且也涉及了VSIX的知识,还是比较琐碎的,特别是对有些概念的理解。
今天终于搭一个框架,很早以前就想写,但是不知道怎么写出来,这三点应该是我很想写的了,等有空了,会把这三条详细的说一下的。
祝大家七夕快乐!