A too-long note on the presentation: I proposed that a number of features I want are interrelated, and in https://github.com/rust-lang/rfcs/pull/1617#issuecomment-220717843 @nikomatsakis suggested I open an internals thread if I wanted to discuss such things. Yet here I am writing in a GitHub repo. Why? A tension between three goals.
First I want to present these ideas together in one single post, as my main technical point is the way the concepts relate rather than the concepts themselves. If the features are sufficiently related, trying to tackle them all at once may be more productive, rather than a futile overextension of limited language design resources.
Second, this nevertheless proved to be such a huge post that I decided it would be better to release it in installments. The errors I’ll inevitably make would be best caught as soon as possible lest they derail my reasoning in the sections that follow them. And there’s always the risk I would get stuck and not finish. Finally, errors aside, whatever discussion the earlier sections generate will no doubt help in writing the later sections.
Third, it is unclear to me if Discourse publicly exposes posts’ edit history, and for anybody reading the thread it would be absolutely necessary to view the state of this proposal at the time a post was written.
So, I hope that with the github repo anybody can both read the proposal in its latest form, with all criticism and suggestions (hopefully!) taken into account, and also follow the thread, going through the git history as necessary. I’ll do my best to comment when I push a new commit.
This first installment lays out the kernel of what I propose, along with a (sized-indexed) uninitialized type. It may be a bit under-motivated on its own, but I hope what’s to come will fix that.