Tiny C Compiler

60 pointsposted 2 hours ago
by guerrilla

22 Comments

kimixa

23 minutes ago

Man I can't wait for tcc to be reposted for the 4th time this week with the license scrubbed and the comment of "The Latest AI just zero-shotted an entire C compiler in 5 minutes!"

haunter

an hour ago

There is an actively maintained fork with RISC-V support and such

https://repo.or.cz/w/tinycc.git

https://github.com/TinyCC/tinycc

csb6

42 minutes ago

I've never seen another repo with public commit access like that. I guess the project is niche enough that you don't get spammed with bad or malicious commits.

haunter

35 minutes ago

Yeah it's basically anarchy (to some extent)

https://repo.or.cz/h/mob.html

>The idea is to provide unmoderated side channel for random contributors to work on a project, with similar rationale as e.g. Wikipedia - that given enough interested people, the quality will grow rapidly and occassional "vandalism" will get fixed quickly. Of course this may not work nearly as well for software, but here we are, to give it a try.

einpoklum

27 minutes ago

It is also interesting to note that while the repository is quite active, there has not been any release for _8 years_, and the website is the same one at the top of this conversation, i.e. the one where the old maintainer says he quit and the benchmarks are from 20 years ago.

A small and minimalistic C compiler is actually a very important foundational project for the software world IMNSHO.

I'm definitely reminded of: https://xkcd.com/2347/

markus_zhang

5 minutes ago

I mixed it up with LCC which was used in Quake 3. Still this is pretty cool.

kristianp

23 minutes ago

Does anyone use libtcc for a scripting language backend? Smaller and faster than llvm. You'd have to transpile to a C ast I imagine.

kgeist

5 minutes ago

Years ago I built a scripting language that transpiled to TCC and then compiled to machine code in memory. It produced human-readable C code so it was very easy to get going: when debugging I could just look at the generated C code without having to learn any special infrastructure/ecosystem/syntax etc. Plus basically zero-overhead interop with C out of the box (although a few differences in calling convention between TCC and GCC bit me once). Another feature I had was "inline C" if you wanted to go low level, it was super trivial to add, too. It was pretty fast, maybe two times slower than GCC, IIRC, but more than enough for a scripting language.

olivia-banks

18 minutes ago

libtcc doesn't give you much control AST wise, you basically just feed it strings. I'm using it for the purpose you mentioned though--scripting language backend--since for my current "scripting-language" project I can emit C89, and it's plenty fast enough for a REPL!

    /* add a file (either a C file, dll, an object, a library or an ld script). Return -1 if error. */
    int tcc_add_file(TCCState *s, const char *filename);

    /* compile a string containing a C source. Return non zero if error. */
    int tcc_compile_string(TCCState *s, const char *buf);

olivia-banks

21 minutes ago

TCC is fantastic! I use it a lot to do fast native-code generation for language projects, and it works really really well.

deivid

42 minutes ago

TCC is fantastic! Very hackable, easy to compile to WASM for some interesting in-browser compilation

throwatdem12311

an hour ago

This was the compiler I was required to use for my courses in university. GCC was forbidden. The professor just really liked tcc for some reason.

mort96

40 minutes ago

Seems like a good way to get students to write C rather than GNU C.

uecker

23 minutes ago

TCC - just like many other C compilers - supports many GNU extensions.

einpoklum

24 minutes ago

The professor could have just insisted on `-std=c99` or a similar GCC flag which disallows GNU extensions.

When I taught programming (I started teaching 22 years ago), the course was still having students either use GCC with their university shell accounts, or if they were Windows people, they would use Borland C++ we could provide under some kind of fair use arrangement IIANM, and that worked within a command shell on Windows.

rustyhancock

an hour ago

What a blast from the past TCC!

Sad but not surprised to see it's no longer maintained (8 years ago!).

Even in the era of terabyte NVMe drives my eyes water when I install MSVC (and that's usually just for the linker!)

pkal

an hour ago

I don't think it is not maintained, there is plenty of activity going on in the repo: https://repo.or.cz/tinycc.git, they just don't seem to be cutting releases?

shakna

16 minutes ago

Still maintained. You have the mob repo in another comment.

Debian, Fedora, Arch and others pull their package from the mob repo. They're pretty good at pulling in CVE fixes almost immediately.

Thomas Preud'homme is the new maintainer lead, though the code is a mob approach.

antirez

an hour ago

That is, I believe, one the points of AI and Open Source many contacts. Something like TCC, with a good coding agent and a developer that cares about the project, and knows enough about it, can turn into a project that can be maintained without the otherwise large efforts needed, that resulted into the project being abandoned. I'm resurrecting many projects of mine I had no longer the time to handle, like dump1090, linenoise, ...