From: Scott B. <sb...@me...> - 2007-08-28 23:03:16
|
Darx Kies wrote: > Scott Balmos wrote: > >> Chad Z. Hower aka Kudzu wrote: >> >> >>> I'd like to make a few proposals. >>> >>> 1) We establish a loose but workable team structure which includes conflict >>> resolution. >>> >>> >>> >>> >> Someone will probably say this already exists. I don't know. My major >> recommendation right now is establishment of a build master, who owns >> the trunk. All changes should be done in local repos. When something >> should be promoted to the trunk, it is debated here, goes through a code >> check, and the build master normalizes the code to a coding standard >> before committing it to the trunk. Trying to get rid of William breaking >> the kernel again (heh), or our infamous problems of things compiling >> under Mono but not VStudio or vice versa. >> >> Between that, and API / architecture docs before you start coding a >> major piece. Everyone else can tell you how much I've grumbled lately >> about not being able to get my VM code going because the trunk repo got >> reworked, the base kernel's in flux, and the AOT is still buggy. :) >> >> > And now guess why I was begging for test cases and test cases and I > still do. > >> >> >>> 2) We establish a highly documented, well debated kernel design doc. Then >>> proceed to make the kernel rock solid before putting too much effort into >>> anything beyond the command line. >>> >>> >>> >>> >> I've been kicking for this for awhile. Currently it's more a code-first, >> write-architecture-later. The largest part of the system, the compiler, >> is AOT-only, and only one person knows its architecture. I've been very >> vocal about that. Don't know if Chriss has gotten anywhere with >> documenting the architecture. >> >> > Like I already said. The AOT itself is still subject to change, and > right now I am rewriting parts of it. > The code is partly documented and it does even have some inline examples > to make it more understandable > and I everyone that wants to understand it better just write me on IRC. > > >> Personally, I would halt all current kernel-related development, go back >> and tear back apart the compiler and get that completely rearchitected, >> redocumented, and retested. >> > That is what actually is happening right now, even though I had to > suspend the work on it for a while.... again. > > >> Start with reading in the source bytecode at >> a method level from multiple sources, whether it's a byte stream, file, >> whatever. This ensures an easy separation of code into an embeddable JIT >> engine, with the AOT system simply being a file-feeder shell. Convert to >> unoptimized IR code, then register transfer code. Spit out direct, >> unoptimized machine code from there. Possibly hand-verify if necessary >> the generated machine code. That way we know the basic compiler works >> and implements all CIL opcodes. Optimizations such as SSA, dead code >> elimination, loop unwinding, etc can all be implemented as transforms on >> top of the base IR code stream. From the testing I've seen, I can't tell >> whether bugs are in simple bytecode conversion or various IR >> optimization algorithms. They all seem to be intertwined currently. >> >> But I'm liable to get my head chopped off by Chriss for the above. :) >> >> > I am not that cruel. ;) > > The idea was actually to get something working ASAP so that the ppl that > wanted to work on the kernel > can do something too. That is why there are lots of generated test cases > for the x86 encoding but pertty few test > cases for the rest of the AOT. I would just suggest to look in the > source code for the TODO lines and there are > lots of them. Most of it was just implemented when an exception raised > because some part was not implemented > yet. And most of the time the trunk kernel was the main source of code > to test and develop the AOT. Johann and > William felt pitiful enough to write test cases.;) Thank you guys! > > What I am trying to say is that I am the only one that is working on it > and any help is more than welcome. > > Chriss. > Not to be chicken-and-egg, but almost all good test cases cannot be covered unless there was a set of overall architecture designs. And getting that written in writing, rather than saying "just talk to me on IRC", will ultimately benefit us more. Likewise with "just read the code". That's just not good enough with a multi-member team. Plus, how will we ever know whether we've written enough unit tests? You acknowledge that you're the only one working on it currently, and would welcome the help. Personally, I'd love to help, as compiler theory as well as OS design was my emphasis threads in college. But, as Bruce just noted in his email, everything's black box. You yourself once noted to me that most of the compiler design was taken from another project of yours that converted CIL to JavaScript, parts of which you can't release, and the architecture of which you don't clearly remember. :) Plus, seeing huge code files that are over 400k in size scares the crap out of anyone. Heck, you remember my first few weeks of talking. I couldn't follow much of anything, and it took longer for me to realize and remember various compiler optimization tricks such as SSA. Even now, you're rewriting the compiler. Okay, but again, what architecture? How is it designed, the flow of code from a bytecode stream into native platform code? etc. We won't truly know how to test it unless we know intimately how it is designed to work. That's the whole point behind writing a true written architecture document, posted up on our site. That way everyone knows how it works, everyone knows how to test it, and everyone knows (generally) where a fix would have to be made in what code transformation layer in order to fix a bug. Hence also my advocation of starting out with "raw, unoptimized" code. Layer on the optimizers one by one as they're tested, in order to minimize the number of variables when tracking down a bug. Again, yeah, we've got a working compiler now and it was produced "just to get things going". But now we're taking a step back, looking to see how well everything's designed in the first place (if at all), in order to make for a better long-term system. |