Tiny C

I've stumbled an interesting project called Tiny C which claims to be much faster than GCC, which can only be a good thing (and trusting their compilation time tables yields some impressive speed improvement). But what's really interesting about it is that was originally written in obfuscated C code... I took a look at the original version and geez, amazing how there's a compiler behind. However, it is also an awesomely small compiler you can use if you don't want to install all the GCC stuff or only have a windows system and mingw is too annyoing for you. It has the same command line options and also some compatibility with GCC's own features, so you can start compiling a lot of stuff on you own. But that's the only thing it really gives you. It has fast compilation speed, kann directly execute C code files from scratch and even command line, but doesn't support as much candy as GCC has. Well, you can't get all that nice stuff in such a small package. There are also not many optimization done except constant propagation and some cache twiddles. So what you get is a quite direct code and I think that's what counts at all. It's probably really cool for testing your own code with and so on. I think I'll use it as my main compiler for normal Windows development, so that I don't have to get my head into mingw again. Nothing against mingw, but I just don't like it, no idea why. However, Tiny C is also only a one-pass compiler, meaning there's no abstract intermediate used to apply several optimization tricks, platform-specific commands and so on. Reading about makes me realize how appealing the idea of bytecodes must be for developers. Of course does my programming language, in concept, base on a bytecode, but I'm DIRECTLY translating to the bytecode as every command listed is a bytecode instructions. It's cool to see Tiny C having non of this - small, fast and efficient in the task it's designed for. Just like I love a program in concept. Though too bad that the interesting thin about is also it's most weak spot: no assembler output, no optimizations.

No comments: