Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
I'm going to embark upon something ambitious here. I got an email from Mike, our friendly support engineer on the east coast with the subject line "Need lots of info". Apparently he was contacted by a customer who wants to implement a new script engine that supports debugging, and, here's the part that you've got to really grit your teeth over: in C#.
My initial response was, of course, "They're crazy -- talk them out of it!" Not to put too fine a point on it, that's an immense amount of work in any language. But C#? The script interfaces were designed long, long before there was managed code. It's quite likely that it's going to be very hard to write a straightforward interop layer for those interfaces. "Could they use the managed IVsa interfaces instead?" I asked Mike.
I haven't heard back yet, but I got to thinking last night that maybe it would be interesting to develop a script engine from scratch, describing every interface as I implement it, giving some of the design history behind the interfaces, etc, etc, etc. I could start it in C++ and then see whether there were ways to make it work well in managed code, etc.
I could then blog a little bit of the code every few days. This would keep me in blog topics for weeks, certainly. Probably months. All of this stuff happens in my spare time, and I have precious little of that, particularly given the number of bugs I have to fix before the Whidbey beta. But I'll see what I can do.
I'm not sure that a piecemeal daily blog approach is even the right way to handle this kind of material, but I'm willing to make the experiment.
This is probably how it will go:
Phase One: Basic Infrastructure- dll entrypoints- registration- class factory- engine skeleton
Phase Two: Building the engine- script engines as state machines- threading concerns- named items- event handling
Phase Three: Processing the language- grammar- lexer- parser- code generator- interpreter- runtime library
Phase Four: Debugger support- breakpoints- evaluation- syntax colouring- context
Phase Five: Managed Code- ?
That's just off the top of my head. We'll probably mix it up a bit as we go.
Loads of interesting stuff. No Links thoug to jump from blog to blog, (i.e. Next Chapter)