Dynamic Language IDEs: Aptana Ruby and DLTK Ruby
Few developer would attempt to write Java oder C# code without an IDE that assists with code completion, an intelligent formatter or automated refactoring. In the dynamic languages world, the case isn't so clear.
One reason is certainly the lack of tools that are on par with their static peers, simply because building tools for dynamic languages is much harder. Fortunately, programs written in these languages generally tend to be shorter and less verbose than for example in Java.
Still, sometimes it is handy to have an integrated development environment that covers all daily tasks of a developer, starting from the interaction with the source code management tool, navigation in the project files, but also compiling, debugging and deployment of the project.
For this series, we interviewed several people who work on IDEs for dynamic languages, to give an overview and a feeling on the current state of these IDEs.
We assume that all IDEs handle the basics like highlighting and therefore put our focus on more sophisticated features like refactoring. The ability to do automated refactoring is a good indicator for the maturity of an IDE because it involves detailed and non-trivial analysis of the source code and is one of the features a language-agnostic editor cannot provide easily and without third-party tools.
The Eclipse based Ruby development tools have been around for many years and were widely used, particularly in Rails development through the extensions provided by RadRails. RDT and RadRails have both been integrated into Aptana Studio some time ago, and RDT's main developer, Chris Williams, has been hired by Aptana.
There wasn't much visible activity on Aptana's Ruby Studio, so we caught up with Chris to learn what's currently happening:
For the past 6 or 7 months now I've been working on our new offering: Aptana Cloud. I've been doing all of the work on the API/server that coordinates between Aptana Studio, the 3rd party hosting provider(s), and the actual boxes themselves that host the websites. As a result I haven't been able to commit as much time as I normally do to Ruby support or RadRails. Over this time I've basically been doing some bugfixing and starting to integrate some Cloud support into the tooling when I find small pieces of time. Now that Cloud is officially out I'll be working on getting Rails supported and then I'll be able to go back to RDT/RadRails more or less full-time.
Chris also told me that they are looking for more people to hire, "to make sure that we can keep development steadily going on the plugins". Ruby developers who want to extend their IDE don't have to program Java:
We do have a plugin that allows end users to write Ruby code against a small set of the Eclipse Editor API - so people could actually help out quite a bit by writing small macros/scripts with that if they only know Ruby. And if they're a JRuby expert then they could probably write their own extensions to hook into with Ruby and access the full Eclipse APIs.
Note: the JRuby Eclipse scripting functionality was discussed previously on InfoQ.
Well we're always looking for what the community would like in terms of web development plugins. If we see enough support out there we'd certainly pursue it. We're all ears: let us know what you'd like to see.
The next step involves moving the Studio to the current Eclipse Ganymede release, "add some more advanced Cloud support, fix more big bugs and then in the 1.3.x RadRails timeframe I'll probably be able to take a breath and plan out what's next again."
The Ruby development tools have had refactoring support for quite some time now, implementing for example various rename refactorings, extracting, moving and inlining of methods. While the refactorings aren't fool proof and correct for all situations, they work for most common cases and are a huge improvement over doing manual copying and pasting (note that the author of this text worked on the implementation).
The dynamic languages toolkit is in an interesting position insofar as they try to unite all reusable components a dynamic language IDE on Eclipse needs into one framework and hence make it easier to implement support for a new language. The Ruby is one of the oldest DLTK languages and, together with TCL, belongs to the core of DLTK.
Sadly, there wasn't much visible activity in the DLTK, so I talked to its project lead Andrey Platov:
Talking about TCL, we think DLTK TCL is already one of the best TCL IDEs around. We're polishing the implementation and are working on integration with TCL interpreter vendors. Such work is not much visible in fact.
As for Ruby (and DLTK in general): First of all, DLTK (including Ruby component) is a platform: we had no intention to cover all the end-user requested features from the beginning. For example, we never had a plan to provide any kind of Ruby on Rails support, etc. The goal for DLTK Ruby is to provide solid and clean Ruby language foundation for other vendors building full-featured tools on top of it. One good example is the comprehensive Ruby IDE called 3rdRail from CodeGear, which is built on top of DLTK Ruby.
All of above does not mean DLTK Ruby is useless standalone. Being a great tooling to work with Ruby source code it's used by many language enthusiasts. So we do not force developer to Ruby on Rails style neither force him to say RSpec... Just pure language, and creativity of the developer. From other side such a "clean" IDE gives a great opportunity to vendors to build products that would support frameworks and technologies of their choice, and they already have first class language support for free.
Back to your question, our current work is just make DLTK Ruby to "understand" language better and deal with Ruby sources better.
"Just try the code complete feature", Andrey points out. For the future, plans are to improve the language support, for a "better understanding of Ruby, like code analysis, refactoring, quick-fix features".
From the DLTK side, no additional language support is planned right now, but they "are consulting some companies doing IDEs for their languages". And, according to Andrey, "PHP Development Tools (PDT) 2.0 will be released on top of DLTK". There are also DLTK based IDEs for ANTLR, Lua, D, Perl and Scheme in the making. The various DLTK builds and packages are available on the Dynamic Languages Toolkit downloads site
This news item is part of our ongoing series about dynamic language IDEs. The other parts can be found under the "DynamicLanguageIDEs" tag at InfoQ. If you haven't read enough about Ruby IDEs yet, you might want to take a look at InfoQ's articles on Netbeans' Ruby support: Part 1, Part 2.