作者:Werner Schuster 译者:杨晨
除了Smalltalkers之外,动态语言程序员使用的工具和IDE等都是用底层语言编写的。但是是对于用户(例如开发者)来说,使用原生开发工具是大有裨益的。例如如果编辑器和IDE是原生的话,这就意味着开发者能够即时扩展他们的工具,而不需要在另外一种语言和平台上浪费时间。Java开发者现在有一大批Java原生IDE可供选择,而且均可以编写一些Java代码进行扩展。不过这种情况对于JavaScript和Ruby来说并不适用。
但是,两个新发布的IDE改变了这种现状:JavaScript原生IDE Cloud9 和JRuby原生IDE RedCar。
使用JavaScript和HTML编写编辑器和IDE在五年前还是一件很难想象的事情。但是在接下来的数年内,JavaScript VM变得更快,HTML的组件也有足够的能力构建复杂的编辑器。Mozilla程序员的编辑器Skywriter(前身是Bespin)就是使用Canvas元素和API来绘制的。
项目最初的时候,Cloud9仅仅是重新组织了一下Eclipse的视觉元素,而且它也同样使用了Eclipse的插件思想。所有的功能都是由插件来完成的,包括编辑器,视图,行为等。JavaScript插件的一个好处是可以轻松处理JSON格式的元数据描述字符,让插件开发者省心不少。
从功能上来说,现在讨论Cloud9还是太早了-至少和成熟的IDE相比。不过现在它已经有很多很方便的功能了。JavaScript Debugging已经支持GUI、Node.js脚本调试的连接器以及Chrome runtimes,并且在GUI中能够挂起,恢复和设置断点。这个特性的关键在于使用了JavaScript VM的内建调试器。
Cloud9使用ACE作为编辑器组件。Skywriter使用Canvas和ACE来绘制编辑器以及操作DOM。编辑器的窗格是DIV元素;ACE能够决定在编辑器中哪些能够显示,把这些内容作为DIV元素渲染然后加入到编辑器的DIV中。ACE使用多层DIV来渲染编辑器中不同的元素,尤其是光标和选择高亮的实现。
看起来现在的HTML渲染器和DOM已经足够强大,能够让ACE高速运行,给用户感觉是像一个原生的编辑器组件。
对编辑器组件大有裨益的一个HTML5 API是Web Worker API,这个组件允许JavaScript代码能够新建JavaScript进程,而不是所谓的无共享的进程,它们之间的通信是使用JSON格式的数据。在程序员的编辑器中,在后台运行任务是非常重要的;每次敲击键盘或者操作都会产生大量的工作。使用正则表达式的语法高亮就是其中之一,但是,现代编辑器需要解析源代码来做语义高亮,例如,用不同颜色表示局部变量和全局变量,静态方法和虚拟方法等。其他的特性还包括代码折叠支持等。可以聪明地通过使用setTimeout来在前台线程中运行这些任务。Web工程师从而不需要破解内部结构,而能够直接在后台运行额外的任务,充分利用多核结构。
虽然名字中带有云的概念,但是Cloud9还可以默认在本地安装和运行,并且可以访问本地文件系统。它在后端使用JavaScript编写的Node.js文件来通过socket进行通信。Node.js将文件内容封装成jsdav库所支持的WebDAV格式。
Skywriter和Cloud9团队最近声称将兴趣放在协作和开发插件共享,特定语言功能等特性。要是这是真的的话,那就又避免了一场IDE战争。
Cloud9 IDE博客提供了新版本的更新信息。GitHub是代码托管的好地方。Cloud9 IDE可以能够通过代码下载安装,在后端服务器运行Node.js和在浏览器中直接安装。
RedCar是一个可扩展的编辑器,以发展成为IDE为目标。它是使用Ruby,更准确的说是JRuby编写的。RedCar使用SWT作为GUI框架,这样使其能够跨平台使用。
内建的REPL使得程序员能够通过API来探索和发现更多的功能,现存的插件能够帮助程序员更加简单地扩展系统。实际上,RedCar也能够使用HTML/JavaScript进行扩展,而不是仅仅只使用SWT组件或者绘图API。
TextMate用户听到RedCar能够支持TextMate插件将会非常高兴,因为这将使得迁移工作更加轻松。
对RedCar的深入介绍以及如何扩展之类的信息都可以在InfoQ对RedCar创建者Dan Lucraft的采访记录中找到。RedCar Twitter账户或者博客都是获取这些信息的好场所。RedCar还可以和Ruby Gem共存。