This page is for documenting discussions and resources on developing and collaborating on an IDE for Dynamic Language Runtime (DLR) languages. These IDE tools are focused on being easy to use, customize, and provide the basis for reuse in other projects.
The IDE tools should have the following as goals.
Not everyone will agree on all of the possibilities, so we should attempt to make each component as modular as possible.
There are many interested in an IDE that runs in Silverlight. Our goal is to make components (and perhaps the entire IDE) run in on-line and off-line modes. In on-line mode, a server application would be responsible for getting and saving files. A browser running Silverlight/Moonlight would interact with this server application. In off-line mode, the files would be handled by the native filesystem, and an application front-end would embed the components.
Cross-platform (Mac, Windows, Linux)
This requires the IDE to run the same on all of the major platforms. In practical terms this means it should run on the .NET framework and Mono.
It also strongly suggests that the UI for any desktop version should use Windows Forms (no WPF on Mono).
Debugging may be hard to do cross-platform. Would probably require different implementation for Mono and .NET.
Debugging will be especially important for beginning students. Ideally, it would be as easy to use as playing a movie... with Pause, Step, and Play buttons.
Nice 'standard' features to have would be the ability to introspect the values of variables in each stack frame - possibly modifying them as well. (Interactive console that allows you to execute code in the current stack frame like the Python pdb debugger.)
Simple to use, but scale-up with experience
Similar to IDLE (the IDE that comes with Python) DrJava, DrScheme, or Java Environment for Students (JES). The IDE should be extensible so that one could customize it.
Syntax-color highlighting and Command-completion
Syntax color highlighting is a must these days in order to give students some feedback about their program's structure. Command completition should be an option: is really useful when you have some experience, but can be a point of confusion for beginners.
It does not take much to implement Intelli-sense as there are several examples: DLR Console is one and the best one I have seen is Daniel's Silvershell
Elegant interface to exploit the DLR languages
Should have a unified console and editor views so that languages can be explored dynamically and interactively. Create an object in Python but use it in Scheme or Ruby.
The IDE should be usable with non-DLR languages as well. For example, you should be able to edit and compile a C# program, or use the editor to edit other kinds of files, such as HTML or XML. Additionally, there may be some .NET languages that are not integrated with the DLR yet. They would have their own engine and console.
Open and free
We want to make it available to everyone without any barriers.
Each component could have its own license. This may be required if we build on existing projects that already have a license. As long as these components can be combined, the license of any particular component can be independent. To facilitate this, components should exist in their own subdirectory, and be loaded at runtime or linked-in at compile time.
For new code, suitable licenses would include: Microsoft Public-License, BSD New License or the MIT License.
Project management (start simple - but I like the start that IronEditor has made in this regard).
Project management is almost a requirement for an IDE to be used with languages that need to be compiled, and would be useful for editing sets of dynamic programs. A standard "project file format" might be nice to have work across different editors/environments.
(Initially a project could just be a directory. We could save a custom 'project settings file' in the top-level of the directory when we actually need it.)
- Does the DLR output standard CLR debug symbols? Anyone have any pointers on debugging outside of Visual Studio or MonoDevelop?
- Would it be possible to share parts of an DLR IDE application with a web-based IDE using Silverlght as a Rich Internet Application (RIA)?
These links are provided for references to IDE-related topics.
- http://codeplex.com/DlrPad - console, rendered canvas, and xaml editor. selection box for language
- http://softwareindustrialization.com/WebbasedIDEsAndDynamicLanguagesOnNET.aspx - overview of IDEs for the DLR
- http://www.codeplex.com/sdlsdk/Release/ProjectReleases.aspx?ReleaseId=14254 - Jim Hugunin's DLR Console
- http://ligaz.blogspot.com/2007/11/dlr-pad-interactive-programming-with.html - on DlrPad
- http://www.codeplex.com/IronEditor - IronEditor sources
- http://blog.benhall.me.uk/2008/07/announcing-ironeditor-editor-for.html - Ben Hall's blog (IronEditor)
- http://code.google.com/p/silvershell/ - Daniel's Silvershell
- http://blogs.msdn.com/shawnfa/archive/2007/05/09/the-silverlight-security-model.aspx - The Silverlight Security Model
- http://silverlight.net/forums/t/20788.aspx - Silverlight security and the filesystem
- http://www.silverlight.net/QuickStarts/IsoStore/StoreData.aspx - Silverlight limited to writing to the cache
- http://devhawk.net/2008/07/17/IronPython+Post+20+Roadmap.aspx - on IronPython's roadmap