阅读更多

8顶
4踩

编程语言

原创新闻 Common Compiler Infrastructure(CCI)开源了!

2009-04-17 09:34 by 见习记者 RednaxelaFX 评论(3) 有5037人浏览
在我以前的一篇blog,LINQ与DLR的Expression tree(3):LINQ与DLR及另外两个库的AST对比里,我提到了Common Compiler Infrastructure(CCI)源自Project 7,用于为.NET平台提供一套实现编程语言用的公共基础设施。这套基础设施不但也用与编译器编写,也可用于代码分析、代码优化、代码生成等多种功能。FxCop就一直依赖于CCI来提供PE文件解析和写入的相关功能。Visual Studio中的代码分析功能也是基于CCI的特化版。.NET 4的Code Contract也在使用CCI……

2天前,这套类库终于公开发布了,而且是基于Ms-PL许可证开源发布了。此刻我难以压抑激动的心情。

CCI是在微软研究院Redmond的研究所的支持下,由Herman Venter宣布开源的。

目前发布了的CCI包括三部分,都是以source-only的方式发布的:
CCI on CodePlex:

Common Compiler Infrastructure: Metadata components
这部分提供了对PE文件及其中的元数据的操作,包括PE文件的读、写、遍历、转换等功能,也提供了一些反编译到源码的支持;同时它还包括对PDB文件的读、写功能。
使用过Mono.Cecil的同学可以考虑看看CCI对Metadata的支持是否能更好的满足需要。

Common Compiler Infrastructure: Code and AST Components
这部分提供了连接编译器前端与后端的桥梁,也就是对AST的支持。CCI包含了大量AST节点类型,可以支持大部分程序语言中设计的语法结构的语义。在编译器前端生成了合适的AST之后,CCI提供了后端支持将AST编译为IL,免除了编译器编写的一大痛苦。
这部分可用于替代CodeDOM原本的地位。

Common Compiler Infrastructure: Sample applications
这部分包含了一些使用CCI的例子,目前有一个Small Basic编译器。日后还会不断有新的例子加入。

其中CCI的主要文档都在CCI-AST的那个部分的Documentation目录里。

值得一提的是,CCI并不提供编译器前端的功能,也就是说词法分析器和文法分析器都不在CCI的功能范围内。但现成的解析器生成器非常多,随便挑一款与CCI配合都没问题。如果是像ANTLR一类有自己的AST类层次的库,可以在前端生成了AST后转换为CCI的AST,这样就能与CCI其余的部分联系上了。

相关链接:
Channel 9上关于CCI开源的访谈(3:33)
Research in Software Engineering Group based in the Microsoft Research Redmond Laboratory(RiSE)

P.S. 以前Colin老大问过CCI的获取方式和使用许可,当时我回复说只能从FxCop或者Zonnon获取CCI相关的程序集,但FxCop的许可里指明了其附带的CCI不得用于FxCop以外的用途,所以当时觉得很无奈。现在这玩意儿终于开源了啊 T T
8
4
评论 共 3 条 请登录后发表评论
3 楼 RednaxelaFX 2009-04-17 14:49
sinoyster 写道
对java有啥好处?

大概没什么直接的好处吧。由于整个CCI都以BSD风格的Ms-PL许可证开源,即便是Java社区也可以从中汲取经验就是了。.NET社区有许多库都是从Java移植过去然后再逐渐改进的,包括NUnit和Nibernate都是如此;反过来也未尝不可。
CCI-AST的部分与平台相关性不强,如果要借鉴移植到Java上难度不会很大,虽然Java这边已经有诸如JJTree之类的库也是与AST处理相关的。

P.S. 原来管理员能直接把论坛帖转发到新闻频道的啊……|||
2 楼 sinoyster 2009-04-17 13:28
对java有啥好处?
1 楼 whaosoft 2009-04-17 10:32
这是干嘛的呀~!~

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 从Window系统托盘控制Windows服务

    VB.NET有许多内建的类,可以让我们轻松创建Windows服务程序,但如何轻松控制这些服务呢?一般是到管理工具里面进行控制。本文将描述如何创建一个运行在系统托盘里的程序来轻松控制一个服务程序。至于如何创建服务程序,可以参考.NET SDK或其它创建服务程序的文章,本文的例子利用IIS的W3SVC服务来做例子,来控制IIS的停止与启动。      要开发这样的程序,我们先打开Microsoft V

  • Windows用户态程序高效排错 -- 异常(Exception)和通知(Debug Event)

     理解操作系统对程序的反馈:异常(Exception)和通知(Debug Event)本小结首先介绍异常的原理和相关资料,再举例说明异常跟崩溃和调试是如何紧密联系在一起的。最后说明如何利用工具来监视异常,获取准确的信息。2.3.1  异常(Exception)的方方面面和一篇字字珠玑的文章异常是CPU,操作系统和应用程序控制代码流程的一种机制。正常情况下,代码是顺序执行的,比如下面两行

  • 用托盘控制windows服务的c#实现

    http://www.csdn.net/Develop/Read_Article.asp?Id=20312孟子e章给出的vb代码,现在从这个代码翻译成c#,给习惯c#的人参考需要注意的是图片一定需要是ico格式,否则可能会导致托盘的不显示using System;namespace UBISerialsController{ ///  /// Class1 的摘要说明。 //

  • 系统托盘编程完全指南

      系统托盘编程完全指南(一)编译/northtibet下载本文例子源代码    自从Windows 95面市以来,系统托盘应用作为一种极具吸引力的UI深受广大用户的喜爱。使用系统托盘UI的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。那么如何编写自己的托盘应用呢?本文是系列文章中的第一篇,这些文章将比较系统地描述托盘应用的编程。并创建自

  • windows系统托盘及托盘菜单

    window系统托盘及托盘菜单 下面是一个MFC写的wifi助手程序用于实现系统托盘的代码片段 void CWiFiAssistantDlg::OnClose() {  // TODO: 在此添加消息处理程序代码和/或调用默认值  ExitPtDlg exitPtDlg;  int varReturn = exitPtDlg.DoModal();  if(varReturn ==

  • Object和异常类

    一、Object类 Object类:是所有类的祖先类。 在重写equals方法的同时,一般也要重写hashCode方法。当且仅当两个对象变量引用同一个对象时,equals才返回真。相等对象必须具有相等的哈希值。 任何对象在装载到内存时都会自动生成一个有关类字节码class文件的对象,用object类对象的getClass()可获取到这个对象。同一个类产生的所有对象它们的class文...

  • win10开启最小化托盘/系统托盘

    通过设置>>个性化>>任务栏>>“选择哪些图标显示在任务栏上”,查看下图中的设置是否是关闭状态: 不是的话,设为关闭状态

  • Win32 API 实现系统托盘程序

    Win32 API 实现系统托盘程序#include LPCTSTR szAppName = TEXT("TrayHelper");LPCTSTR szWndName = TEXT("TrayIcon");LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ NOTIFYICONDATA n

  • 托盘程序如何控制windows服务

    托盘程序通常是一个 单独的程序,所以我们需要自己 建一个单独的 winform 程序!解决方案如下                    然后我们需要添加一个 控制 服务进程的类! ClServCtl.cs     源代码 如下!          using System; using System.Collections.Generic; using System.Text;

  • 一个Window托盘类 好用

    一个Window托盘类 好用

  • 黑马程序员_08. Object Exception介绍

    八、黑马程序员_Object类与异常类 A.Object类  B.异常类 A.Object类介绍 a.介绍 Object类是所有类的直接或间接父类,它里面定义的功能是所有类都具备的。 b.Object类中常用的方法有 getClass():返回该对像的运行时类。它返回一个Class类型的对像。在反射中较常用; toString():返回该对像的字符串表现形式。返回值为String类型

  • Objective-C - 异常处理(Exception)

    苹果关于异常的详细文档: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Exceptions/Exceptions.html#//apple_ref/doc/uid/10000012i 关于自定义异常或者扩展: Objective-C中处理异常是依赖于NSException实现的,它是

  • Windows获取系统托盘图标

             对于Win7系统,程序的托盘图标最终是放置在和XP一样的ToolbarWindow32工具条窗口,但是有两个地方,同样是ToolbarWindow32工具条窗口,父窗口是不一样的。在右下角可见区域,ToolbarWindow32工具条窗口的父窗口是SysPager窗口,遍历方法同XP一样。对于掩藏的ToolbarWindow32工具条窗口,必须通过点击桌面右下角的可见区域左边的...

Global site tag (gtag.js) - Google Analytics