Go Forth
Theory can leave questions unanswered, but practice has to come up with something.
-- Mason Cooley
In Language-Centric Software Development
I propose a methodology
based around an embedded scripting language. I have outlined
the benefits of that approach. Now I will demonstrate
that methodology, and its benefits, in a concrete example over a series of articles.
Goals
- To demonstrate the benefits of language centric design
- To show how proper use of the STL can make an application
easier to write, maintain and change.
- To demonstrate the benefits of Extreme Programming.
- To have fun.
Application
I still haven't decided on which of the three following
projects I will end up doing. They are all projects I have
wanted to build for a long time.
- A simple drawing program, along the lines of
LOGO. An easy to use tool I can use to introduce programming to my children.
- A testbed for generating and receiving SOAP messages.
- A system like StarLogo for simulating massively parallel systems, such
as ant colonies.
The language I am implementing will start out as a sub-set of
Forth. If you are unfamiliar with Forth please see any one of these tutorials
courtesy of Google.
Forth
After working on many software projects over the past 10 years
I have found a general resistance among software engineers for
implementing a language in a product. All of the resistance
comes from a fear of languages. Call it language anxiety. We all took
our comparitive programming languages classes and were bombarded
with finite automata, parsers, and lexical anayzers. The only thing
the course drives home is that implementing a language is tough
and tricky work and best left to the experts, which is a load of bull.
Now the theory is important and depending on how far you want to
take your embedded language you may need a parsers or lexical anayzer.
But you should only bring in those tools once you know you need them.
Forth is a small language, easy to implement and very fast
to execute. It is a good stepping stone to higher languages.
Extreme Programming
I will be following some of the tenets of Extreme Programming.
Since I am writing this from my home computer
after the whole family is in bed, pair programming is out.
The major Extreme Programming practices I will be following are:
Details
This project will be written in C++.
The compiler I will be using is Borland C++ 5.5 (Freely downloadable from Borland.com)
but the code should compile under any ANSI/ISO compliant C++ compiler.
Boost Jam will be used for the project maintenance.
CVS for version control.