DIP1000
ZombineDev via Digitalmars-d
digitalmars-d at puremagic.com
Wed Aug 31 06:54:31 PDT 2016
On Tuesday, 30 August 2016 at 16:12:19 UTC, Andrei Alexandrescu
wrote:
> I'd like to initiate collaboration on an effort to do DIP1000
> rigorously.
>
> First we need to reduce D to a bare subset that only has
> integers, structs, pointers, and functions. That's a working
> subset of actual D code. The grammar I have in mind is at
> http://erdani.com/d/DIP1000.html.
>
> There is no type deduction, member functions, classes, arrays,
> constructors, loops, etc. etc. etc. Only the ability to create
> arbitrarily complex graphs containing integers and pointers to
> other nodes.
>
> On this language we need to define typing rules and evaluation
> semantics. Once we have those, we need to prove what we want:
> for scope variables the accessibility never outlives lifetime.
> As a consequence we're good to deallocate them early etc.
>
> The model for typing, evaluation, and proofs is at
> https://www.cis.upenn.edu/~bcpierce/papers/fj-toplas.pdf. It
> would be great if those interested in helping could give the
> paper a close read.
>
> Once we get this done we'll have a fantastic model for any
> other language changes.
>
>
> Andrei
BTW, the Rust Mid-level IR (MIR) has a similar purpose: it lowers
the complex AST to a sufficiently simpler one so that one can
more easily do things like lifetime analysis / borrow checking on
it. Similarly, Swift have a similar step in their compiler
pipeline for ARC.
I don't know if such intermediate representation in the DMD FE is
worth pursuing (obviously would be big development effort), but
it may be worth having a look to see how such IR analysis is done
in practice (on actual non-toy, non-purely academic languages),
even if only for checking that your theoretical model captures
sufficient information.
Here are some links, which I hope you would find helpful:
https://blog.rust-lang.org/2016/04/19/MIR.html (high-level
non-technical introduction)
https://github.com/rust-lang/rfcs/blob/master/text/1211-mir.md
(Rust RFC ~ equivalent of DIP)
https://news.ycombinator.com/item?id=10487502 (Presentation
slides about Swift's compiler pipeline)
More information about the Digitalmars-d
mailing list