除了 Smalltalkers 之外,动态语言程序员使用的工具和 IDE 等都是用底层语言编写的。但是是对于用户(例如开发者)来说,使用原生开发工具是大有裨益的。例如如果编辑器和 IDE 是原生的话,这就意味着开发者能够即时扩展他们的工具,而不需要在另外一种语言和平台上浪费时间。Java 开发者现在有一大批 Java 原生 IDE 可供选择,而且均可以编写一些 Java 代码进行扩展。不过这种情况对于 JavaScript 和 Ruby 来说并不适用。 但是,两个新发布的 IDE 改变了这种现状:JavaScript 原生 IDE Cloud9 和 JRuby 原生 IDE RedCar 。
Cloud9 - Javascript
使用 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 - JRuby
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 共存。
评论