Hacker News new | past | comments | ask | show | jobs | submit login
Selfie – Tiny self-compiling C compiler, RISC-V emulator and hypervisor (cs.uni-salzburg.at)
261 points by giancarlostoro on Feb 26, 2020 | hide | past | favorite | 29 comments



A thread from 2017: https://news.ycombinator.com/item?id=13778353

(Such links are for the curious. Reposts are ok after about a year: https://news.ycombinator.com/newsfaq.html)


@all Thanks a lot for your awesome comments and feedback.

Besides compiler, emulator, and hypervisor, there is a symbolic execution engine in selfie that we are working on and would love to get feedback from you. The goal is to teach, eventually, a more formal approach when reasoning about correctness already in undergraduate classes. But the engine is also a research vehicle, especially the bounded model checking part.


This is such a cool educational tool! I got it to run on repl.it https://repl.it/@amasad/selfie


Thanks a lot, @amasad

I pulled your PR and even plan to use repl.it in the upcoming compiler class.


Beautiful, beautiful project. Containing the deepest twists of computation in a single file, and not a single #include. I only missed it including a text editor. Love it!


I just looked into the project and the slides are incredible. It would be nice if more professors would put so much effort into creating slides and not just take over the previous one and present them.


I think Oberon would be a better candidate for this than C. You could get a tiny and extremely fast compiler for a full-featured programming language.


You can get a proper C compiler in 2KLOC [or under 5Kloc of assembly https://github.com/oriansj/mescc-tools-seed/blob/master/x86/... | https://github.com/oriansj/mescc-tools-seed/blob/master/x86/...] Covering things like gotos, inline assembly, structs, unions, arrays and dozens of types and primitives.

Oberon doesn't provide much advantage over that.


Funny because Selfie reminds me of a maximally compact version of http://www.projectoberon.com/


at the bottom of the linked page the author explicitly references oberon as a source of inspiration for this project


I'm looking into self-hosting compilers, is there a good link for Oberons code that achieves this? Or you just are mentioning that Oberon would probably be able to if one were implemented?


Oberon is implemented in itself: http://www.projectoberon.com

The implementation includes the hardware too.

Taken together, the system including single-tasking OS, windowing system and Oberon takes about 9000 lines of code.


Even better, A2/bluebottle is multithreaded with a ZUI and runs faster than Linux:

https://www.research-collection.ethz.ch/bitstream/handle/20....

Also, following on from A2, Composita introduces a component architecture to allow managed memory without GC, and contextless switches (IMHO better than Rust):

http://concurrency.ch/Content/publications/Blaeser_Component...


You might be interested in oberonc [0] an oberon-07 self-hosting compiler for the JVM.

[0] https://github.com/lboasso/oberonc


In particular, the code for this compiler doesn't use structs. It only works with offsets to memory blocks.


The C subset it compiles is called C* but it appears unrelated to the language of the same name created for the Connection Machine hardware:

https://en.wikipedia.org/wiki/C*


At least it's not mosdef C =P


Still doesn't shine a candle to Holy C.


Selfie, hypster, mipster, monster... these names are great.


Student here, with a question. How does one maintain a 10,000 line source file?


I maintain several such files with emacs. Jump to definition or open it in two windows makes it trivial.


Wish there was something like this for WebAssembly


No boolean operators?! That's an odd choice.


We chose not to include support of Boolean operators and instead ask the students to implement that as part of an assignment. We use a self-grader for that. There is an assignment for bitwise Boolean operators. The assignment for logical Boolean operators with lazy evaluation is work in progress.


It’s a cute little exercise, to implement the three Boolean operations using operations on integers.


What drivel. Make an artificial language which nobody uses, with a target architecture=X. Post it pretending that it is relevant. I Call BS on OP


The language is a strict subset of C modulo some small semantical differences that are relevant for bootstrapping, see https://github.com/cksystemsteaching/selfie/blob/master/sema...


It's a teaching aid for students. It's relevant.


It's not artificial, it is a C subset.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: