X-Git-Url: https://git.ralfj.de/web.git/blobdiff_plain/fa00d89780c6a7e2add6a860b05fd3a0997b3e77..093d51990bbbf55e926d9a721b9b2219d1e03922:/personal/_posts/2017-05-23-internship-starting.md?ds=inline diff --git a/personal/_posts/2017-05-23-internship-starting.md b/personal/_posts/2017-05-23-internship-starting.md index 7a4eea0..c828316 100644 --- a/personal/_posts/2017-05-23-internship-starting.md +++ b/personal/_posts/2017-05-23-internship-starting.md @@ -1,5 +1,5 @@ --- -title: Day 1 of My Mozilla Internship +title: "Day 1 of My Mozilla Internship, or: How to Specify Program Behavior?" categories: internship rust --- @@ -37,7 +37,7 @@ That's it for now. I don't have the answers to these questions, but hopefully my work will help getting closer to an answer. I will keep you posted on my progress (or lack thereof), probably on a weekly or bi-weekly basis. -**Update.** I realized I should probably expand on the parenthetical remark about specifying MIR rather than specifying Rust. +**Update:** I realized I should probably expand on the parenthetical remark about specifying MIR rather than specifying Rust. What we are planning to do here is to specify Rust by specifying (a) how Rust code translates to MIR, and (b) specifying MIR. This has two advantages. First of all, part (a) actually is already done and implemented in the Rust compiler! @@ -51,3 +51,4 @@ Now, this is *not* to say that every Rust compiler has to use MIR in its compila It just means that the way I imagine a specification of Rust to look like is as consisting of two parts: The Rust-to-MIR translation, and a specification for MIR. If another compiler uses a different implementation strategy, it can still be compliant with the specification; it just has to ensure that Rust programs behave as specified. This is a common approach that can also be found, e.g., in the specification of CPU instruction sets: The specification describes the behavior of a complex instruction as a series of commands in some lower-level language. The CPU does not actually use that language as part of its implementation, but *it behaves as if it would*, and that's the only part that matters. +**/Update**