{
"$type": "site.standard.document",
"canonicalUrl": "https://deterministic.space/rust-2019.html",
"path": "/rust-2019.html",
"publishedAt": "2019-01-04T00:00:00.000Z",
"site": "at://did:plc:x67qh7v3fd7znbdhauc45ng3/site.standard.publication/3mjcd2t6afe25",
"textContent": "The Rust project is [asking] for blog posts\nabout what the community would like to see happen with Rust in 2019.\nI originally wanted to write this post before Christmas,\nbut instead I took some time off\nto meditate on what exactly I wanted to write\n(mostly by laying in bed, sick).\n\nIn the meantime,\na lot of people have written their Rust 2019 posts.\nFor example, I really liked [fitzgen's post],\n\"Think Bigger\",\nbecause it looked at a few common areas from a new perspective.\nVery interestingly,\nmany people have also written about\nhow we need to tackle organizational issues\nand should not pursue/focus on technical features this year\n(cf. [boat's post] and [mgattozzi's post]).\n\nI already [tweeted] a short teaser\non what I had in mind for the roadmap,\nwhich I want to expand on in this post.\n\nUnlock the next levels for Rust\n\nThinking about Rust's evolution like a video game (heh),\nwe have just reached level 2018.\nOur programming language is in a good state\nbut there are a lot of progress bars for features\nwhere we need to get a few more experience points\nto unlock a new ability.\n(But let's not stretch that metaphor too far.)\n\nThe first part of my tweet was:\n\n> Rust 2019: Get experimenting on the next big things. \n\nWhat I want to set as goal is:\nAt the end of the 2019,\nwe should be at a point where we have\na list of _new_ things we want to be working on.\n\"New stuff\" is\nstuff we may have only considered in passing so far,\nbut where no implementation exists today.\nBut also,\nthings we do not even consider\n\"something that is great in Rust\"\ntoday.\n\nWhat\n\nThis is super abstract!\nIn fact,\ncan you quickly say what concrete things you thought of\nwhen you read \"new things\" above?\n\nDid you think about the emergence of an idiomatic GUI library?\nDid you think about new working groups?\nDid you think about having const generics?\nDid you think about RFC process version 2?\nDid you think about having a having super fast debug builds?\nThose are all valid!\n\nThat is pretty much the point of this post:\nIt might feel like with the release of Rust 2018\nwe have reached a solid point in the evolution of the ecosystem.\nBut to me it feels more like we are on a plateau\nin front of the next ascent towards the mountain top.\n(See below for a mathematically precise illustration of that metaphor.)\n\nAnd that is what I mean with \"unlocking the next level\":\nWe should spend 2019 trying to do our best to\nsolidify our bases,\nget an understanding what is possible,\nand then look ahead and try to realize these possibilities.\n\nHow\n\nHow can we get there?\nMy tweet contained a multitude of short phrases\nthat you may read as suggestions:\n\n> Finish features. Streamline processes. Unblock new feature development. Go for experiments with high dividends, allow failures. Get an idea what Rust 2021 might be about.\n\nFor every roadblock we clear,\npeople will be able to do new things,\ngo further.\nAnd eventually discover new roadblocks, of course.\n\nOne approach is to collect feedback from current users,\nlook at the issues they have,\nand try to fix them.\nWhen these issues are resolved,\nlet people use the new version,\ncollect their feedback again and repeat the whole thing.\n\nAnother idea is to shorten the feedback cycle\nby only prototyping the fixes,\nand immediately try and have people use and test it,\nto figure out what they want then.\nThis works quite well when starting with a new project,\nbut typically gets more and more difficult when you have an already established basis.\n\nWho\n\n> This is not a black and white picture of course. People already have experiments going on in all kinds of areas.\n\nA super precious resource in large projects\nis the time, space, and acceptance to do experiments.\nI have seen how time and time again\ntruly magical progress was made in mere hours or days,\nwhen the right people got together at the right point in time\nand had the chance to sit down and work on an issue[^2].\nThis tends to only works for a few scenarios, however.\nGetting an initial proof of concept going,\nbrainstorming around conceptional roadblocks,\nfor example.\n\n[^2]: I'm already super hyped for the Rust All Hands in Berlin in February!\n\n> The communication around Rust in 2018 was about \"getting things over the finish line\" however.\n\nI have a feeling that\nthe people who like to work on open source projects\nwith the goal to \"ship features\"\nare often not the same people\nwho want to do open source to experiment\nand try out new things.\nWhich makes total sense to me:\nThe reward for former is being part of an official product release[^1]\nwhile the latter allows one to play around with cool ideas\n(hopefully in the company of clever people one can learn from).\n\n[^1]: Rust is seen as being notoriously difficult, so being able to say \"I contributed to Rust 2018\" has some weight to it on a CV.\n\nSo,\nlet's try keep in mind that there are different stages in projects,\nand that different people want to participate in different capacities.\nWhile switching to a \"feature freeze and stabilize\" year\nmight give us the chance to have an easier time with planning ahead\nand organizing what the teams will focus on,\nwe might also lose and important segment of contributors.\nAdditionally,\nwe might not lose these people\nbut in fact might see them skip over the whole structure we build\nand work on what interests them regardless of our plans.\n\nRight now,\npeople have a desire to be recognized as part of official teams,\nand try to help out by founding their own working groups,\nfor example.\nThis is very valuable\n-- yet super hard to manage and keep track of.\nSee also [Florian's posts]\nthat resonated a lot with me\n(and that I just saw after writing this paragraph).\n\nWhat again?\n\nSorry, this post drifted off towards a place\nwhere it was more about me reflecting about change itself\nbut it doesn't answer what we should do next week.\nMaybe I can save it by quickly writing down a list\nof cool, concrete things we could do?\n(This is heavily biased\nby my involvement in the dev tools team\nand personal interests,\nof course.)\n\n- Continue [rust-analyzer]\n with the goal of sharing code with rustc\n but also get to a point where it is easy to contribute to the next version of RLS\n- Enable projects to contain custom lints\n (that might actually re-use some of the then-external compiler libraries)\n- More powerful rustfix:\n Fix clippy lints, as well as deprecation warnings,\n and allow migrating to newer idioms but also new versions of libraries!\n- Improve rustdoc (cf. [grey's post])\n- Experiment with new approaches to getting data from the compiler\n (or even rust-analyzer)\n to enable people to write their own interfaces to discover APIs\n (be it \"rustdoc2\" or a thing that draws nested modules and types in VR)\n- Play with different approaches to managing an RFC process\n that works at Rust's scale\n- A push for more work on custom test frameworks,\n to get to a usable and interesting state\n where the community can get more involved\n- Stabilize async/await and then go ahead and tackle generators, too\n- Look at how we would (re)write some APIs once we have associated type constructors\n- Experiment with alternative compiler backends --\n be it running everything in [miri] or using [cranelift] for debug builds\n\n[asking]: https://blog.rust-lang.org/2018/12/06/call-for-rust-2019-roadmap-blogposts.html\n[tweeted]: https://twitter.com/killercup/status/1072440660416962561\n[fitzgen's post]: http://fitzgeraldnick.com/2018/12/11/rust-2019-think-bigger.html\n[boat's post]: https://boats.gitlab.io/blog/post/rust-2019/\n[mgattozzi's post]: https://mgattozzi.com/rust-in-2019-the-next-year-and-edition/\n[rust-analyzer]: https://github.com/rust-analyzer/rust-analyzer\n[cranelift]: https://github.com/CraneStation/cranelift\n[miri]: https://github.com/solson/miri\n[grey's post]: https://quietmisdreavus.net/code/2018/12/07/rust-in-the-new-age/\n[Florian's posts]: https://yakshav.es/rust-2019/\n\nConclusion\n\n<svg viewBox=\"0 0 573 526\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Rust 2019 plan</title>\n <g id=\"Rust-2019-plan\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"axis\" transform=\"translate(18.000000, 12.000000)\">\n <path d=\"M41.8671875,54.7382812 C43.2851563,117.71875 43.8103637,180.725652 46.1210938,243.679688 C49.098025,324.783856 59.9584896,405.330937 50.8359375,486.339844\" id=\"Path\" stroke=\"#979797\" stroke-width=\"4\"></path>\n <path d=\"M22.8007812,450.5625 C173.035168,447.018805 322.368951,440.701097 472.675781,437.980469\" id=\"Path-2\" stroke=\"#979797\" stroke-width=\"4\"></path>\n <path d=\"M34.09375,65.34375 C42.7379016,36.7196453 37.1437059,51.1709253 56.28125,56.8320312\" id=\"Path-3\" stroke=\"#979797\" stroke-width=\"4\"></path>\n <path d=\"M463.058594,425.9375 C495.559515,446.429789 475.417515,433.874554 459.878906,452.472656\" id=\"Path-4\" stroke=\"#979797\" stroke-width=\"4\"></path>\n <path d=\"M12.3242188,30.859375 L13.8007812,31.421875 C13.8789066,32.7812568 13.496098,34.5859262 12.6523438,36.8359375 L12.4414062,38.453125 C12.4726564,40.0000077 13.1601495,41.3515567 14.5039062,42.5078125 L14.6210938,43.703125 C14.0585909,43.7812504 13.597658,43.8203125 13.2382812,43.8203125 C12.2851515,43.8203125 11.1523503,42.867197 9.83984375,40.9609375 L9.46484375,39.25 L9.37109375,38.6640625 L9.18359375,38.6875 C6.16795367,41.5000141 3.89453891,42.960937 2.36328125,43.0703125 C1.45702672,42.960937 0.886719922,42.6640649 0.65234375,42.1796875 L0.48828125,41.078125 C1.50391133,34.468717 5.44918437,31.062501 12.3242188,30.859375 Z M3.55859375,39.953125 L4.66015625,39.1328125 C8.20704898,36.3671737 10.2148414,34.3515688 10.6835938,33.0859375 L10.4960938,33.0859375 C6.44919852,34.4765695 4.13672164,36.7656091 3.55859375,39.953125 Z M26.4804688,30.9765625 L27.1367188,31.9140625 L26.9023438,32.6640625 L28.8476562,41.640625 C28.8164061,42.4531291 28.3867229,43.1328098 27.5585938,43.6796875 L27.3476562,43.6796875 L25.8242188,42.625 C25.402",
"title": "Rust 2019",
"updatedAt": "2019-01-04T00:00:00.000Z"
}