
Selfie – Tiny self-compiling C compiler, RISC-V emulator and hypervisor - giancarlostoro
http://selfie.cs.uni-salzburg.at/
======
dang
A thread from 2017:
[https://news.ycombinator.com/item?id=13778353](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](https://news.ycombinator.com/newsfaq.html))

------
christophkirsch
@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.

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

~~~
christophkirsch
Thanks a lot, @amasad

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

------
jng
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!

------
lex0r
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.

------
Koshkin
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.

~~~
giancarlostoro
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?

~~~
kryptiskt
Oberon is implemented in itself:
[http://www.projectoberon.com](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.

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

[https://www.research-
collection.ethz.ch/bitstream/handle/20....](https://www.research-
collection.ethz.ch/bitstream/handle/20.500.11850/147091/eth-26082-02.pdf)

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...](http://concurrency.ch/Content/publications/Blaeser_Component_Operating_System_PLOS_2007.pdf)

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

------
msla
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*](https://en.wikipedia.org/wiki/C*)

~~~
topoyiyo
At least it's not mosdef C =P

~~~
microcolonel
Still doesn't shine a candle to Holy C.

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

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

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

------
triptych
Wish there was something like this for WebAssembly

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

~~~
christophkirsch
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.

------
rcgorton
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

~~~
christophkirsch
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...](https://github.com/cksystemsteaching/selfie/blob/master/semantics.md)

