A couple of weeks ago I suggested a way of dynamic programming with IronPython. Essentially it is a combination of using a Smalltalk like System Browser to browse types using .NET reflection and embedding an IronPython interactive interpreter into the System Browser to manipulate the reflected types.
Why would I want to do this? While I really like Visual Studio, which I use for my day job, sometimes it takes forever to build a simple prototype or experiment with a new class library. For me, I want to see an app up and running as soon as possible, but at the same time leveraging class libraries and third party components. And I want to do this dynamically.
I am also one of those people that learn best by doing. While I can read the framework class library documentation till I fall asleep, (.NET 2.0 has 29,000 types in it!), I like to play with the types live and through some experimentation, find out how they work. Sure I can use Visual Studios Object Browser or Lutzs Reflector (even as an add-in to VS), but it is not suited for how I work.
Maybe I am old school, but I like the Smalltalk System Browser approach to software development. In .NET it is a little harder because the Smalltalk world was really simple, you had classes, instances and methods. Thats it. In .NET it is more complicated, but still what I am interested is inspecting an assembly for its types and for each type, what are its public properties, methods and events in other words I am using the System Browser as a way to work with the types, not just browse them. Having an IronPython console window embedded in the System Browser lets me play with those types dynamically. To me it is the best of both worlds, leveraging pre-built types to dynamically build my prototype or application.
As a side note, this blogs focus is on software industrialization. I have explained what that means in other posts, but one aspect of software industrialization I would like to point out is simplicity. The ability to browse libraries using the Smalltalk System Browser paradigm and then use those libraries interactively in the same window is simple.
The System Browser is initially built as a C# application, just to get parts of the code design down of what I want and in a language I already know. I am also mirroring the development of the application as a Python Windows application, which is what the final product will be. While I have run into a few problems, mostly my own, I have had excellent support from the folks at the IronPython forum. Of course, I have already made a fool of myself on the forum by repeatedly submitting a chunk of Python code that had a (read: my) mistake in it, which I missed on a couple of occasions. Maybe if I slow down a bit, I will see it before I submit it
Thanks to Dino, Vagmi and J. M. for being patient.
I should also point out that for Windows Forms programmers looking to get a tutorial on creating Windows Forms dynamically using IronPython, should look at Michael Foords excellent tutorials.
Back to the System Browser - maybe I will have something implemented in a couple of weeks or months. Stay tuned.