The Mendel Project
Overview
The Mendel project is my attempt to design a system for writing software that
doesn't depend on programming languages. Instead, it will allow programmers to
manipulate software in terms of abstractions rather than synax.
The Mendel project is named after Gregor
Mendel.
Current Status
So far it's just me and some Python scripts, so
don't get too excited.
My current task is to develop and implement an object model that will be used
to represent programs. Since
premature optimization is the root of all evil, I'm trying to come up with
something as simple and general as possible in order to make things as flexible
as possible. Here are my latest thoughts on the subject.
Development Roadmap for Version 1.0
The first stage of development must follow a fairly linear sequence of steps.
The end of this sequence will be version 1.0.
- Develop and implement an object model for Mendel. (Done?)
- Define a set of objects to represent Python programs.
- Add functionality to tranlslate Python programs into Mendel objects.
Fortunately that hard part (parsing Python) is already available as an API of
the Python runtime system. This will be a good proof of concept for the object
model and will provide a source of non-trivial objects for testing.
- Make the Mendel-ized Python programs capable of executing themselves. This
sounds hard, but it just involves having the Mendel objects "un-parse"
themselves into Python code and call the Python interpreter. At this point the
Mendel system is just a very baroque Python interpreter that works by parsing
Python code, unparsing it, and then passing the result to the real interepreter.
- Implement persistence for Mendel objects. Make sure it is CVS-friendly. Add
a UI for parsing Python code and saving the result as a file and a UI for
executing a set of Mendel objects stored in a file.
- Use the parsing UI to translate the Mendel code base into a file containing
Mendel objects. Use the execution UI on the resulting file to re-parse the code
base into a different file. If the files are the same, the Mendel system can run
itself.
- Write a GUI for editing Mendel objects. This will use the wxWindows library for platform independence
and because it has a Python binding available.
- Write a Python parser that preserves comments.
- When the GUI is mature enough, switch all development over to using Mendel
objects rather than Python source. This can be done in a single step using the
comment-preserving parser. This is version 1.0!
Future Directions
After version 1.0 there are several different features that can be added more or
less independently. This is where I could use some partners.
- Define a "core language" of Mendel objects that can be translated to C or
C++ as well as translations for Mendel-ized Python objects into the core
language. This will end the reliance on the Python runtime system.
- Refine the GUI. Make it easier to use than a text editor.
- Create Mendel objects for non-Python language constructs capable of
translating themselves into the core langauge or Python constructs.
- Add parsers for languages other than Python.
- Integrate with the Mozart project.
- Add platform-specific extensions.
- Add a native revision control system. This will pave the way to representing
Mendel objects in space-efficient binary formats and database schemas rather
than being restricted to CVS-friendly text files.
Links
Here are some links that may or may not be relevant. I haven't really checked
them out yet.
- Mozart
- the Cecil
language; interesting object semantics
- Eidola
- Fabrik
- Cube
- dmoz.org: visual
programming languages
- dmoz.org:
metaprogramming
Last update: $Date: 2002/09/10 15:57:54 $