Oleg:复杂来讲,CS-Script是一个基于CLR的运转时情况,能够实行用C#编写的剧本。值得注重的是,CS-Script并非一个注释器,而是封装了微软或MonoC#编译器的shell。因而它与一般的C#没有甚么分歧。实践上,它的剧本引擎面向的也是ECMA兼容的“纯真功效”的C#,与用VisualStudio或MonoDevelop编译成程序集的C#没有甚么区分。
形貌CS-Script最复杂的体例是:我们能够用C#编写算法,编译成程序集,然后间接实行该程序集,或在宿主使用程序中加载并实行。但CS-Script能够跳过编译阶段,而当即加载并实行代码,将C#代码当作剧本来处置。换句话说,运转时的C#剧本就是一个静态编译的程序集。
固然,实践情形要比这庞大很多,并且CS-Script供应了浩瀚吸引眼球的特征:自界说JIT编译、省略类的语法、主动定名空间到程序集的映照、接口对齐等。
CS-Script如今已9岁了,而且有一批用户。MediaPortal或FlashDevelop就是基于CS-Script构建的。它还被用于AutoCAD插件、主动化和呆板人、游戏和划定规矩引擎。
CS-Script遭到了Python的启示和影响。只管它们面临的是完整分歧的运转时范式,但CS-Script仍是从Python自创了很多有效的设法,如多剧本实行、预编译等等。
Oleg:缘故原由有良多。在Windows上开辟的程序员很少有没传闻过Notepad++的。对良多人来讲,它是“必备”的源代码编纂器。可以获此殊荣,Notepad++是当之无愧的,由于它具有优异的架构和近乎完善的完成。但除这些赞誉,它另有必定的上升空间。
我以为Notepad++的“主动补全”功效另有点大略,还不敷以成为智能的代码帮助工具。它只是按文件范例分组的一些“高频词”罢了。
我深信如许一个很牛的编纂器应当变得更好。因而我决意为Notepad++完成一个C#的智能感知办理计划。
我想让Notepad++能具有与VisualStudio同种级其余智能感知。同时还包含“转到界说”、“查找援用”、“显现办法信息”、“增加短少的‘using’”和代码格局化。这就是这个插件出生的启事。智能感知相干的功效基于NRefactory,但插件的中心是CS-Script。而且因为插件利用了剧本引擎,因而能够在Notepad++中间接实行C#代码。
当完成完成后,我又催生了其他一些设法。因而又公布了另外一个Notepad++插件(NppScript)。它利用C#剧本对Notepad++自己举行主动化。实践上每一个如许的剧本本身,加上一些相干的插件特征(工具条图标、快速键、菜单项),都能够当作是一个插件。上面的截图展现了这一设法。
(点击图象缩小)
另外一个缘故原由是由于CS-Script。只管有了VisualStudio扩大和WindowsExplorerShell扩大,我仍是以为CS-Script不敷美满,没有一个专门的富编纂器。我固然晓得VisualStudio供应了无与伦比的“编纂才能”,但它也不是“银弹”。我想让C#和CS-Script用户具有一个壮大且轻量级的编纂器,不必要思索任何部署和license的成绩。
3年前我乃至仔细地实验着开辟如许一款编纂器。我花了大批工夫对SharpDevelop做反向工程,而且几近完成了一个为C#量身定做的编纂器(代码名为UltraSharp)。它是一个基于编纂器的自界说的WinForm,包装了NRefactory5预览版。但其功能和编纂功效都不克不及让人中意。因而我保持了这个项目,转而专注于在VisualStudio中集成CS-Script。我固然获得了乐成,但仍然心仪永世收费、功能出色、轻量级的Notepad++。
关于这个插件,我另有一个不太分明但却激烈的念头。我们一样平常事情云云庞大。框架、工场、形式、计划准绳……我们几近健忘了编程的兴趣。我不止一次地在文章中看到先容批量重定名工具、下载器、目次同步工具或仅仅是又一个MP3文件标签构造工具。这些工具经常是为了引出全功效的使用程序开辟(或部署计划),但在良多情形下,一样的工具能够仅用几行代码完成:
在Notepad++中可使用CS-Script.Npp插件来实行上述代码。它乃至能够筹办一些剧本,可以在没有安装Notepad++的PC上运转。
我以为Notepad++和CS_Script让我们无机会只存眷代码,而不必忧虑代码的基本布局,不必思索在那里保留项目文件或寻觅方才编译的可实行文件。乐在码中。
Oleg:传统的Notepad++插件开辟请求用C++编写代码。只管我用C++没成绩,但我仍是更喜好C#。因而我用NppPlugin.NET作为插件容器。必要出格指出的是,这个插件宿主计划能够文雅地应对互操纵的应战。它只是一个特别的VS项目模板,包括一些伶俐的预编译举动,能够注进特别的导出标记。因而,非托管的宿主使用程序(如Notepad++)能够在不借助任何包装器的情形下,间接承载一个一般的程序集。该项目模板还供应了一个接口(布局、常量),供应在其他插件中存在的一切Notepad++功效。
我利用了另外一个第三方办理计划是ICSharpCode.NRefactory(属于SharpDevelopIDE)。它是最成熟的剖析C#代码和构建语法树的开源办理计划。别的,它还完成了代码主动补全。但实践上它几仍是有点庞大。
NRefactory没有文档。只管作者供应了充实的代码示例,这貌似是一个更好的选择。但一切示例都是SharpDevelp独有的,假如不利用SharpDevelopUI控件套件的话,它们没法供应任何匡助。我花了大批工夫和精神对API举行反向工程,并终极乐成将其集成到Notepad++插件中。
另有一个应战是完成代码格局化。我做出了一个困难的决意,完成本人的格局化办理计划,而不是利用NRefactory内置的格局化。这是由于NRefactory的格局化其实不完整(最少我利用的版本是如许),并且关于非尺度的语法(如没有类的C#剧本)不敷天真。
在触及到用户交互时,我复制了VisualStudio的一切次要用户体验:办理计划扫瞄器、输入面板,CodeMap等等。
欢迎光临 仓酷云 (http://ckuyun.com/) | Powered by Discuz! X3.2 |