diff options
Diffstat (limited to 'miniany/doc/achacompilers.blogspot.com_2015_09_a-smaller-better-compiler-suite.txt')
-rw-r--r-- | miniany/doc/achacompilers.blogspot.com_2015_09_a-smaller-better-compiler-suite.txt | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/miniany/doc/achacompilers.blogspot.com_2015_09_a-smaller-better-compiler-suite.txt b/miniany/doc/achacompilers.blogspot.com_2015_09_a-smaller-better-compiler-suite.txt new file mode 100644 index 0000000..9ac1995 --- /dev/null +++ b/miniany/doc/achacompilers.blogspot.com_2015_09_a-smaller-better-compiler-suite.txt @@ -0,0 +1,179 @@ + #[1]Andrew Chambers on Compilers - Atom [2]Andrew Chambers on Compilers + - RSS [3]Andrew Chambers on Compilers - Atom + +[4]Andrew Chambers on Compilers + +Monday 7 September 2015 + +A Smaller, Better compiler suite. + + You should be able to get a C compiler, assembler, linker and libc for + any supported target in less than 30 seconds just by typing make... Or + at least thats my plan. + I have started work on a BSD licensed simple but powerful C compiler + suite here [5]https://github.com/andrewchambers/c (A C + port/continuation of my now frozen [6]Go based C compiler). After a few + months of work in my free time the compiler is building some non + trivial [7]test cases on amd64 Ubuntu, but no real software. + I encourage you to clone it and have a play around. + Some general goals I have in mind are: + * Compile times that are 2 - 5 times faster than gcc or clang. TCC is + 10 times faster, but does not have text assembly or an AST. + * Be one to two orders of magnitude smaller than gcc and clang/llvm. + For every million lines of gcc code, we could have ten thousand + line of code. + * Emit assembly that has performance at least equal to tcc. This is a + modest performance goal so we don't focus prematurely on this over + compatibility. + * Have the whole system build from source in less than 30 seconds + (probably much less) on a modest desktop machine or even low end + arm systems. + * Be zero config compatible with the excellent [8]Musl libc on Linux. + + To answer why I would start a new compiler suite from scratch, perhaps + the following will resonate with you. + +[9]GCC and [10]Clang: + + GCC is large and complicated and non standard. Generally porting it is + difficult and out of reach of hobbyists. Building these compilers from + source requires 20 minutes to many hours. LLVM and Clang suffer from + the same issues and they have added CMake to the list of things I can't + get behind. + For most of my use cases I question the need for hundreds of thousands + of lines of optimizer code. I think the Google Go toolchain + stdlib's + 30 second build proves this nicely. I would prefer a simple C compiler + written in C, to a complicated C++ compiler written in C++ supporting + all of C++ with C on the side. + Bootstrapping these cross compilers with working libc's is so + complicated/arcane there are dedicated tools like buildroot and + crosstool-ng just to manage the complexity. + Both these compilers also seem to require more ram and cpu to self host + than modest hardware or emulators like qemu can provide. This is + actually a serious barrier to overcome when trying to work with many + platforms. + +[11]TCC: + + TCC is extremely fast and small, I generally use tcc as my primary C + compiler when I don't want to deal with GCC. I have two issues with + this compiler. + I don't think I am alone in saying the code style is terse, hard to + understand. Perhaps it was written with speed alone in mind, perhaps + the lack of AST has allowed some ugly hacks into the code base, or + perhaps my taste is just different. I would encourage you to make these + judgement call for yourself by comparing code. + The major limitation however, is that because TCC emits binary directly + with no text assembly, it is much harder to use with some hobby systems + which have existing assemblers. This was the main deal breaker for me. + +[12]PCC and [13]8CC: + + PCC is old, mature, and generates good code and can build real + programs. 8cc is simple and self hosting with a small and nice code + base. + These are the best candidate's so far to meet my goals. All I can + really say is I think we can take the best ideas from these projects, + and have no problem sharing code/design in order to create the best + system possible. + Posted by [14]andrewchambers at [15]21:01 + [16]Email This[17]BlogThis![18]Share to Twitter[19]Share to + Facebook[20]Share to Pinterest + +2 comments: + + 1. [21]beza1e1[22]20 September 2015 at 11:37 + You might want to check out cparser/Firm: + http://pp.ipd.kit.edu/firm/ + Reply[23]Delete + Replies + 1. [24]andrewchambers[25]20 September 2015 at 17:01 + The parser alone is 40k lines of code in cparser. This strikes + me as a bit odd considering tcc including 7 or 8 ports + including assemblers and some linker code is less than 40k + lines of code. + libfirm itself is nearly 200k lines of code. To me that is + crazy even for an SSA backend. Consider the Go toolchain which + has just added an SSA backend for a language more complicated + than C, this backend is 20k lines of code, or 10 times + smaller. + [26]Delete + Replies + Reply + Reply + + Add comment + Load more... + + [INS: :INS] + [27]Newer Post [28]Home + Subscribe to: [29]Post Comments (Atom) + +About Me + + [30]andrewchambers + + [31]View my complete profile + +Blog Archive + + * [32]v [33]2015 (5) + + [34]|> [35]December (1) + + [36]|> [37]October (1) + + [38]v [39]September (3) + o [40]Compiler Warnings Considered Harmful + o [41]Calling conventions are hard - Fuzz them! + o [42]A Smaller, Better compiler suite. + + Awesome Inc. theme. Powered by [43]Blogger. + +References + + Visible links: + 1. http://achacompilers.blogspot.com/feeds/posts/default + 2. http://achacompilers.blogspot.com/feeds/posts/default?alt=rss + 3. http://achacompilers.blogspot.com/feeds/4663521962662796311/comments/default + 4. http://achacompilers.blogspot.com/ + 5. https://github.com/andrewchambers/c + 6. https://github.com/andrewchambers/cc + 7. https://github.com/andrewchambers/c/tree/master/test/execute + 8. http://www.musl-libc.org/ + 9. https://gcc.gnu.org/ + 10. http://clang.llvm.org/ + 11. http://bellard.org/tcc/ + 12. http://pcc.ludd.ltu.se/ + 13. https://github.com/rui314/8cc + 14. https://www.blogger.com/profile/02753522013571524462 + 15. http://achacompilers.blogspot.com/2015/09/a-smaller-better-compiler-suite.html + 16. https://www.blogger.com/share-post.g?blogID=2925495181711940273&postID=4663521962662796311&target=email + 17. https://www.blogger.com/share-post.g?blogID=2925495181711940273&postID=4663521962662796311&target=blog + 18. https://www.blogger.com/share-post.g?blogID=2925495181711940273&postID=4663521962662796311&target=twitter + 19. https://www.blogger.com/share-post.g?blogID=2925495181711940273&postID=4663521962662796311&target=facebook + 20. https://www.blogger.com/share-post.g?blogID=2925495181711940273&postID=4663521962662796311&target=pinterest + 21. https://www.blogger.com/profile/15355537726732337830 + 22. http://achacompilers.blogspot.com/2015/09/a-smaller-better-compiler-suite.html?showComment=1442774253666#c6174610279568287140 + 23. https://www.blogger.com/delete-comment.g?blogID=2925495181711940273&postID=6174610279568287140 + 24. https://www.blogger.com/profile/02753522013571524462 + 25. http://achacompilers.blogspot.com/2015/09/a-smaller-better-compiler-suite.html?showComment=1442793668132#c7584064544028773629 + 26. https://www.blogger.com/delete-comment.g?blogID=2925495181711940273&postID=7584064544028773629 + 27. http://achacompilers.blogspot.com/2015/09/calling-conventions-are-hard-fuzz-them.html + 28. http://achacompilers.blogspot.com/ + 29. http://achacompilers.blogspot.com/feeds/4663521962662796311/comments/default + 30. https://www.blogger.com/profile/02753522013571524462 + 31. https://www.blogger.com/profile/02753522013571524462 + 32. javascript:void(0) + 33. http://achacompilers.blogspot.com/2015/ + 34. javascript:void(0) + 35. http://achacompilers.blogspot.com/2015/12/ + 36. javascript:void(0) + 37. http://achacompilers.blogspot.com/2015/10/ + 38. javascript:void(0) + 39. http://achacompilers.blogspot.com/2015/09/ + 40. http://achacompilers.blogspot.com/2015/09/compiler-warnings-considered-harmful.html + 41. http://achacompilers.blogspot.com/2015/09/calling-conventions-are-hard-fuzz-them.html + 42. http://achacompilers.blogspot.com/2015/09/a-smaller-better-compiler-suite.html + 43. https://www.blogger.com/ + + Hidden links: + 45. https://www.blogger.com/post-edit.g?blogID=2925495181711940273&postID=4663521962662796311&from=pencil + 46. https://www.blogger.com/comment/frame/2925495181711940273?po=4663521962662796311&hl=en-GB |