I'm not an expert C programmer. I could find my way, read and learn from the TCC source code. It reminded me of reading the source of SASH (the stand-alone shell) which is readable compared to DASH for example.
2. What I would do to learn more but it's not guaranteed to work a) I would try and learn how statements (in C) translate to assembly for a target platform. Maybe start with ARM or MIPS that is supposed to be easier than x86 asm. b) I would try and write a disassembler because I heard it's a good exercise. My experience is that compilers or how to write an interpreter is not a learn-by-doing ability. I would need to read and practice a lot before trying to do it. /Niklas Den ons 26 jan. 2022 20:28rempas via Tinycc-devel <tinycc-devel@nongnu.org> skrev: > **Huge post incoming!!!** > > Hi! I'm a beginner with low level programming and assembly. I'm interested > in learning > assembly so I can create my own (non-toy) compiler. Now, I'm a huge > fanatic for > TCC!!! I LOVE IT!!! I love it so much that it inspired my to create my own > compiler that > will output C code and then use TCC (or any C compiler to compile) it. > However, I thought about some things. > > 1. Compile times. TCC is the fastest non-toy compiler but my compiler > will add up to the compilation time because it will need to create > these C files. On top on that, the C programming language doesn't > use the best practices when it comes to header files as you have to > re-write the files end up on becoming slower not because of the > compiler > or the backend because because of the design of the language itself. > > 2. Having to deal with C. A lot of things of my language will not > translate to C > with the best possible way so it will be harder and I will need to > sacrifice the > compilation times and maybe runtime performance. > > 3. Optimizations. As we know, TCC doesn't make optimizations (or does it?) > so > the resulting code can run slower that GCC or Clang some times. This > means > that we will need to use 2 compilers in some projects to get the best > possible > performance while keeping the amazing fast compilation times of TCC. > > So what I thought was... "You know what? We don't I make a compiler that > will > create binaries itself? I will have the best possible compilation times > and I will > be able to apply the optimizations that I want!". Well that's a great idea > but there > are some problems. > > 1. This is HARD!!! Not only I must first learn assembly but I must also > read > the manufacturer manual for each CPU that I want to support. Also, even > across the same instruction set, Each operating system needs different > work to be done (I don't know, I suppose even OSes that use something > common like ELF will not work out of the box without any small change > right?). > So even for people that know assembly NOW and are very experienced > with it, > this will be very hard to do and maintain unless you are a genius and > I am NOT > one for sure (the exact opposite probably). > > 2. Where do I learn? I mean, resources about creating binary files in ELF > format > (or whatever each OS is using) and learning the CPU instructions don't > exist here > and there and even in the places where they exist, it is most of the > times, references > or things like manufacturer manuals which are not the best things to > study if you > don't have years of experience and you are already confident enough > with this topic. > > Ok this is getting too big, I will be sort. So after all that, I either do > my original idea > and output C code or I'm writing this email and hope for a reply. So what > I wanted > to ask from people that have work with TCC's code and know how assembly > works, > is TCC's backed tied with TCC's frontend? Will it be strain-forward If I > was trying to learn > some assembly and then trying to read TCC backend and then try to > understand how > it works and add my own frontend to it? What are your thoughts? > > _______________________________________________ > Tinycc-devel mailing list > Tinycc-devel@nongnu.org > https://lists.nongnu.org/mailman/listinfo/tinycc-devel >
_______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel