阅读更多

8顶
4踩

编程语言

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

2009-04-17 09:34 by 见习记者 RednaxelaFX 评论(3) 有5025人浏览
在我以前的一篇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
这是干嘛的呀~!~

发表评论

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

相关推荐

  • C++简单的Windows服务+托盘控制程序例子 VS2017 + windows10 x64 亲测可用。

    C++简单的Windows服务+托盘控制程序例子 VS2017 + windows10 x64 亲测可用。

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

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

  • windows服务+托盘控制程序

    最近写windows服务需要有界面交互,反复查阅资料发现windows服务中是无法做界面弹出的。 最后敲定方案为:windows服务+子进程 的控制方式,其中windows服务中运行服务处理事务,在子进程中弹出界面进行交互操作,界面进程由服务进行创建,并随服务停止而消亡。其中有几个技术要点,在这里做下简单记录(其中系统托盘的创建依赖于窗口,使用比较简单,在这里不再赘述): 1.创建需要同界面交互

  • ObjectDock Tray插件:个性化系统托盘管理

    本文还有配套的精品资源,点击获取 简介:ObjectDock是一款Windows桌面美化工具,模仿Mac OS的Dock栏,为Windows用户提供直观便捷的任务管理和程序启动方式。其tray插件增强了系统托盘的灵活性,允许用户自定义托盘区域显示、隐藏以及图标的大小和布局。插件支持个性化定制、高效管理、托盘扩展、通知中心和快捷操作等特性,为Windows用户带来更美观、高效...

  • 获取 Windows 系统托盘图标信息的最新方案(三)

    在《获取 Windows 系统托盘图标信息的最新方案(一)》中(下文简称 《最新方案(一)》),我们讨论了在 Win11 22H2 上获取系统托盘图标信息的方法,即拦截 Shell_TrayWnd 窗口的 WM_COPYDATA 消息。在《最新方案(一)》中,我们主要使用 Inline hook 重写 CTray::v_WndProc 函数,也就是窗口过程函数来拦截 WM_COPYDATA 消息。具体分析了两种注入 explorer 的实现方法:(1)创建挂起进程的远程线程注入;

  • windows 服务与系统托盘之间的交互

    有的时候我们需要自己写服务,而且需要给绑定一个 托盘!用来更加方便的 控制我们的程序!例如 QQ 那种! 下面我来讲一下他们之间是怎么关联的!    有怎么几步!   1,自己写一个服务,(上一篇博客中有详细的介绍,可以去参考!)   2,桌面交互的配置            在serviceInstaller1_Committed事件中添加如下代码:             Conn

  • windows系统托盘及托盘菜单

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

  • 《完美C/C++》创建windows系统托盘程序

    #include #define IDR_PAUSE 12 #define IDR_START 13 LPCTSTR szAppClassName = TEXT("服务程序"); LPCTSTR szAppWindowName = TEXT("服务程序"); HMENU hmenu;//菜单句柄 LRESULT CALLBACK WndProc(HWND hwnd, UINT messag

  • windows程序托盘图标以及消息提示--基本知识(NOTIFYICONDATA)

    首先介绍一下基本知识: NOTIFYICONDATA结构体,语法如下:typedef struct _NOTIFYICONDATA { DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; HICON hIcon; TCHAR szTip[64]; DWORD dwState; DWORD dwStateMas

  • Windows获取系统托盘图标

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

  • Windows - 任务栏托盘图标实时重建

    当Explorer.exe出错重启时,任务栏(包括托盘区)将重建,而此时托盘图标就会消失,应用程序必须自己将图标重新放到托盘。 由上述原因可知,只要能够在任务栏重建时得到通知就可以解决这个问题了。 如果你的计算机安装了IE4以上版本就可以得到通知了,当任务栏建立的时候,系统会注册一个“TaskbarCreated”全局消息,并广播这个消息。 我们只要在应用程序里也注册一个“TaskbarCr

Global site tag (gtag.js) - Google Analytics