From 38f86ae0b24b3cae432a7fd6f0c2cc2fe4e9491d Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 8 Nov 2024 18:22:42 +0000 Subject: [PATCH] Deploy linebender/linebender.github.io to linebender/linebender.github.io:gh-pages --- .nojekyll | 0 404.html | 3 + CNAME | 1 + about/index.html | 99 ++ atom.xml | 1603 +++++++++++++++++++ blog/doc-include/index.html | 181 +++ blog/index.html | 225 +++ blog/roadmap-may-2024-retro/index.html | 323 ++++ blog/roadmap-may-2024/index.html | 312 ++++ blog/rustnl-2024-unconference/index.html | 225 +++ blog/tmil-09/http_cats.png | Bin 0 -> 201711 bytes blog/tmil-09/index.html | 161 ++ blog/tmix-01/index.html | 108 ++ blog/tmix-02/index.html | 113 ++ blog/tmix-03/index.html | 119 ++ blog/tmix-04/index.html | 111 ++ blog/tmix-05/index.html | 108 ++ blog/tmix-06/Minesweeper.png | Bin 0 -> 41939 bytes blog/tmix-06/Xilem Emoji Picker.png | Bin 0 -> 203407 bytes blog/tmix-06/index.html | 127 ++ blog/tmix-07/calculator_example.png | Bin 0 -> 19820 bytes blog/tmix-07/index.html | 168 ++ blog/tmix-07/stroke_expansion_demo.png | Bin 0 -> 79928 bytes blog/tmix-08/index.html | 203 +++ blog/tmix-08/progress_bar.png | Bin 0 -> 8479 bytes blog/tmix-08/rounded_rectangles.png | Bin 0 -> 228708 bytes blog/tmix-08/stopwatch.png | Bin 0 -> 27700 bytes blog/tmix-10/floem-todo-list.png | Bin 0 -> 17262 bytes blog/tmix-10/index.html | 225 +++ blog/tmix-10/masonry-tracy.png | Bin 0 -> 99170 bytes blog/xilem-2024/index.html | 131 ++ blog/xilem-backend-roadmap/index.html | 208 +++ contributor-guidelines/index.html | 121 ++ cubic_robust_coincident.svg | 5 + cubic_robust_colinear.svg | 8 + cubic_robust_hodograph.svg | 14 + cubic_robust_simple.svg | 5 + curve_families_graph.svg | 1 + elasticlunr.min.js | 10 + euler_evolute.png | Bin 0 -> 87283 bytes index.html | 186 +++ linebender.svg | 16 + main.css | 1 + minima-social-icons.svg | 32 + robots.txt | 4 + search_index.en.js | 1 + sitemap.xml | 124 ++ wiki/canonical-lints/index.html | 173 ++ wiki/capitalization-scheme/index.html | 103 ++ wiki/cubic-robustness/index.html | 134 ++ wiki/curve-families/index.html | 166 ++ wiki/curve-offset/index.html | 100 ++ wiki/curves/euler-spiral-evolute/index.html | 155 ++ wiki/curves/index.html | 101 ++ wiki/formatting-scheme/index.html | 110 ++ wiki/gpu/index.html | 103 ++ wiki/gpu/mesh-shaders/index.html | 154 ++ wiki/gpu/sorting/index.html | 164 ++ wiki/index.html | 128 ++ wiki/long-term-roadmap/index.html | 230 +++ wiki/office-hours/index.html | 96 ++ wiki/text/index.html | 180 +++ 62 files changed, 7379 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 CNAME create mode 100644 about/index.html create mode 100644 atom.xml create mode 100644 blog/doc-include/index.html create mode 100644 blog/index.html create mode 100644 blog/roadmap-may-2024-retro/index.html create mode 100644 blog/roadmap-may-2024/index.html create mode 100644 blog/rustnl-2024-unconference/index.html create mode 100644 blog/tmil-09/http_cats.png create mode 100644 blog/tmil-09/index.html create mode 100644 blog/tmix-01/index.html create mode 100644 blog/tmix-02/index.html create mode 100644 blog/tmix-03/index.html create mode 100644 blog/tmix-04/index.html create mode 100644 blog/tmix-05/index.html create mode 100644 blog/tmix-06/Minesweeper.png create mode 100644 blog/tmix-06/Xilem Emoji Picker.png create mode 100644 blog/tmix-06/index.html create mode 100644 blog/tmix-07/calculator_example.png create mode 100644 blog/tmix-07/index.html create mode 100644 blog/tmix-07/stroke_expansion_demo.png create mode 100644 blog/tmix-08/index.html create mode 100644 blog/tmix-08/progress_bar.png create mode 100644 blog/tmix-08/rounded_rectangles.png create mode 100644 blog/tmix-08/stopwatch.png create mode 100644 blog/tmix-10/floem-todo-list.png create mode 100644 blog/tmix-10/index.html create mode 100644 blog/tmix-10/masonry-tracy.png create mode 100644 blog/xilem-2024/index.html create mode 100644 blog/xilem-backend-roadmap/index.html create mode 100644 contributor-guidelines/index.html create mode 100644 cubic_robust_coincident.svg create mode 100644 cubic_robust_colinear.svg create mode 100644 cubic_robust_hodograph.svg create mode 100644 cubic_robust_simple.svg create mode 100644 curve_families_graph.svg create mode 100644 elasticlunr.min.js create mode 100644 euler_evolute.png create mode 100644 index.html create mode 100644 linebender.svg create mode 100644 main.css create mode 100644 minima-social-icons.svg create mode 100644 robots.txt create mode 100644 search_index.en.js create mode 100644 sitemap.xml create mode 100644 wiki/canonical-lints/index.html create mode 100644 wiki/capitalization-scheme/index.html create mode 100644 wiki/cubic-robustness/index.html create mode 100644 wiki/curve-families/index.html create mode 100644 wiki/curve-offset/index.html create mode 100644 wiki/curves/euler-spiral-evolute/index.html create mode 100644 wiki/curves/index.html create mode 100644 wiki/formatting-scheme/index.html create mode 100644 wiki/gpu/index.html create mode 100644 wiki/gpu/mesh-shaders/index.html create mode 100644 wiki/gpu/sorting/index.html create mode 100644 wiki/index.html create mode 100644 wiki/long-term-roadmap/index.html create mode 100644 wiki/office-hours/index.html create mode 100644 wiki/text/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..f8414f0 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + +404 Not Found +

404 Not Found

diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..4831970 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +linebender.org \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..15ca3c0 --- /dev/null +++ b/about/index.html @@ -0,0 +1,99 @@ + + + + + + + + About - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

About

+

This is the website for the Linebender organization on GitHub. The Linebender organization contains a collection of repositories, which provide the tools and utilities to create graphical user interfaces for applications in the Rust programming language.

+

It is also a group of volunteers and enthusiasts who hang out on our Zulip, and who collaborate on designing and coding the different parts of the stack required for UI. We are a friendly bunch, and always welcome newcomers, whether they have any experience with 2D graphics and user interfaces or not.

+

All the work of the Linebender is done in the open, and the full history of all conversations is available on Zulip. In fact, we recommend searching the chat history for any topic that you are interested in, as there have been many discussions in the past with novel and valuable ideas. All code is dual-licensed under the MIT and Apache-2.0 licenses (where possible) and we aim to license non-code material under the CC-BY Creative Commons license. In fact, the non-code portion of this website is licensed under CC-BY, while all code, including any JavaScript written by the authors, is available under the Apache-2.0 license. A copy of the Apache-2.0 license is available in this website's repository. We reuse some code from the 'minima' Jekyll theme under the MIT license. The aim is to make any of the code on this website reusable, so if the licensing is causing friction please contact us on Zulip and we'll work together to solve the problem.

+

A separate page describes our contributor guidelines.

+

The organization was started by Raph Levien, and he informally leads and drives the work forward.

+ + +
+
+ + + diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000..867a68a --- /dev/null +++ b/atom.xml @@ -0,0 +1,1603 @@ + + + Linebender + Homepage for the Linebender organization + + + Zola + 2024-11-04T00:00:00+00:00 + https://linebender.org/atom.xml + + Linebender in October 2024: resvg stewardship + 2024-11-04T00:00:00+00:00 + 2024-11-04T00:00:00+00:00 + + + + Bruce Mitchener + + + + + + Daniel McNab + + + + + https://linebender.org/blog/tmix-10/ + + <p>Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for <a href="https://rust-lang.org">the Rust programming language</a>.</p> +<p>This month's update is very significant, featuring several crate releases and the adoption of resvg.</p> +<h2 id="resvg-tiny-skia-and-related-projects">Resvg, Tiny-Skia, and Related Projects</h2> +<p>We would like to thank <a href="https://github.com/RazrFalcon">Yevhenii Reizner (RazrFalcon)</a> for all his work on resvg, tiny-skia, and related projects. +Due to some changes in his personal circumstances, he has to give up working on his collection of excellent crates and he has been seeking new homes for them to help keep the lights on. +The following projects are now part of Linebender:</p> +<ul> +<li><a href="https://github.com/linebender/resvg">resvg</a> - an SVG rendering library, including <a href="https://crates.io/crates/usvg">usvg</a>;</li> +<li><a href="https://github.com/linebender/tiny-skia">tiny-skia</a> - a skia subset ported to Rust.</li> +</ul> +<p>These crates are widely used within the ecosystem and play an important role in many software projects, and not just in Rust! +Given that Linebender has a mission to provide high quality libraries for GUI and we have established processes for managing those libraries, we feel well positioned to step in and help out. +Several associated repositories and projects are also now part of Linebender. +These are <a href="https://github.com/linebender/simplecss">simplecss</a>, <a href="https://github.com/linebender/svgtypes">svgtypes</a>, and <a href="https://github.com/linebender/resvg-test-suite">resvg-test-suite</a>.</p> +<p>We do not expect this change to significantly impact current users of <code>resvg</code>, <code>usvg</code>, or <code>tiny-skia</code>. +Our role is a stewardship role, to allow updates to continue as needed by the community. +If things work for you now, they will continue to work for you going forward.</p> +<p>Our plans for the near future are:</p> +<ul> +<li>Integrate with existing Linebender <a href="https://github.com/linebender/rfcs/pull/5">practices for CI</a>, testing, and releases.</li> +<li>Review and respond to incoming pull requests and issues.</li> +<li>Re-license the <code>resvg</code> repository (including both <code>resvg</code> and <code>usvg</code>) from the MPL-2.0 license to a dual Apache 2.0 / MIT license as is common within the Rust world and the standard for Linebender projects.</li> +<li>Provide new releases as needed, working with the community to bring additional maintainers.</li> +</ul> +<p>In the longer term, we will look at how the ecosystem is evolving and what’s needed or useful. +The Linebender team has deep expertise in 2D rendering, including vector graphics, color and text layout, shaping, and rendering. +We look forward to seeing how we can apply this to these projects.</p> +<h3 id="relicensing">Relicensing</h3> +<p>We’ve already begun the process of re-licensing the <code>resvg</code> repository and are nearly done. +The change of license will be present in the next release, which will also be our first release under the Linebender umbrella. +This will allow us to share code between the Linebender crates more easily.</p> +<p>This process can be followed at <a href="https://github.com/linebender/resvg/pull/838">resvg#838</a>.</p> +<h3 id="help-wanted">Help Wanted</h3> +<p>We welcome pull requests and issues.</p> +<p>Also, with RazrFalcon becoming less involved, we’re losing a key source of knowledge about the code itself as well as the philosophy behind it. +We look forward to hearing from people who use the various crates to understand how you use it, what you use it for, and what you’d like to see.</p> +<p>For further discussion, please use the <a href="https://xi.zulipchat.com/#narrow/channel/465085-resvg">resvg channel on the Zulip</a>.</p> +<hr /> +<p></p> +<p>Alongside the work on resvg, we have been continuing work on our existing projects.</p> +<h2 id="xilem">Xilem</h2> +<p>Xilem is our flagship GUI project, inspired by SwiftUI. +It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.</p> +<ul> +<li><a href="https://github.com/linebender/xilem/pull/681">xilem#681</a>: <code>View::rebuild</code> was updated to reflect the ability to use reborrowing.</li> +<li><a href="https://github.com/linebender/xilem/pull/669">xilem#669</a>: The font weight for <code>label</code>s was exposed, by Marco Melorio.</li> +</ul> +<p>Work on Xilem Web continues.</p> +<h2 id="masonry">Masonry</h2> +<p>Masonry is the widget system used by Xilem. +It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.</p> +<ul> +<li><a href="https://github.com/linebender/xilem/pull/632">xilem#632</a>: Starts a Masonry book, including a guide on creating a To-Do List app.</li> +<li><a href="https://github.com/linebender/rfcs/pull/7">rfcs#7</a>: The pass specification RFC has been fully implemented, and the RFC has been merged.</li> +<li><a href="https://github.com/linebender/xilem/pull/705">xilem#705</a>: Moved methods for mutating widgets to free functions. +<ul> +<li>This decreases ergonomics in favour of increasing uniformity between Masonry and crates which create their own widgets.</li> +<li>This change is intended to improve rustdoc output, and the ergonomics should be restored once Rust has Arbitrary Self Types V2.</li> +</ul> +</li> +<li><a href="https://github.com/linebender/xilem/pull/615">xilem#615</a>: Our accessibility for text has been greatly improved, allowing by-character and by-word movement through accessibility tools.</li> +<li><a href="https://github.com/linebender/xilem/pull/660">xilem#660</a>: <code>request_paint</code> has been removed in favour of a new <code>request_render</code>, so that accessibility updates are less likely to be missed.</li> +<li><a href="https://github.com/linebender/xilem/pull/718">xilem#718</a>, <a href="https://github.com/linebender/xilem/pull/720">xilem#720</a>: restored the ability to embed Masonry in external projects by re-exporting required items.</li> +<li><a href="https://github.com/linebender/xilem/pull/612">xilem#612</a>: A built-in feature-gated integration with <a href="https://github.com/wolfpld/tracy">Tracy</a>.</li> +</ul> +<p>Daniel also provided a talk to <a href="https://china2024.gosim.org/">GOSIM China 2024</a> about Masonry. +The recording of this presentation is not yet available.</p> +<figure> +<img style="height: auto" src="masonry-tracy.png" alt="A tracing view of a single frame in Masonry. There are high-level spans with details underneath, and GPU operations are shown." height="613" width="1275"> +<figcaption> +<p>Masonry now has built-in support for tracing using Tracy, using the <a href="https://crates.io/crates/tracing-tracy">tracing-tracy</a> crate.</p> +</figcaption> +</figure> +<h2 id="vello">Vello</h2> +<p>Vello is our GPU vector renderer. +It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.</p> +<p>The main update is the release of version <a href="https://github.com/linebender/vello/releases/tag/v0.3.0">0.3.0</a>. +This release includes previously discussed support for emoji and blurred rounded rectangles. +We also now no longer consider Vello to be experimental, and so would encourage you to try Vello for your projects. +Raph has been working on Sparse Strip Path rendering; progress can be followed <a href="https://xi.zulipchat.com/#narrow/channel/197075-gpu/topic/Sparse.20strip.20path.20rendering">in the Zulip thread</a>.</p> +<p>We do still have several known issues, but are not aware of any issues which would block wider adoption.</p> +<figure> +<img style="height: auto" src="floem-todo-list.png" alt="A to-do list desktop app, in a vertical layout: Use Floem, unchecked; Create more TODOs, checked; Join the Linebender Zulip, unchecked. There is a button labelled 'New To-Do'." height="367" width="784"> +<figcaption> +<p>Vello is now supported as a renderer for the external <a href="https://lap.dev/floem/">Floem</a> project, developed for the Lapce editor. +Note that Lapce does not currently itself use Vello.</p> +</figcaption> +</figure> +<h2 id="parley">Parley</h2> +<p>Parley is a text layout library. +It handles text layout, mostly at the level of line breaking and resolving glyph positions.</p> +<p>We released <a href="https://github.com/linebender/parley/releases/tag/v0.2.0">Parley 0.2.0</a>. +This includes:</p> +<ul> +<li><a href="https://github.com/linebender/parley/pull/126">parley#126</a>: A new abstraction for text editing operations.</li> +<li><a href="https://github.com/linebender/parley/pull/129">parley#129</a>: Ergonomics improvements for style properties.</li> +<li><a href="https://github.com/linebender/parley/pull/76">parley#76</a>: A tree-style layout builder, useful for building up a text section (e.g. between elements).</li> +</ul> +<p>We have also done some follow up work, including:</p> +<ul> +<li><a href="https://github.com/linebender/parley/pull/143">parley#143</a>: Support for shortcutting drawing work if rendering has not changed.</li> +<li><a href="https://github.com/linebender/parley/pull/152">parley#152</a> (in progress): An example showing cursor blinking, by tannal.</li> +</ul> +<h2 id="piet">Piet</h2> +<p>Piet is a 2d graphics library which abstracts over platform-native graphics APIs. +Linebender is focused on <a href="https://linebender.org/blog/tmix-10/#vello">Vello</a> rather than Piet for performance reasons, but some users may find Piet useful, as it relies on more mature renderers and is more compatible with older platforms. +During October, we released <a href="https://github.com/linebender/piet/releases/tag/v0.7.0">Piet 0.7.0</a>.</p> +<p>Some key updates from October included in this release are:</p> +<ul> +<li><a href="https://github.com/linebender/piet/pull/572">piet#572</a>: Use of <code>Arc</code> over <code>Rc</code> for stroke dashing, by anesthetice.</li> +<li><a href="https://github.com/linebender/piet/pull/585">piet#585</a>: An update to the Rust 2018 edition, from Bruce Mitchener.</li> +<li><a href="https://github.com/linebender/piet/pull/578">piet#578</a>: Improved robustness of <code>copy_raw_pixels</code> on Direct2D by Kaur Kuut.</li> +<li>Many dependency updates.</li> +</ul> +<h2 id="druid">Druid</h2> +<p>Druid is a GUI library which was a predecessor to Xilem, and an ancestor of Masonry.</p> +<p>We are in the process of relicensing Druid from its current license of Apache 2.0 only to the Rust ecosystem standard Apache 2.0 OR MIT dual license. +If you have previously contributed to Druid, please read and respond to <a href="https://github.com/linebender/druid/pull/2414">druid#2414</a>. +This will greatly improve cross-compatibility with the rest of the Rust ecosystem, particularly for adapting code from Druid into newer toolkits. +We plan to archive the Druid repo after one more release, as we are not actively developing it; we are working to bring Xilem to parity in capability. +We will also apply this license change to Xilem and Masonry, as well as Glazier, which is currently archived.</p> +<h2 id="others">Others</h2> +<ul> +<li>Daniel and Olivier's "office hours" appointments can still be booked by anyone for open-ended discussion of the ecosystem. +<ul> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ32eQYJ9DtZ_wJaYNtT36YioETiloZDIdImFpBFRo5-XsqGzpikgkg47LPsiHhpiwiQ1orOwwW2">See Daniel's schedule here</a>.</li> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2t767ZRETD_TkRI_VxK2ZTG0VrO9OZ4l7HvTxefhtJcg85iK0ZN7zWNnAEZtH0Dn7C1GKxrmYM">See Olivier's schedule here</a>.</li> +</ul> +</li> +</ul> + + + + + This Month in Linebender, September 2024 + 2024-10-15T00:00:00+00:00 + 2024-10-15T00:00:00+00:00 + + + + Daniel McNab + + + + + + Olivier Faure + + + + + https://linebender.org/blog/tmil-09/ + + <p>Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for <a href="https://rust-lang.org">the Rust programming language</a>.</p> +<img style="height: auto; margin: 0 auto" src="../../linebender.svg" alt="Linebender logo; smoothly stroked overlapping lowercase letters, an l and a b." height="200" width = "200"> +<h2 id="xilem">Xilem</h2> +<p>Xilem is our flagship GUI project, inspired by SwiftUI. +It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.</p> +<ul> +<li>HTTP cats example (<a href="https://github.com/linebender/xilem/pull/571">xilem#571</a>).</li> +<li><code>lens</code>, a shorthand for a common component pattern (<a href="https://github.com/linebender/xilem/pull/587">xilem#587</a>).</li> +<li>We added Views for some existing and new widgets: +<ul> +<li>Grid layout (<a href="https://github.com/linebender/xilem/pull/570">xilem#570</a>).</li> +<li>Images (<a href="https://github.com/linebender/xilem/pull/571">xilem#571</a>).</li> +</ul> +</li> +</ul> +<!-- TODO: Xilem Web seems to not have any especially relevant updates? --> +<figure> +<img style="height: auto" src="http_cats.png" alt="A list of HTTP status codes, with 'Select' buttons. HTTP code 418 'I'm a teapot' is selected, with a picture of a kitten hiding in a teapot." height="962" width="600"> +<figcaption> +<p>The HTTP cats example.</p> +</figcaption> +</figure> +<h2 id="masonry">Masonry</h2> +<p>Masonry is the widget system used by Xilem. +It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.</p> +<p>Our ongoing pass specification project has been largely implemented. +That work is now in a wrapping-up stage, which has allowed Olivier to work on improving the codebase's quality in general. +Some highlights of work from September:</p> +<ul> +<li><a href="https://github.com/linebender/xilem/pull/515">xilem#515</a>: Removes unimplemented functionality from our text handling code.</li> +<li><a href="https://github.com/linebender/xilem/pull/570">xilem#570</a>: An implementation of a grid layout, by Jared O'Connell.</li> +<li><a href="https://github.com/linebender/xilem/pull/550">xilem#550</a>: Restores scroll requests, as used by text inputs.</li> +<li><a href="https://github.com/linebender/xilem/pull/565">xilem#565</a>: Allows widgets to implement more efficient pointer position dispatching, by new Linebender member Tom Churchman.</li> +<li><a href="https://github.com/linebender/xilem/pull/580">xilem#580</a>: Adds screen reader support for the textbox widget.</li> +</ul> +<!-- No grid example, it's not really visual. --> +<p>Some ongoing work includes:</p> +<ul> +<li><a href="https://github.com/linebender/xilem/pull/615">xilem#615</a>: Detailed accessibility information for text input and prose widgets.</li> +<li><a href="https://github.com/linebender/xilem/pull/606">xilem#606</a>: Custom client side decorations for Wayland, by Marco Melorio.</li> +<li><a href="https://github.com/linebender/xilem/pull/605">xilem#605</a>: Greater flexibility in the layout of the <code>Image</code> widget, by failingprovince.</li> +<li><a href="https://github.com/linebender/xilem/pull/591">xilem#591</a>: An SVG-like widget for absolute positioning, by Muhammad Ragib Hasin.</li> +</ul> +<h2 id="vello">Vello</h2> +<p>Vello is our GPU vector renderer. +It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.</p> +<p>The month of september included a lot of progress towards the 0.3.0 release.</p> +<ul> +<li>We no longer consider Vello to be experimental (<a href="https://github.com/linebender/vello/pull/691">vello#691</a>). Please note that Vello is still an alpha, and has several known issues.</li> +<li>An implementation of the single pass scan described last month is being created by Thomas Smith in <a href="https://github.com/linebender/vello/pull/685">vello#685</a>.</li> +</ul> +<h2 id="parley">Parley</h2> +<p>Parley is a text layout library. +It handles text layout, mostly at the level of line breaking and resolving glyph positions.</p> +<ul> +<li>Nico Burns contributed a new way to assign layout properties in <a href="https://github.com/linebender/parley/pull/76">parley#76</a>.</li> +</ul> +<h2 id="others">Others</h2> +<ul> +<li>Daniel and Olivier's "office hours" appointments can still be booked by anyone for open-ended discussion of the ecosystem. +<ul> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ32eQYJ9DtZ_wJaYNtT36YioETiloZDIdImFpBFRo5-XsqGzpikgkg47LPsiHhpiwiQ1orOwwW2">See Daniel's schedule here</a>.</li> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2t767ZRETD_TkRI_VxK2ZTG0VrO9OZ4l7HvTxefhtJcg85iK0ZN7zWNnAEZtH0Dn7C1GKxrmYM">See Olivier's schedule here</a>.</li> +</ul> +</li> +</ul> + + + + + This Month in Xilem, August 2024 + 2024-09-11T00:00:00+00:00 + 2024-09-11T00:00:00+00:00 + + + + Daniel McNab + + + + + https://linebender.org/blog/tmix-08/ + + <p>Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for <a href="https://rust-lang.org">the Rust programming language</a>.</p> +<figure> +<img style="height: auto; margin: 0 auto" src="../../linebender.svg" alt="Linebender logo; smoothly stroked overlapping lowercase letters, an l and a b." height="200" width = "200"> +<figcaption> +<p>Linebender has a new logo, which was contributed by <a href="https://github.com/msiglreith">Markus Siglreithmaier</a>. +We're seeking feedback on Zulip in <a href="https://xi.zulipchat.com/#narrow/stream/419691-linebender/topic/logo">#linebender&gt;logo</a>.</p> +</figcaption> +</figure> +<h2 id="xilem">Xilem</h2> +<p>Xilem is our flagship GUI project, inspired by SwiftUI.</p> +<ul> +<li>We integrated basic animated variable font rendering (<a href="https://github.com/linebender/xilem/pull/507">xilem#507</a>).</li> +<li>Philipp Mildenberger moved us back to using <code>ViewMarker</code> in <a href="https://github.com/linebender/xilem/pull/472">xilem#472</a>. +This restores the ability to return <code>ViewSequence</code>s, by making a tradeoff to work around Rust's faulty trait ambiguity rules.</li> +<li>We added Views for some existing and new widgets: +<ul> +<li>spinners, useful for showing indetermine progress (<a href="https://github.com/linebender/xilem/pull/497">xilem#497</a>);</li> +<li>progress bars (<a href="https://github.com/linebender/xilem/pull/513">xilem#513</a>); and</li> +<li>the <code>Portal</code> widget, which brings support for scroll areas to Xilem (<a href="https://github.com/linebender/xilem/pull/561">xilem#561</a>).</li> +</ul> +</li> +</ul> +<p>Xilem Web is a community managed experimental DOM implementation of the Xilem pattern. +This month, the updates include:</p> +<ul> +<li>Support for returning multiple views from the main logic (<a href="https://github.com/linebender/xilem/pull/482">xilem#482</a>).</li> +<li>Support for DOM templating, for efficient repeated creation of similar views (<a href="https://github.com/linebender/xilem/pull/495">xilem#495</a>).</li> +</ul> +<figure> +<img style="height: auto" src="stopwatch.png" alt="A timer with the value '0:00:26.4' (26.4 seconds) above two buttons, reset and start. Below these are 5 laps, labelled 'lap 5' to 'lap 1', each with a lap time of approximately 5 seconds and a corresponding elapsed time. This is all contained in an OS window titled 'Stopwatch'." height="388" width = "559"> +<figcaption> +<p>Jared O'Connell additionally contributed a stopwatch example in <a href="https://github.com/linebender/xilem/pull/492">xilem#492</a>.</p> +</figcaption> +</figure> +<h2 id="masonry">Masonry</h2> +<p>Masonry is the widget system used by Xilem. +This month has been dominated by Olivier's implementation of pass specification (<a href="https://github.com/linebender/rfcs/pull/7">rfcs#7</a>):</p> +<ul> +<li><a href="https://github.com/linebender/xilem/pull/512">xilem#512</a>: The new compose pass, which is used to minimise redraw when scrolling.</li> +<li><a href="https://github.com/linebender/xilem/pull/510">xilem#510</a>: Adds the mutate pass, which allows later passes to assume the tree structure is stable by limiting when tree mutation can occur.</li> +<li><a href="https://github.com/linebender/xilem/pull/522">xilem#522</a>: Implements paint and accessibility as passes, with follow-up by Tom Churchman in <a href="https://github.com/linebender/xilem/pull/557">xilem#557</a>.</li> +<li><a href="https://github.com/linebender/xilem/pull/488">xilem#488</a> and <a href="https://github.com/linebender/xilem/pull/540">xilem#540</a>: updated event and pointer handling, and disabled handling respectively.</li> +<li>In progress work includes layout in <a href="https://github.com/linebender/xilem/pull/529">xilem#529</a>, focus in <a href="https://github.com/linebender/xilem/pull/538">xilem#538</a>, animation in <a href="https://github.com/linebender/xilem/pull/539">xilem#539</a> and scroll requests in <a href="https://github.com/linebender/xilem/pull/550">xilem#550</a>.</li> +</ul> +<p>We also had some great community contributions, such as:</p> +<ul> +<li>Richard Dodd added a new progress Bar widget (<a href="https://github.com/linebender/xilem/pull/513">xilem#513</a>).</li> +<li>Fixes for Portal scrolling, by Tom Churchman (<a href="https://github.com/linebender/xilem/pull/563">xilem#563</a>).</li> +</ul> +<figure> +<img style="height: auto" src="progress_bar.png" alt="A horizontal progress bar which is 70% filled with blue, with white text overlaid saying 70%. Below this is a checkbox labelled 'set indetermine progress', and a button labelled 'change progress'." height="129" width = "431"> +<figcaption> +<p>The progress bar widget was contributed by Richard Dodd in <a href="https://github.com/linebender/xilem/pull/513">xilem#513</a>.</p> +</figcaption> +</figure> +<p>We continue to make progress on other key features.</p> +<ul> +<li>Snapshot tests now are cross-platform and run in CI (<a href="https://github.com/linebender/xilem/pull/233">xilem#233</a>).</li> +<li>Pan/flick gestures are being developed in <a href="https://github.com/linebender/xilem/pull/562">xilem#562</a>.</li> +<li>Progress continues on text input for Android. This involves creating our own <code>Activity</code>, with support for both text input and accessibility. +This new <code>Activity</code> will use <code>SurfaceView</code> like other modern native code based activities (<code>GameActivity</code>, <code>MakepadActivity</code>, etc.), and our aim is that it won't require a Java toolchain to build a simple application.</li> +<li>Progress continues on the Accessibility integration for Android. You can try this in <a href="https://github.com/linebender/xilem/pull/575">xilem#575</a>, or see it in the below video.</li> +</ul> +<figure> +<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/IObBk40MdJs?si=GXDNRNelhVz4nTjU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> +<figcaption> +<p>The Xilem <code>to_do_mvc</code> example running with <a href="https://en.wikipedia.org/wiki/Google_TalkBack">TalkBack</a> integration. +Video provided by Matt Campbell.</p> +</figcaption> +</figure> +<h2 id="vello">Vello</h2> +<p>Vello is our GPU vector renderer. +We have made some really great progress in August<!-- , TODO: and are actively planning a 0.3.0 release? -->.</p> +<ul> +<li>We now support blurred rounded rectangles, contributed by Markus Siglreithmaier (<a href="https://github.com/linebender/vello/pull/665">vello#665</a>)</li> +<li>Blend stack spilling was implemented, which allows blends more than four layers deep (<a href="https://github.com/linebender/vello/pull/661">vello#661</a>).</li> +<li>Fixes for some visual artifacts in <a href="https://github.com/linebender/vello/pull/651">vello#651</a>, <a href="https://github.com/linebender/vello/pull/659">vello#659</a> and <a href="https://github.com/linebender/vello/pull/673">vello#673</a>.</li> +<li>Embedding existing wgpu textures is now supported (<a href="https://github.com/linebender/vello/pull/636">vello#636</a>).</li> +<li>We now support bitmap glyphs (i.e. emoji), in addition to our previous COLR support (<a href="https://github.com/linebender/vello/pull/641">vello#641</a>).</li> +<li>Work has begun on sparse strips, which is tracked in <a href="https://github.com/linebender/vello/pull/670">vello#670</a>.</li> +<li>Frame pacing for Android is being investigated and developed in <a href="https://github.com/linebender/vello/pull/674">vello#674</a>.</li> +<li>Thomas Smith has been doing some deep-dives into parallel scan, which is the core operation in Vello. +This work can be found in <a href="https://xi.zulipchat.com/#narrow/stream/197075-gpu/topic/Progress.20for.20GPU&#x27;s.20Without.20Forward.20Progress.20Guarantees">#gpu&gt;Progress for GPU's Without Forward Progress Guarantees</a>.</li> +</ul> +<figure> +<img style="height: auto" src="rounded_rectangles.png" alt="A vertically split image. On the left are three blurred shapes: a blue rectangle with rounded corners, and two black ellipses. The ellipses are partially occluded by the boundaries of the image. On the right is a web page, showing three blog post titles and summaries, each in a box with a black box shadow." height="644" width = "944"> +<figcaption> +<p>Vello now supports blurred rounded rectangles, based on the maths from <a href="https://raphlinus.github.io/graphics/2020/04/21/blurred-rounded-rects.html">Raph's blog</a>. +Left: Vello's blurred rounded rectangles test scene. +Right: <a href="https://github.com/DioxusLabs/blitz/">Blitz</a>'s <code>servo</code> example which renders box shadows using this feature.</p> +</figcaption> +</figure> +<h2 id="parley">Parley</h2> +<p>Parley is a text layout library.</p> +<ul> +<li>Primitives required for robust text editing were added in <a href="https://github.com/linebender/parley/pull/106">parley#106</a>.</li> +</ul> +<h2 id="others">Others</h2> +<ul> +<li>Bruce Mitchener has started work on <a href="https://github.com/linebender/interpoli/">Interpoli</a>, an animation support library.</li> +<li>We have performed a <a href="https://linebender.org/blog/roadmap-may-2024-retro/">retrospective</a> on our last roadmap.</li> +<li>Daniel and Olivier's "office hours" appointments can still be booked by anyone for open-ended time-limited discussion of the ecosystem. +<ul> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ32eQYJ9DtZ_wJaYNtT36YioETiloZDIdImFpBFRo5-XsqGzpikgkg47LPsiHhpiwiQ1orOwwW2">See Daniel's schedule here</a>.</li> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2t767ZRETD_TkRI_VxK2ZTG0VrO9OZ4l7HvTxefhtJcg85iK0ZN7zWNnAEZtH0Dn7C1GKxrmYM">See Olivier's schedule here</a>.</li> +</ul> +</li> +</ul> + + + + + Retrospective on the May-July roadmap + 2024-08-24T00:00:00+00:00 + 2024-08-24T00:00:00+00:00 + + + + Daniel McNab + + + + + https://linebender.org/blog/roadmap-may-2024-retro/ + + <p>Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for <a href="https://rust-lang.org">the Rust programming language</a>.</p> +<p>At the start of May, we created a <a href="https://linebender.org/blog/roadmap-may-2024/">roadmap</a> for the following three months. +We recently went through a process of analysing how well our progress was guided by the roadmap; this report summarises those results.</p> +<h2 id="vello-original">Vello <a href="https://linebender.org/blog/roadmap-may-2024/#vello">(original)</a></h2> +<h3 id="robust-dynamic-memory-original">Robust dynamic memory <a href="https://linebender.org/blog/roadmap-may-2024/#robust-dynamic-memory">(original)</a></h3> +<ul> +<li><strong>Priority:</strong> Highest.</li> +<li><strong>Status</strong>: Experimental PR (<a href="https://github.com/linebender/vello/pull/606">vello#606</a>), but hasn’t landed. +Work required on the CPU side API, but the GPU operations are well-understood. +This PR could not be released in its current form.</li> +</ul> +<h3 id="reliable-snapshot-tests-original">Reliable snapshot tests <a href="https://linebender.org/blog/roadmap-may-2024/#reliable-snapshot-tests">(original)</a></h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Status</strong>: This was implemented in <a href="https://github.com/linebender/vello/pull/610">vello#610</a>. +This has already been extremely useful in our review process, as it allows changes to be validated in the files changed view. +We also implemented an experiment to use <a href="https://git-lfs.com/">Git LFS</a>, which has been working really well to avoid increasing repository size.</li> +</ul> +<h3 id="sparse-strips-original">Sparse strips <a href="https://linebender.org/blog/roadmap-may-2024/#sparse-strips">(original)</a></h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Status</strong>: We are continuing this work, but there is no code currently available. +See <a href="https://xi.zulipchat.com/#narrow/stream/197075-gpu/topic/Sparse.20strip.20path.20rendering">#gpu &gt; Sparse strip path rendering</a> for details.</li> +</ul> +<h3 id="add-tests-original">Add tests <a href="https://linebender.org/blog/roadmap-may-2024/#add-tests">(original)</a></h3> +<ul> +<li><strong>Priority:</strong> Medium</li> +<li><strong>Status</strong>: This item had already been completed at the time the roadmap was written. +This was also expanded upon in. +During our retrospective meeting, we did determine some potential future expansions to testing, namely: +<ul> +<li>Running individual stages in isolation, to enable property testing (TODO: Make Vello issue).</li> +<li>Testing for additional platforms, such as DirectX on Windows and Android (TODO: Make Vello issue).</li> +</ul> +</li> +</ul> +<h3 id="vello-extras">Progress beyond roadmap</h3> +<p>We have also landed several important features which were not part of our planned roadmap. +These include:</p> +<ul> +<li>Blending which uses more than four deep layers (<a href="https://github.com/linebender/vello/pull/657">vello#657</a>).</li> +<li>Preliminary support for embedding pre-existing <code>wgpu</code> textures (<a href="https://github.com/linebender/vello/pull/636">vello#636</a>). +This was driven by user needs. +Further work in this direction is tracked in <a href="https://github.com/linebender/vello/issues/664">vello#664</a>.</li> +<li>Support for Emoji (COLRv1 in <a href="https://github.com/linebender/vello/pull/615">vello#615</a>, bitmap in <a href="https://github.com/linebender/vello/pull/641">vello#641</a>).</li> +</ul> +<p>The <a href="https://linebender.org/gpu-stroke-expansion-paper/">stroke expansion paper</a> documents a key part of Vello's pipeline. +This was presented at ACM High Performance Graphics (HPG) 2024, placing 3rd Place in the Best Paper Award.</p> +<h2 id="masonry-original">Masonry <a href="https://linebender.org/blog/roadmap-may-2024/#masonry">(original)</a></h2> +<h3 id="complete-text-input-original">Complete text input <a href="https://linebender.org/blog/roadmap-may-2024/#complete-text-input">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Highest</li> +<li><strong>Status</strong>: Not that much progress. +This work is being continued, and indeed there has been significant progress as of the time of writing. +This is tracked in <a href="https://github.com/linebender/parley/issues/52">parley#52</a>.</li> +</ul> +<h3 id="better-tracing-for-debugging-original">Better tracing for debugging <a href="https://linebender.org/blog/roadmap-may-2024/#better-tracing-for-debugging">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: <a href="https://github.com/linebender/xilem/pull/384">xilem#384</a> implements most of this, the rest is deferred. +There are known issues with the size of the log files created by default in very large apps.</li> +</ul> +<h3 id="fix-glaring-documentation-problems-original">Fix glaring documentation problems <a href="https://linebender.org/blog/roadmap-may-2024/#fix-glaring-documentation-problems">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: The issues mentioned in this item were addressed in <a href="https://github.com/linebender/xilem/pull/329">xilem#329</a> and <a href="https://github.com/linebender/xilem/pull/503">xilem#503</a>.</li> +</ul> +<h3 id="finish-repository-port-original">Finish repository port <a href="https://linebender.org/blog/roadmap-may-2024/#fix-glaring-documentation-problems">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: This was completed. +We moved all Masonry issues into the Xilem repository, and updated all references in code to use full links. +This move was coordinated in <a href="https://xi.zulipchat.com/#narrow/stream/419691-linebender/topic/Moving.20Masonry.20into.20Xilem">#linebender &gt; Moving Masonry into Xilem</a>.</li> +</ul> +<h3 id="write-widgets-in-arena-rfc-original">Write “widgets in arena” RFC <a href="https://linebender.org/blog/roadmap-may-2024/#write-widgets-in-arena-rfc">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: The RFC was <a href="https://github.com/linebender/rfcs/pull/6">rfcs#6</a>, which was mostly implemented in <a href="https://github.com/linebender/xilem/pull/396">xilem#396</a>.</li> +</ul> +<h3 id="write-pass-order-rfc-original">Write “pass order” RFC <a href="https://linebender.org/blog/roadmap-may-2024/#write-pass-order-rfc">(original)</a></h3> +<ul> +<li><strong>Prioriy</strong>: High</li> +<li><strong>Status</strong>: <a href="https://github.com/linebender/rfcs/pull/7">rfcs#7</a> is in draft, and several important parts of the RFC have been completed.</li> +</ul> +<h3 id="rewrite-documentation-original">Rewrite documentation <a href="https://linebender.org/blog/roadmap-may-2024/#rewrite-documentation">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Medium</li> +<li><strong>Status</strong>: This work has been deferred until the "pass order" refactor is complete, as we expect Masonry's core to be quite stable at that point.</li> +</ul> +<h3 id="improve-focus-handling-original">Improve focus handling <a href="https://linebender.org/blog/roadmap-may-2024/#improve-focus-handling">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Medium</li> +<li><strong>Status</strong>: Not done.</li> +</ul> +<h3 id="improve-pointer-status-handling-original">Improve pointer status handling <a href="https://linebender.org/blog/roadmap-may-2024/#improve-pointer-status-handling">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Medium</li> +<li><strong>Status</strong>: Basic translation of touch events was added in (<a href="https://github.com/linebender/xilem/pull/313">xilem#313</a>). +This unblocked using Masonry on devices where pointer input is not expected (primarily on Android). +We have split the remainder of this task into two tasks, with a priority placed on completing the parts which unblock other work (such as scrolling on Android).</li> +</ul> +<h3 id="masonry-extras">Progress beyond roadmap</h3> +<p>Masonry is in a state of flux, however is starting to see a few exploratory users. +To unblock these users, some additional important features were added outside of the roadmap, such as:</p> +<ul> +<li>Support for embedding Masonry inside a pre-existing event loop (<a href="https://github.com/linebender/xilem/commit/cf3530097baf0fc5c458593e215a19973572b991">xilem#417</a>).</li> +<li>Support for a <code>gap</code> property in the flexbox (<a href="https://github.com/linebender/xilem/pull/437">xilem#437</a>).</li> +<li>Fixes on iOS, including <a href="https://github.com/linebender/xilem/pull/418">xilem#418</a> and <a href="https://github.com/linebender/xilem/pull/421">xilem#421</a>.</li> +<li><a href="https://github.com/linebender/xilem/pull/233">xilem#233</a> allowed our tests to be run on CI in a consistent manner.</li> +</ul> +<h2 id="parley-original">Parley <a href="https://linebender.org/blog/roadmap-may-2024/#parley">(original)</a></h2> +<h3 id="create-abstractions-for-text-selection-and-editing-original">Create abstractions for text selection and editing <a href="https://linebender.org/blog/roadmap-may-2024/#write-pass-order-rfc">(original)</a> ?</h3> +<ul> +<li><strong>Priority</strong>: Highest</li> +<li><strong>Status</strong>: There have been useful discussions in <a href="https://github.com/linebender/parley/issues/52">parley#52</a>. +Work has started on this in <a href="https://github.com/linebender/parley/pull/106">parley#106</a> in response to this retrospective.</li> +</ul> +<h3 id="inline-block-layout-original">Inline block layout <a href="https://linebender.org/blog/roadmap-may-2024/#inline-block-layout">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: A first cut of this feature was added by Nico Burns in (<a href="https://github.com/linebender/parley/pull/67">parley#67</a>). +<a href="https://github.com/linebender/parley/pull/76">parley#76</a> expands upon this, and has been approved in principle, but is awaiting thorough review.</li> +</ul> +<h3 id="write-adequate-documentation-original">Write adequate documentation <a href="https://linebender.org/blog/roadmap-may-2024/#write-adequate-documentation">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: Some work was done towards this in <a href="https://github.com/linebender/parley/pull/26">parley#26</a>, which unfortunately could not be merged. +<a href="https://github.com/linebender/parley/pull/97">parley#97</a> added some documentation to Fontique. +Further documentation work from Nico is currently blocked on the tree-like styles PR <a href="https://github.com/linebender/parley/pull/76">parley#76</a> being merged (to avoid conflicts).</li> +</ul> +<h3 id="software-renderer-original">Software renderer <a href="https://linebender.org/blog/roadmap-may-2024/#software-renderer">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Low</li> +<li><strong>Status</strong>: This was not completed in the form envisioned. +However, Nico contributed two examples, showing how to use Parley with Swash (<a href="https://github.com/linebender/parley/pull/54">parley#54</a>) and tiny-skia (<a href="https://github.com/linebender/parley/pull/55">parley#55</a>). +We have decided not to carry this forward into the next roadmap.</li> +</ul> +<h3 id="parley-extras">Progress beyond roadmap</h3> +<p><a href="https://github.com/linebender/parley/pull/56">parley#56</a> added support for Emoji, which is used with the <a href="https://linebender.org/blog/roadmap-may-2024-retro/#vello-extras">Vello PRs</a>.</p> +<p>Recently the <a href="https://github.com/harfbuzz/harfruzz">harfruzz</a> project, a fork of rustybuzz to be integrated fully with fontations, has emerged as an extremely promising direction for text shaping for the Rust ecosystem. We plan to use it as the basis for text layout.</p> +<h2 id="xilem">Xilem <a href="https://linebender.org/blog/roadmap-may-2024/#xilem">(original)</a></h2> +<h3 id="android-bringup-original">Android bringup <a href="https://linebender.org/blog/roadmap-may-2024/#android-bringup">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Highest</li> +<li><strong>Status</strong>: Android is supported in several of our examples, with the primary work required for support completed in <a href="https://github.com/linebender/xilem/pull/309">xilem#309</a>. +No non-boilerplate code changes are required to get a Xilem application running on Android. +Some compromises were made, in particular cargo gives an un-silencable warning for each example which supports Android and cross-platform backends. +We did reach out to the Cargo team about this use case, but did not get a positive response.</li> +</ul> +<h3 id="update-repository-layout-original">Update repository layout <a href="https://linebender.org/blog/roadmap-may-2024/#update-repository-layout">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: This was completed in <a href="https://github.com/linebender/xilem/pull/302">xilem#302</a>. +Kaur applied the same change to Vello in <a href="https://github.com/linebender/vello/pull/590">vello#590</a>.</li> +</ul> +<h3 id="rework-core">Rework xilem_core to be compatible with Masonry backend <a href="https://linebender.org/blog/roadmap-may-2024/#rework-xilem-core-to-be-compatible-with-masonry-backend">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: This was completed in <a href="https://github.com/linebender/xilem/pull/310">xilem#310</a>. +Philipp then applied this to Xilem Web in <a href="https://github.com/linebender/xilem/pull/403">xilem#403</a>.</li> +</ul> +<h3 id="write-documentation-original">Write documentation <a href="https://linebender.org/blog/roadmap-may-2024/#write-documentation">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: High</li> +<li><strong>Status</strong>: This was not completed. +The work in <a href="https://github.com/linebender/xilem/pull/310">xilem#310</a> did document some of the core, but there is very little user-facing documentation of the Xilem level.</li> +</ul> +<h3 id="re-implement-async-integration-original">Re-implement async integration <a href="https://linebender.org/blog/roadmap-may-2024/#re-implement-async-integration">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Medium</li> +<li><strong>Status</strong>: The core of this task was completed in <a href="https://github.com/linebender/xilem/pull/423">xilem#423</a> was the main implementation. +Two-way communication with the async tasks is not yet implemented</li> +</ul> +<h3 id="add-unit-tests-original">Add unit tests <a href="https://linebender.org/blog/roadmap-may-2024/#add-unit-tests">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Low</li> +<li><strong>Status</strong>: This was not prioritised. +We have raised the priority of this item in our next roadmap.</li> +</ul> +<h3 id="add-basic-benchmarks-original">Add basic benchmarks <a href="https://linebender.org/blog/roadmap-may-2024/#add-basic-benchmarks">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Low</li> +<li><strong>Status</strong>: There has been no progress on this item. +This will be a "highest" priority item in the next roadmap.</li> +</ul> +<h3 id="xilem-extras">Progress beyond roadmap</h3> +<p>Xilem has also seen some very useful changes not tracked above, including many community contributions. +Some highlights of these contributions are:</p> +<ul> +<li>Philipp Mildenberger contributed heavily to Xilem's core design, such as by restoring the ability to return <code>ViewSequence</code>s by returning to a previous workaround for Rust's overly-cautious trait solver (<a href="https://github.com/linebender/xilem/pull/394">xilem#472</a>). +He also extended the Xilem API by restoring <code>OneOf</code> (<a href="https://github.com/linebender/xilem/pull/394">xilem#394</a>), and implementing various <code>Adapt</code> nodes (<a href="https://github.com/linebender/xilem/pull/401">xilem#401</a>). +Additionally, he picked up the work to expand <code>Flex</code> to use the <a href="https://linebender.org/blog/roadmap-may-2024-retro/#rework-core">new Xilem Core</a> in <a href="https://github.com/linebender/xilem/pull/428">xilem#428</a>.</li> +<li>Jared O'Connell contributed two new examples, a calculator (<a href="https://github.com/linebender/xilem/pull/467">xilem#467</a>), and a stopwatch (<a href="https://github.com/linebender/xilem/pull/492">xilem#492</a>).</li> +</ul> +<p>There has also been lots of really good progress on Xilem Web, but we do not roadmap Xilem Web and so we do not cover that progress here.</p> +<h2 id="accesskit-original">AccessKit <a href="https://linebender.org/blog/roadmap-may-2024/#accesskit">(original)</a></h2> +<p>Matt Campbell's work on AccessKit has begun, and a proof-of-concept Android adapter is in progress.</p> +<!-- TODO: Can we point to a PR instead? --> +<p>At the time of writing there is not a permanent link to this work, but it can be seen in the <a href="https://github.com/AccessKit/accesskit/tree/android-basics">android-basics</a> branch.</p> +<h2 id="android-specific-work-original">Android specific work <a href="https://linebender.org/blog/roadmap-may-2024/#android-specific-work">(original)</a></h2> +<h3 id="subclassing">Subclassing View/Application/Activity <a href="https://linebender.org/blog/roadmap-may-2024/#subclassing-view-application-activity">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Highest</li> +<li><strong>Status</strong>: This work is in progress, and unfortunately has required more research than expected. +We spent some time investigating DEX injection, which Matt has got implemented. +However, it’s now looking like a custom Activity and View is the way forward, which requires close collaboration with upstream tools. +We are continuing to prioritise this highly.</li> +</ul> +<h3 id="handling-ime-original">Handling IME <a href="https://linebender.org/blog/roadmap-may-2024/#handling-ime">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Highest</li> +<li><strong>Status</strong>: This work is ongoing. +<a href="https://github.com/rust-windowing/winit/pull/3787">winit#3787</a> allows opening a virtual keyboard, however this does not integrate with full IME (so for example, it is incompatible with autocorrect). +Real IME requires the Activity to support it directly and therefore involves <a href="https://linebender.org/blog/roadmap-may-2024-retro/#subclassing">content view subclassing</a>.</li> +</ul> +<h3 id="gesture-recognition-original">Gesture recognition <a href="https://linebender.org/blog/roadmap-may-2024/#gesture-recognition">(original)</a></h3> +<ul> +<li><strong>Priority</strong>: Low</li> +<li><strong>Status</strong>: <a href="https://github.com/linebender/xilem/pull/313">xilem#313</a> added emulated mouse press and move from touches. +This unblocked use of Xilem on Android, but is not the intended final state. +The priority of detecting a scrolling gesture has been increased slightly.</li> +</ul> +<h2 id="conclusions">Conclusions</h2> +<p>Overall, the roadmap provided a useful guide of what to work on, and we have implemented many of the most important features from it. +One clear recurring issue is documentation - even where we have chosen to roadmap this, we have made little progress. +Similar concerns are clear for testing in Xilem, although we have laid some important groundwork there. +We firmly recognise the role of documentation as an aid to onboarding, which is becoming more important as we work towards alpha releases. +I believe that we can make good progress in this area before the end of 2024.</p> + + + + + This Month in Xilem, July 2024 + 2024-08-08T00:00:00+00:00 + 2024-08-08T00:00:00+00:00 + + + + Daniel McNab + + + + + + Olivier Faure + + + + + https://linebender.org/blog/tmix-07/ + + <p>Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for <a href="https://rust-lang.org">the Rust programming language</a>.</p> +<p>This month saw a lot of community contributions to Linebender projects. +Philipp Mildenberger especially is a major driver for progress on Xilem and especially the <code>xilem_web</code> crate. +Bruce Mitchener has been very active reviewing pull requests, which is an under-appreciated but essential task for any open-source project.</p> +<h2 id="xilem">Xilem</h2> +<p>Xilem is our flagship GUI project, inspired by SwiftUI.</p> +<ul> +<li><a href="https://github.com/linebender/xilem/pull/423">xilem#423</a> integrates Tokio into Xilem, showing how the Xilem model can interact with async work.</li> +<li><a href="https://github.com/linebender/xilem/pull/428">xilem#428</a> by Philipp adds explicit support for Flex parameters.</li> +<li>Philipp ported the async work to Xilem Web, and experimented with some extensions: +<ul> +<li><a href="https://github.com/linebender/xilem/pull/440">xilem#440</a> is an experiment into async event handling.</li> +<li><a href="https://github.com/linebender/xilem/pull/448">xilem#448</a> added the <code>MemoizedAwait</code> view, which runs a task whenever the input data has a new value.</li> +</ul> +</li> +<li><a href="https://github.com/linebender/xilem/pull/467">xilem#467</a> by Jared O'Connell adds a calculator example. +This example can also be run on Android (<a href="https://github.com/linebender/xilem/pull/474">xilem#474</a>).</li> +</ul> +<figure> +<img style="height: auto" src="calculator_example.png" alt="A calculator with display section showing the calculation 9994 + 3231 = 13225. Below this section is a grid of buttons 4 wide and 5 tall, containing the digits 0-9 and some other calculator operations." height="533" width = "931"> +<figcaption> +<p>The new <code>calc</code> example for Xilem.</p> +</figcaption> +</figure> +<h2 id="masonry">Masonry</h2> +<p>Masonry is the widget system used by Xilem. +The most impactful change was the implementation of the <a href="https://github.com/linebender/rfcs/blob/main/rfcs/0006-widgets-in-arenas.md">"Widgets in arenas" RFC</a> in <a href="https://github.com/linebender/xilem/pull/396">xilem#396</a>. +Widgets are now stored in a global arena, which has little impact on the public APIs but make future changes a lot easier to implement.</p> +<ul> +<li><a href="https://github.com/linebender/xilem/pull/417">xilem#417</a> exposes an unstable API for embedding Masonry and Xilem into an existing Winit application.</li> +<li><a href="https://github.com/linebender/xilem/pull/418">xilem#418</a>, <a href="https://github.com/linebender/xilem/pull/421">xilem#421</a> improved our unofficial support for iOS.</li> +<li><a href="https://github.com/linebender/rfcs/pull/7">rfcs#7</a> specifies a clearer architecture for passes, including simplifications necessary for compositor use. +Actually integrating with the compositor is still out of scope <a href="https://raphlinus.github.io/ui/graphics/2020/09/13/compositor-is-evil.html">for reasons Raph has laid out before</a>, but the new pass specification gives us a starting point when we get there.</li> +</ul> +<h2 id="vello">Vello</h2> +<p>Vello is our GPU vector renderer.</p> +<ul> +<li>The <a href="https://linebender.org/gpu-stroke-expansion-paper/">GPU-friendly Stroke Expansion</a> paper has been released. +Follow the link for the outline, the full paper, demos, and a talk at the HPG 2024 conference. +Note that the interactive demo is built with <code>xilem_web</code>.</li> +<li><a href="https://github.com/linebender/vello/releases/tag/v0.2.1">Vello 0.2.1</a> has been released. +This patch version resolves a longstanding crash around empty scenes.</li> +<li><a href="https://github.com/linebender/vello/pull/643">vello#643</a>, <a href="https://github.com/linebender/vello/pull/647">vello#647</a> switch to Git LFS for storing snapshot test files. +Git LFS is an open-source Git extension supported by Github, that lets users commit large files to a repository without permanently bloating it. +Using it has trade-offs around bandwidth usage in CI, but otherwise matches our use-case perfectly.</li> +</ul> +<figure> +<img style="height: auto" src="stroke_expansion_demo.png" alt="A screenshot containing a single bezier curve, split into several differently coloured segments. The control points of the curve are visible. The expanded stroke for this curve is shown as a filled section, with the generated line segment end points visible as small circles. There are several controls for settings of the stroke expansion above the curve." height="755" width = "868"> +<figcaption> +<p>The demo for the stroke expansion paper, which was created using Xilem Web. +An interactive version can be found on the <a href="https://linebender.org/gpu-stroke-expansion-paper/#beztoy-container">paper's website</a>.</p> +</figcaption> +</figure> +<h2 id="parley">Parley</h2> +<p>Parley is a text layout library. +Nico Burns contributed quite a few improvements to Parley this month:</p> +<ul> +<li><a href="https://github.com/linebender/parley/pull/67">parley#67</a> implements inline box layout, which lets us mix textual and non-textual content and have the non-textual content laid out in flow with the text.</li> +<li><a href="https://github.com/linebender/parley/pull/76">parley#76</a>, <a href="https://github.com/linebender/parley/pull/84">parley#84</a> gets style types closer to CSS engines.</li> +</ul> +<h2 id="others">Others</h2> +<ul> +<li><a href="https://github.com/linebender/glazier/">The Glazier repository</a> has been archived. +This is in continuity with our direction so far, as we've dropped support for it and committed to building our crates on top of Winit.</li> +<li>We are at the end of our documented <a href="https://linebender.org/blog/roadmap-may-2024/">May-July 2024 roadmap</a>. +We expect to do a full retrospective on it soon, including the items we shipped and those that slipped.</li> +<li>Daniel and Olivier are now accepting "office hours" style appointments, for open-ended discussion of the ecosystem. +<ul> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ32eQYJ9DtZ_wJaYNtT36YioETiloZDIdImFpBFRo5-XsqGzpikgkg47LPsiHhpiwiQ1orOwwW2">See Daniel's schedule here</a>.</li> +<li><a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ2t767ZRETD_TkRI_VxK2ZTG0VrO9OZ4l7HvTxefhtJcg85iK0ZN7zWNnAEZtH0Dn7C1GKxrmYM">See Olivier's schedule here</a>.</li> +</ul> +</li> +</ul> + + + + + This Month in Xilem, June 2024 + 2024-07-03T00:00:00+00:00 + 2024-07-03T00:00:00+00:00 + + + + Daniel McNab + + + + + https://linebender.org/blog/tmix-06/ + + <p>We released <a href="https://github.com/linebender/vello/releases/tag/v0.2.0">Vello 0.2.0</a> at the start of the month, which included some key improvements discussed in previous months' updates. +We also merged initial handling of Emoji (<a href="https://github.com/linebender/vello/pull/615">vello#615</a>), which supports glyphs which use the COLR specification (Apple's system emoji font does not use this format and so currently will not render). +In-flight work includes an enhanced testing setup (<a href="https://github.com/linebender/vello/pull/610">vello#610</a>), GPU memory allocation robustness (<a href="https://github.com/linebender/vello/pull/606">vello#606</a>), and improved correctness for some unusual strokes (<a href="https://github.com/linebender/vello/pull/607">vello#607</a>). +The <a href="https://github.com/linebender/gpu-stroke-expansion-paper">GPU-Friendly Stroke Expansion</a> paper has been accepted to <a href="https://www.highperformancegraphics.org/2024/index.html">High Performance Graphics 2024</a>, and will be presented in Denver on July 26. +A revised draft of the paper is published on <a href="https://arxiv.org/abs/2405.00127">arXiv</a>.</p> +<figure> +<img src="Xilem Emoji Picker.png" style="height: auto" alt="Screenshot of an app, containing a 4x4 grid of labelled Emoji, zoom in and out buttons and pagination controls. 'cat face with wry smile' is selected" height="1132" width = "863"> +<figcaption> +<p>A toy Emoji viewer example (<a href="https://github.com/linebender/xilem/pull/420">xilem#420</a>) running on Android. +This example uses system fonts, so has limited platform support because of the caveat mentioned above.</p> +</figcaption> +</figure> +<p><a href="https://github.com/linebender/xilem/pull/310">xilem#310</a> brought in some new ideas about how Xilem Core can be structured, which enables support for specialised kinds of <code>View</code>, such as for window properties. +<code>Adapt</code> views built on this were used to create an <a href="https://elm-lang.org/">Elm</a>-inspired example in <a href="https://github.com/linebender/xilem/pull/401">xilem#401</a>, showing the flexibility of the Xilem architecture. +Philipp Mildenberger has been prolific in his work on Xilem, as a co-author of the new Xilem Core, and in adapting Xilem Web to use it. +He also worked to bring support for <code>OneOf</code> views to Xilem Core in <a href="https://github.com/linebender/xilem/pull/394">xilem#394</a> - these were previously only supported in Xilem Web.</p> +<p>Masonry's observability support has also been improved, with automatic tracing to a temporary file in debug builds added in <a href="https://github.com/linebender/xilem/pull/384">xilem#384</a>. +<a href="https://github.com/linebender/xilem/pull/396">xilem#396</a> implements <a href="https://github.com/linebender/rfcs/pull/6">rfcs#6</a>, changing the architecture of Masonry to make it easier to write new features and tests.</p> +<p>There was also some excellent community engagement with Xilem in June. +Veniamin Ilmer has created an open source <a href="https://github.com/veniamin-ilmer/minesweeper_xilem/">Minesweeper game</a> using Xilem. +The discussion on Zulip (in <a href="https://xi.zulipchat.com/#narrow/stream/354396-xilem/topic/Minesweeper.20converted.20from.20Iced.20to.20Xilem">#xilem &gt; Minesweeper converted from Iced to Xilem</a>) has been very useful in guiding areas for improvement.</p> +<figure> +<img style="height: auto" src="Minesweeper.png" alt="A window titled Minesweeper, with text in the top-left 'Mines: 82', a top-center button with a neutral ASCII emoticon, and a board represented by a grid of buttons 30 wide and 16 tall, where some buttons are replaced with colour labels containing digits, and some buttons contain an exclamation mark." height="589" width = "931"> +<figcaption> +<p>Screenshot by Veniamin Ilmer of their Minesweeper game, used under the <a href="https://github.com/veniamin-ilmer/minesweeper_xilem/blob/main/LICENSE">Apache 2.0</a> license.</p> +</figcaption> +</figure> +<p>Following on from May, Olivier wrote and published a <a href="https://linebender.org/blog/rustnl-2024-unconference/">report</a> on our experience of the RustNL unconference. +This led to some useful discussion online - see <a href="https://xi.zulipchat.com/#narrow/stream/181284-blogging/topic/Draft.20-.20Report.20on.20the.20RustNL.202024.20Conference/near/444974910">the zulip thread</a> corresponding with that post for links. +We are now in the final month of the <a href="https://linebender.org/blog/roadmap-may-2024/">May-July 2024 roadmap</a>. +In the intervening time much of the work has been started or completed, although there have been some changes of priorities. +I expect that we will soon be looking at prioritising items on our <a href="https://linebender.org/wiki/long-term-roadmap/">long-term roadmap</a>.</p> + + + + + #![doc = include_str!()] with intra-doc links + 2024-06-28T00:00:00+00:00 + 2024-06-28T00:00:00+00:00 + + + + Daniel McNab + + + + + https://linebender.org/blog/doc-include/ + + <p>Creating crate level documentation by <a href="https://doc.rust-lang.org/rustdoc/write-documentation/the-doc-attribute.html#the-doc-attribute">including</a> your README can lower maintenance burden, as you do not need to manually keep the crate level docs synchronised. +However, when writing this documentation, you will also want to link directly to some mentioned <a href="https://doc.rust-lang.org/reference/items.html">items</a>. +These links need to work in all the places that the README is rendered, such as on your package's <a href="https://crates.io">https://crates.io</a> homepage, in addition to in rustdoc output. +To achieve this, you can link to the online documentation for the items:</p> +<pre data-lang="md" style="background-color:#2b303b;color:#c0c5ce;" class="language-md "><code class="language-md" data-lang="md"><span>To get started with foobar, use the </span><span style="color:#d08770;">[</span><span style="color:#a3be8c;">`frobnicate`</span><span style="color:#d08770;">][]</span><span> function. +</span><span> +</span><span style="color:#d08770;">[`frobnicate`]: https://docs.rs/foobar/latest/foobar/fn.frobnicate.html +</span></code></pre> +<p>This would however mean that users of <code>cargo doc</code> will be redirected to your crate's online docs (as opposed to their local docs) when clicking on that link. +It is however possible to make links in included markdown files behave as intra-doc links, by adding a second link reference definition in the documentation comment. +This must be placed <em>before</em> the <code>doc = include_str!()</code> line, for example:</p> +<pre data-lang="rust" style="background-color:#2b303b;color:#c0c5ce;" class="language-rust "><code class="language-rust" data-lang="rust"><span style="color:#65737e;">//! [`frobnicate`]: frobnicate +</span><span>#![</span><span style="color:#bf616a;">doc </span><span>= </span><span style="color:#bf616a;">include_str</span><span>(&quot;</span><span style="color:#a3be8c;">../README.md</span><span>&quot;)] +</span></code></pre> +<p>This means that the link has the expected link target on <a href="https://crates.io">https://crates.io</a> <em>and</em> in rustdoc (including on <a href="https://docs.rs">https://docs.rs</a>). +This trick works because when there are duplicate markdown link reference definitions, <a href="https://spec.commonmark.org/0.31.2/#example-204">"the first one takes precedence"</a>. +rustdoc sees the intra-doc link before the link to the online docs, and so uses the intra-doc link. +However, when the README is rendered standalone, only the link reference definition for the online docs is present, and so that target is used.</p> +<h3 id="example">Example</h3> +<p>For an example of both of these techniques in action, see the Android Trace crate (<code>android_trace</code>). +In particular, the text of interest is: "the main entry point to the library is <strong>AndroidTrace</strong>". +You can observe that this link goes to version 0.1.1 on the docs page, but version 0.1.0 elsewhere.</p> +<ul> +<li><a href="https://github.com/linebender/android_trace/blob/v0.1.1/android_trace/README.md">GitHub rendered readme</a></li> +<li><a href="https://crates.io/crates/android_trace/0.1.1">crates.io page</a></li> +<li><a href="https://docs.rs/android_trace/0.1.1/android_trace/">docs.rs page</a></li> +</ul> +<p>And the corresponding source code:</p> +<ul> +<li><a href="https://github.com/linebender/android_trace/blob/v0.1.1/android_trace/README.md?plain=1">README.md</a></li> +<li><a href="https://github.com/linebender/android_trace/blob/v0.1.1/android_trace/src/lib.rs">lib.rs</a></li> +</ul> +<p>The links have since been updated to use <code>latest</code>, but the direct link being to version 0.1.0 shows how this pattern works.</p> +<h3 id="getting-external-documentation-links">Getting external documentation links</h3> +<p>rust-analyzer has an "Open External Docs" command when you have an item selected. +This will open the online documentation for the selected item, generally on <a href="https://docs.rs">https://docs.rs</a>. +This works even if the item is yet to be published, in which case it will open the URL where the item would be. +You may wish to replace the resolved version number in the URL with <code>latest</code>, e.g. <code>https://docs.rs/foobar/latest/foobar/</code></p> +<h3 id="limitations">Limitations</h3> +<p><code>#![doc = include_str!("../README.md")]</code> has two main relevant limitations which you may need to work around.</p> +<p>The first of these is in code blocks. +Normal rustdoc examples can include hidden setup lines, starting with a <code>#</code> character. +These will not be rendered by rustdoc.</p> +<pre data-lang="md" style="background-color:#2b303b;color:#c0c5ce;" class="language-md "><code class="language-md" data-lang="md"><span>```</span><span style="color:#d08770;">rust +</span><span># </span><span style="color:#b48ead;">use </span><span>foobar::frobnicate; +</span><span style="color:#96b5b4;">frobnicate</span><span>(); +</span><span>``` +</span></code></pre> +<p>However, other markdown renderers do not support this extension, so the example above will be rendered as something like:</p> +<pre data-lang="rust" style="background-color:#2b303b;color:#c0c5ce;" class="language-rust "><code class="language-rust" data-lang="rust"><span># </span><span style="color:#b48ead;">use </span><span>foobar::frobnicate; +</span><span style="color:#96b5b4;">frobnicate</span><span>(); +</span></code></pre> +<p>Unfortunately, I am not aware of a workaround for this; my current best suggestion is to avoid using these hidden lines in your README. +Doctests in included markdown files do also have some diagnostics issues, as reported in <a href="https://github.com/rust-lang/rust/issues/81070">rust-lang/rust#81070</a>.</p> +<p>The second limitation is with file links, such as a link to your license file of the form <code>[LICENSE-MIT](LICENSE-MIT)</code> (as recommended in <a href="https://rust-lang.github.io/api-guidelines/necessities.html#crate-and-its-dependencies-have-a-permissive-license-c-permissive">C-PERMISSIVE</a>). +This is because rustdoc does not support relative file links in Markdown. +This can be solved by using the "opposite" of this trick - you can use a web link in your <code>lib.rs</code>, and a file link in the README.</p> +<h2 id="a-second-trick">A second trick</h2> +<p>READMEs contain some content which are not expected to be present in a crate's documentation. +For example, a top-level title, which would duplicate the <code>crate foobar</code> header added by rustdoc. +This can be resolved by using css in your documentation to hide these items; rustdoc allows embedding CSS in your documentation. +However, this should only be included in your <code>lib.rs</code>, so that the header is shown in other contexts.</p> +<pre data-lang="rs" style="background-color:#2b303b;color:#c0c5ce;" class="language-rs "><code class="language-rs" data-lang="rs"><span style="color:#65737e;">//! &lt;style&gt; +</span><span style="color:#65737e;">//! .rustdoc-hidden { display: none; } +</span><span style="color:#65737e;">//! &lt;/style&gt; +</span></code></pre> +<p>Any text in the README which should be excluded from your docs page can then be surrounded by a <code>div</code> with the <code>rustdoc-hidden</code> class, for example:</p> +<pre data-lang="md" style="background-color:#2b303b;color:#c0c5ce;" class="language-md "><code class="language-md" data-lang="md"><span>&lt;</span><span style="color:#bf616a;">div </span><span style="color:#d08770;">class </span><span>= &quot;</span><span style="color:#a3be8c;">rustdoc-hidden</span><span>&quot;&gt; +</span><span> +</span><span style="color:#8fa1b3;"># Foobar +</span><span> +</span><span>&lt;/</span><span style="color:#bf616a;">div</span><span>&gt; +</span></code></pre> +<p>As far as I'm aware, this does not have any accessibility considerations, as browsers will not make <code>display: none</code> items available in their accessibility tree.</p> +<p>Tracing Android Trace (see <a href="https://linebender.org/blog/doc-include/#example">above</a>) also uses this trick to hide the license section from the crate docs. +The license information is already present in the crate's info box.</p> +<h2 id="conclusion">Conclusion</h2> +<p>Using <code>#![doc = include_str!("../README.md")]</code> can integrate nicely with intra-doc links, if you use some tricks. +I believe that this pattern reduces the quality gap between bespoke documentation in <code>lib.rs</code> enough that using README includes becomes the right pattern for most crates. +This avoids the maintenance burden of needing to ensure that text in the crate level docs and the README do not become out-of-sync. +I intend to evaluate this technique by applying it across Linebender crates. +It may still be better to have bespoke documentation for each location, for projects which can afford the maintenance costs of that solution. +But for other projects, this can provide an easy way to improve their crate level documentation.</p> +<p>These patterns can also be applied when including non-<code>README</code> markdown documents. +I suggest linking to this post when using these patterns, to allow future readers of your code to understand the technique being used.</p> +<p>Discuss on <a href="https://xi.zulipchat.com/#narrow/stream/181284-blogging/topic/.23!.5Bdoc.20.3D.20include_str!.28.29.5D.20with.20intra-doc.20links">the Linebender Zulip</a>.</p> + + + + + May-July roadmap for Linebender + 2024-06-17T00:00:00+00:00 + 2024-06-17T00:00:00+00:00 + + + + Olivier Faure + + + + + https://linebender.org/blog/roadmap-may-2024/ + + <p>On May 7 and 8, 2024, folks from the Linebender team went to <a href="https://2024.rustnl.org/">the RustNL conference</a> for two days, followed by two days of Unconference.</p> +<p>By that point, we all felt fairly exhausted, but <del>because Raph is a cruel taskmaster</del> since we wanted to use the opportunity we had, we came together in our hotel's conference room to discuss the Linebender project, and what we wanted from it.</p> +<p>We'd initially thought that this day would be an informal day of unstructured chatting about the ecosystem, but it fairly quickly turned into a semi-formal planning exercise, where we tried to figure out a roadmap for the next few months.</p> +<p>What follows is a comprehensive summary of what exactly we're planning to do. +We've tried to focus on blockers, where a missing feature in one project is stalling progress on other projects, because those are the hardest barriers to coordination, and we wanted to take advantage of being in the same room together to knock them down.</p> +<p>This is a snapshot of the project status at the time we're writing this. +It includes some work we already finished since RustNL, but will not be updated when further work finishes.</p> +<h2 id="vello">Vello</h2> +<h3 id="robust-dynamic-memory">Robust dynamic memory</h3> +<ul> +<li><strong>Priority:</strong> Highest.</li> +<li><strong>Assigned:</strong> Daniel McNab.</li> +<li><strong>Description:</strong> Allocating dynamic memory in a robust way is essential to display large scenes without graphical artifacts. We have several possible solutions, we need to implement one.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/vello/issues/366">vello#366</a></li> +</ul> +<h3 id="reliable-snapshot-tests">Reliable snapshot tests</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Daniel McNab.</li> +<li><strong>Description:</strong> Snapshot tests are essential to test regressions in graphic software. Masonry's test suite heavily depends on them. But it's flaky right now because even when the fonts and inputs are exactly the same, renderers can have subtle differences that make the snapshots slightly different. We either need to create a fully deterministic renderer or add testing infrastructure that can tolerate small differences. <a href="https://docs.rs/nv-flip/latest/nv_flip/"><code>nv-flip</code></a> might have what we want.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/vello/issues/608">vello#608</a></li> +</ul> +<h3 id="sparse-strips">Sparse strips</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Raph Levien.</li> +<li><strong>Description:</strong> Sparse strips are a new research direction that might significantly improve our rendering pipeline and our memory footprint. We want to write a prototype implementation so we can confirm the performance benefits.</li> +<li><strong>Zulip thread:</strong> <a href="https://xi.zulipchat.com/#narrow/stream/197075-gpu/topic/Sparse.20strip.20path.20rendering">Sparse strip path rendering</a></li> +</ul> +<h3 id="add-tests">Add tests</h3> +<ul> +<li><strong>Priority:</strong> Medium.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> Adding tests is often a "we'll do it later" item, but it has short-term benefits as well. Adding tests would help Vello contributors check that their modifications don't add regressions to the crate, and help us catch hidden bugs. As a first step, we'd want to at least add some extremely basic tests, such as checking that Vello doesn't crash when we run a sample image through the CPU shaders.</li> +<li><strong>PR:</strong> <a href="https://github.com/linebender/vello/pull/439">vello#439</a></li> +</ul> +<h2 id="masonry">Masonry</h2> +<h3 id="complete-text-input">Complete text input</h3> +<ul> +<li><strong>Priority:</strong> Highest.</li> +<li><strong>Assigned:</strong> Olivier Faure, Aaron Muir Hamilton.</li> +<li><strong>Description:</strong> We'd like to bring up Masonry's textbox widget to be best-in-class among Rust frameworks. We want to support native-feeling interactions out of the box, such as cursor movement (go to next word, go to beginning of line), selection (select to end of text) and editing (IME, deleting an entire word, etc). This is something other framework developers have expressed interest in, so we want to implement it in a composable way.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/388">xilem#388</a></li> +</ul> +<h3 id="better-tracing-for-debugging">Better tracing for debugging</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> Masonry currently uses the <code>tracing</code> crate to produce logs usable for debugging. These logs could be improved, so that a user finding a bug can quickly narrow in on information relevant to the bug, without having to restart the app with changed log levels. The bulk of the improvement would be to implement a new subscriber with multiple layers.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/250">xilem#250</a></li> +</ul> +<h3 id="fix-glaring-documentation-problems">Fix glaring documentation problems</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> Masonry's documentation hasn't been updated since the port to Winit. While a lot of the code is still in flux, and thus hard to document, we should at least do a quick rewrite pass to remove references to Piet, Glazier, etc.</li> +<li><strong>PR:</strong> <a href="https://github.com/linebender/xilem/pull/329">xilem#329</a></li> +</ul> +<h3 id="finish-repository-port">Finish repository port</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Daniel McNab.</li> +<li><strong>Description:</strong> We've ported the <code>masonry-rs</code> repository to the <code>linebender</code> organization, but that repository isn't where the crate's code lives anymore. We should update the README to reflect that information, port the issues to <code>linebender/xilem</code>, and archive <code>linebender/masonry</code>.</li> +<li><strong>Zulip thread:</strong> <a href="https://xi.zulipchat.com/#narrow/stream/317477-masonry/topic/.E2.9C.94.20Finishing.20the.20Masonry.20repository.20transition">Finishing the Masonry repository transition</a></li> +</ul> +<h3 id="write-widgets-in-arena-rfc">Write "Widgets in Arena" RFC</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> This was something alluded to in the January blog posts. We want to move Masonry from storing widgets in WidgetPod to storing them in a slotmap-like arena. This is a large enough change to write an RFC about it.</li> +<li><strong>PR:</strong> <a href="https://github.com/linebender/rfcs/pull/6">rfcs#6</a></li> +</ul> +<h3 id="write-pass-order-rfc">Write "Pass order" RFC</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> Right now widgets can use context methods in their different passes to request that other passes be run. What passes can run what other passes isn't clearly documented, especially around edge cases. We should write an RFC to nail down the passes, how they can communicate, and the rationale around them.</li> +<li><strong>PR:</strong> TBD.</li> +</ul> +<h3 id="rewrite-documentation">Rewrite documentation</h3> +<ul> +<li><strong>Priority:</strong> Medium.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> Masonry's documentation hasn't been updated since the port to Winit. Once other major changes are implemented, the documentation should be brought up to date. We should avoid procrastinating on documentation too much just because the architecture is still in progress.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/389">xilem#389</a></li> +</ul> +<h3 id="improve-focus-handling">Improve focus handling</h3> +<ul> +<li><strong>Priority:</strong> Medium.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> We should improve tab focus in Masonry. Right now tab focus has some bugs, doesn't cover buttons, isn't updated by clicks, and uses architecture inherited from Druid that could be strongly simplified once other architectural changes are completed.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/390">xilem#390</a></li> +</ul> +<h3 id="improve-pointer-status-handling">Improve pointer status handling</h3> +<ul> +<li><strong>Priority:</strong> Medium.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> We should centralize and improve how Masonry handles pointers. In particular, we should add an explicit "pointer capture" API that makes other widgets not get events from that pointer until the pointer is released or lost.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/312">xilem#312</a></li> +</ul> +<h2 id="parley">Parley</h2> +<h3 id="create-abstractions-for-text-selection-and-editing">Create abstractions for text selection and editing</h3> +<ul> +<li><strong>Priority:</strong> Highest.</li> +<li><strong>Assigned:</strong> Chad Brokaw, Aaron Muir Hamilton.</li> +<li><strong>Description:</strong> We want Parley to implement types and methods that Masonry and other editors will be able to use to create a text-editing widget, or to handle selection in non-editable text. The initial implementation may be located in Masonry.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/parley/issues/52">parley#52</a></li> +</ul> +<h3 id="inline-block-layout">Inline block layout</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Chad Brokaw.</li> +<li><strong>Description:</strong> Parley should support laying out inline content the way web browsers do, where blocks are spliced into your text and will be laid out according to available inline space the same way words are.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/parley/issues/25">parley#25</a></li> +<li><strong>PRs:</strong> <a href="https://github.com/linebender/parley/pull/67">parley#67</a>, <a href="https://github.com/linebender/parley/pull/76">parley#76</a></li> +</ul> +<h3 id="write-adequate-documentation">Write adequate documentation</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Nico Burns.</li> +<li><strong>Description:</strong> Parley currently has virtually no documentation. If we want it to become a foundational crate, we need to tell people how to use it.</li> +<li><strong>PR:</strong> <a href="https://github.com/linebender/parley/pull/26">parley#26</a></li> +</ul> +<h3 id="software-renderer">Software renderer</h3> +<ul> +<li><strong>Priority:</strong> Low.</li> +<li><strong>Assigned:</strong> Chad Brokaw.</li> +<li><strong>Description:</strong> Create a software renderer for the glyphs created by Parley, so that users can easily import Parley in their library without depending on a graphics API like Vello. The software renderer should be black-and-white for simplicity. We'll call for volunteers to implement COLRv1 and other advanced features.</li> +<li><strong>PRs:</strong> <a href="https://github.com/linebender/parley/pull/54">parley#54</a>, <a href="https://github.com/linebender/parley/pull/55">parley#55</a></li> +</ul> +<h2 id="xilem">Xilem</h2> +<h3 id="android-bringup">Android bringup</h3> +<ul> +<li><strong>Priority:</strong> Highest.</li> +<li><strong>Assigned:</strong> Daniel McNab.</li> +<li><strong>Description:</strong> We want Xilem to reliably work on Android. Running your Xilem app should require a small number of steps. Ideally, it should be as simple as running <code>cargo some-command</code> in your project.</li> +<li><strong>PR:</strong> <a href="https://github.com/linebender/xilem/pull/309">xilem#309</a></li> +</ul> +<h3 id="update-repository-layout">Update repository layout.</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> We've agreed on a layout for Linebender repositories. We should move projects in the Xilem repo to match that layout.</li> +<li><strong>PRs:</strong> <a href="https://github.com/linebender/xilem/pull/302">xilem#302</a>, <a href="https://github.com/linebender/vello/pull/590">vello#590</a></li> +</ul> +<h3 id="rework-xilem-core-to-be-compatible-with-masonry-backend">Rework xilem_core to be compatible with Masonry backend</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Daniel McNab.</li> +<li><strong>Description:</strong> The version of Xilem that was ported to Masonry used a different <code>View</code> trait that is incompatible with the current <code>xilem_core</code> crate. We need to rework <code>xilem_core</code> to get traits that can be used by both Masonry and <code>xilem_web</code>. Doing so while keeping readable code is non-trivial.</li> +<li><strong>PR:</strong> <a href="https://github.com/linebender/xilem/pull/235">xilem#235</a>, <a href="https://github.com/linebender/xilem/pull/310">xilem#310</a></li> +</ul> +<h3 id="write-documentation">Write Documentation</h3> +<ul> +<li><strong>Priority:</strong> High.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> Xilem's lack of documentation is one of the problems new users complain about the most often. We need to avoid staying in that state for too long.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/392">xilem#392</a></li> +</ul> +<h3 id="re-implement-async-integration">Re-implement async integration</h3> +<ul> +<li><strong>Priority:</strong> Medium.</li> +<li><strong>Assigned:</strong> Daniel McNab.</li> +<li><strong>Description:</strong> One of Xilem's selling points is the ability to handle virtual lists and async sources of data. That ability was temporarily removed for the Masonry port, but we'd like to add it back. We don't want Masonry to be aware of async stuff, but the AppDriver trait should at least provide a method which lets Xilem access Masonry internals on its own.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/340">xilem#340</a></li> +</ul> +<h3 id="add-unit-tests">Add unit tests</h3> +<ul> +<li><strong>Priority:</strong> Low.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> We need to figure out an architecture for doing unit tests in Xilem. Tests can then be added by volunteer contributors. At some point we should hopefully switch to a "new test for every new feature" workflow.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/393">xilem#393</a></li> +</ul> +<h3 id="add-basic-benchmarks">Add basic benchmarks</h3> +<ul> +<li><strong>Priority:</strong> Low.</li> +<li><strong>Assigned:</strong> Olivier Faure.</li> +<li><strong>Description:</strong> Right now we're mostly working off vibes to know whether or not any of our work improved performance or introduced regressions. +We should write at least <em>one</em> benchmark that would test a basic Xilem use-case, so we get a general idea of how our performance is progressing.</li> +<li><strong>Issue:</strong> <a href="https://github.com/linebender/xilem/issues/362">xilem#362</a></li> +</ul> +<h2 id="accesskit">AccessKit</h2> +<p>Matt Campbell's contract with Google hasn't started yet. +When it does, the top priority will likely be the Android backend.</p> +<p>The plan is to study existing Android accessibility implementations for non-Java toolkits, including Flutter, Chromium, and Gio, to get a better understanding of what's required to implement Android accessibility from scratch.</p> +<p>Beyond Android support, we've only had cursory discussions of what work Matt will do for the rest of the year. +Possible themes include scrollable containers, virtualized lists, richer text support (e.g. exposing font and style attributes) across platforms, and better integration into Xilem/Masonry.</p> +<h2 id="android-specific-work">Android-specific work</h2> +<p>Getting the Android port right involves a lot of small changes and making things feel non-broken.</p> +<p>Some notable sub-goals:</p> +<h3 id="subclassing-view-application-activity">Subclassing View/Application/Activity</h3> +<ul> +<li><strong>Priority:</strong> Highest.</li> +<li><strong>Assigned:</strong> Aaron Muir Hamilton, Raph Levien.</li> +<li><strong>Description:</strong> The Java classes of an Android application are where the rubber meets the road. We're investigating what we want our boilerplate to look like.</li> +</ul> +<h3 id="handling-ime">Handling IME</h3> +<ul> +<li><strong>Priority:</strong> Highest.</li> +<li><strong>Assigned:</strong> Aaron Muir Hamilton, Raph Levien.</li> +<li><strong>Description:</strong> We need to extend Winit to be compatible with Android IME interfaces. An Android application without support for the virtual keyboard and other input methods is a non-starter. Our design choices here will have some influence on accessibility as well.</li> +</ul> +<h3 id="gesture-recognition">Gesture recognition</h3> +<ul> +<li><strong>Priority:</strong> Low.</li> +<li><strong>Assigned:</strong> Aaron Muir Hamilton.</li> +<li><strong>Description:</strong> When the user swipes on the screen, we want to send some kind of scrolling event instead of a normal pointer event. Ideally there should be first-class support for that event to handle momentum scrolling, but a dumber solution would just emulate mouse wheel ticks.</li> +</ul> +<h2 id="conclusion">Conclusion</h2> +<p>Whew! We have our work cut out for us there.</p> +<p>Overall, I'm feeling very optimistic about the coming months. +In the weeks since we first drafted this roadmap, we've already made a lot of progress on our respective tasks (for instance Daniel is now running on what async experts call a "work-stealing" algorithm), so it does look like we'll meet our deadlines.</p> +<p>What comes after that is a bit hazier. +Our three areas of focus are likely to be Android support, accessibility, and developer experience.</p> +<p>As we fill out gaps in our feature set, Xilem is moving towards its faraway goal: becoming a stable, mature framework for GUI applications. +We're not GUI yet, but we certainly hope to be one day.</p> +<p>In the meantime, stay tuned!</p> + + + + + Report on the RustNL 2024 Unconference + 2024-06-15T00:00:00+00:00 + 2024-06-15T00:00:00+00:00 + + + + Olivier Faure + + + + + https://linebender.org/blog/rustnl-2024-unconference/ + + <p>On May 7 and 8, 2024, folks from the Linebender team went to <a href="https://2024.rustnl.org/">the RustNL conference</a> in Delft. +We listened to <a href="https://www.youtube.com/playlist?list=PL8Q1w7Ff68DBZZbJt3ie5MUoJV5v2HeA7">some Rust-related talks</a>, Raph <a href="https://www.youtube.com/watch?v=OvfNipIcRiQ&amp;list=PL8Q1w7Ff68DBZZbJt3ie5MUoJV5v2HeA7&amp;index=15">gave one on Xilem</a>, Rik Arends did the "hot-reload my entire editor live" thing that makes every other Rust GUI developer jealous, it was an all-around great time.</p> +<p>After RustNL, though, another less-documented event called <a href="https://2024.rustnl.org/unconf/">The Unconference</a>. +It was from roughly the same organizers and took place in the same city, but the format was fairly different.</p> +<p>The Unconference wasn't livestreamed, and I haven't found any public discussion of it, so I thought I'd take the time to describe a bit of what was going on.</p> +<h2 id="the-format">The format</h2> +<p>The "Unconference" was two days of loosely structured chats between members of various Rust project teams where people talked about ecosystem collaboration, complained to lang team members that their favorite feature wasn't implemented yet, <a href="https://poignardazur.github.io/2024/05/25/report-on-rustnl-variadics/">went to pester everyone else about variadic generics</a>, and other good fun.</p> +<p>Attendees were split into three teams:</p> +<ul> +<li>The Rust project.</li> +<li>GUI and Applications.</li> +<li>Embedded development.</li> +</ul> +<p>Discussions inside these teams were mostly self-organized, with cross-team discussions mostly taking place during lunch and recess.</p> +<h3 id="on-the-tyranny-of-structurelessness">On the tyranny of structurelessness</h3> +<p><em>Note: This section is very much my personal opinion and doesn't represent the Linebender project as a whole.</em></p> +<p>I'm not sure the self-organized format worked well.</p> +<p>From what I saw, the Embedded team took well to it, and the Rust team was kept productive thanks to Alice Cecile's efforts in marshaling everyone.</p> +<p>In the case of the GUI team, people were spread in a very large room, which should have been conducive to small side discussions and people splitting up to talk about the problems that interested them. +Instead, there was an unspoken accord to progress through agenda items one by one, with a few people dominating the discussions on these items.</p> +<p>Because those people we spread around a large room, they had to talk loudly to address each other, which left little room for side-discussions. +Because the people talking were naturally the most confident and extroverted, more introverted people ended up taking a passive role in the discussion.</p> +<p>To me, this feels like a strategic mistake. +It was a setup that encouraged bikeshedding and long back-and-forths and discouraged plurality of opinions. +It's no coincidence that the most interesting conversations of the Unconference happened at lunch: lunch was the point of the Unconference where people were most mixed, had the most spontaneous conversations, and were least constrained by having to follow what someone else was saying.</p> +<p>Our discussions were still productive, I just feel like the format could have been improved.</p> +<h2 id="the-gui-team">The GUI team</h2> +<p>As a member of the Linebender project, I was mostly exposed to the GUI team's proceedings.</p> +<p>The main topics of interest were:</p> +<ul> +<li>Build tooling (especially for Android and other non-desktop platforms).</li> +<li>Text layout and editing.</li> +<li>Winit adoption.</li> +<li>Accessibility.</li> +<li>Potential for further collaboration.</li> +<li>Requests for new Rust features.</li> +</ul> +<p>Note that I'm skipping a lot of topics from the agenda and other side discussions. +The topics above were the most prominent during those two days.</p> +<p>There was also a fair amount of informal chatter around LogLog Games' strongly critical <a href="https://loglog.games/blog/leaving-rust-gamedev/">Leaving Rust gamedev after 3 years</a> article. +I think those discussions mostly reflected the Bevy community's consensus, that the article had some flaws but overall pointed at very clear weaknesses in the Rust GUI / game engine ecosystem.</p> +<h3 id="build-tooling">Build tooling</h3> +<p>Everyone agreed that a better solution was needed to ship non-TUI Rust apps.</p> +<p>There was discussion about various platforms and build systems, and the difficulty of having to e.g. write Java code for an Android port, and whether anyone wanted to take responsibility for maintaining that glue layer for the rest of the ecosystem.</p> +<p>No actionable decisions were made, but the consensus seems to be that although integrated build tools are desirable, external build tooling for complex platforms (primarily Apple and Android) is likely to remain necessary. +Nobody seems to have stepped up to work on multi-target builds in Cargo, and since external build tools are required as it is, most people are okay with building everything several times when they release a multi-target package. +Most users are comfortable invoking platform-specific tools for bundling, signing, and manifest generation, so there is not much urgency for integrated tooling for these.</p> +<h3 id="text-layout-and-editing">Text layout and editing</h3> +<p>There was some widespread interest in the Linebender ecosystem's text-handling crates. +From what I remember, Rik Arends and others had concerns about whether e.g. Parley and Swash depend on our Vello renderer (they don't).</p> +<p>Some people also wanted Parley to be decoupled from Swash.</p> +<p>People were especially interested in the idea of having access to a common text-editing widget, or at least infrastructure for creating one. +That widget would handle IME, text selection, accessibility actions, etc, in a way that would feel native to different platforms with their own text-editing quirks (mobile, macOS, Linux with vim mode, etc).</p> +<h3 id="winit">Winit</h3> +<p>By now all of the Rust ecosystem has firmly converged on <a href="https://github.com/rust-windowing/winit"><code>winit</code></a> as the windowing platform-abstraction solution of choice.</p> +<p>(Well, not all! <a href="https://github.com/makepad/makepad">One small project</a> with indomitable maintainers still holds out against the invaders.)</p> +<p>The consensus during this discussion seemed to be that Winit was there to stay. +<a href="https://github.com/tauri-apps/tao">TAO</a> users present were generally interested in being able to use upstream Winit in the future, if its API adopts or supersedes the improvements made in TAO. +Most were happy to see Winit becoming more trait-oriented, and to see the <code>dpi</code> crate spun off from Winit.</p> +<p>Glazier is still shelved and we're planning to port its features to Winit until it reaches feature parity.</p> +<p>A discussion that came up was the idea of splitting more "vocabulary types" from Winit into standalone crates. +Vocabulary crates, e.g. crates that only define types and very little code, have a very low cost in memory and build times, while allowing projects to interop with e.g. Winit without actually adding a dependency on Winit.</p> +<p>This was connected with the discussions about text editing: having a vocabulary crate that would list Winit's events and also Parley's cursor movements would allow for a very low-dependency text editing widget.</p> +<h3 id="accessibility">Accessibility</h3> +<p><em>Note: This section is also my personal opinion and doesn't represent the Linebender project either.</em></p> +<p>The subject of Accessibility came up informally, but I'll claim it was underexplored.</p> +<p>While the subject was on the agenda, by the time we reached it the Unconference had been running long enough that everyone was tired and ready to leave or get to the catering. +This is an unfortunate pattern that I think is worth pointing out: if projects don't make a deliberate effort to prioritize discussions of accessibility, the subject will be left out.</p> +<p>Matt Campbell, the maintainer of AccessKit, could not attend the Unconference. +I'm concerned that, in his absence, other maintainers might have felt a dilution of responsibility: since the accessibility guy wasn't there, nobody felt empowered to bring up accessibility.</p> +<p>(This might sound like it contradicts my section about structurelessness above. +It doesn't. +I'm not saying organizers should have pushed harder for accessibility - they did try - I'm saying that we should strive for a culture where framework developers think about accessibility without waiting for someone to tell them to.)</p> +<p>One point did come up during the discussion which I'd like to hammer in: the Rust ecosystem should adopt a holistic view of accessibility. +Accessibility isn't just about screen readers, and making a framework accessible doesn't stop at adding AccessKit as a dependency, though doing so is a great first step.</p> +<p>Rik asked if there was a minimal set of ARIA attributes that people could start using in their UI, as the set of available attributes is gigantic. +The AccessKit framework is rich, and it's not obvious at first glance how much is needed versus nice-to-have. +The current reference in the Rust ecosystem is <a href="https://github.com/emilk/egui/pull/2294">the AccessKit implementation in egui</a>.</p> +<h3 id="requests-for-rust-features">Requests for Rust features</h3> +<p>Jon Kelley, the creator of Dioxus, had <a href="https://dioxus.notion.site/Dioxus-Labs-High-level-Rust-5fe1f1c9c8334815ad488410d948f05e">a laundry list of features</a> he wanted from the Rust language. +That list was later <a href="https://github.com/rust-lang/rust-project-goals/pull/10">filed in the Project Goals repository</a>.</p> +<p>The requests were well-documented, with motivating examples in existing Dioxus code that would clearly be improved by the features. +Most of them felt both self-contained and like they would tremendously both beginners and veteran Rust developers; though Jon made the point that the papercuts he wanted to remove were especially punishing for new developers trying to become familiar with Rust.</p> +<p>Overall people were very enthusiastic about them, and the lang team members in the room seemed pretty optimistic that those features could be added.</p> +<p>My favorite proposals were:</p> +<ul> +<li><code>Capture</code> trait for auto-cloning reference-counted types in closures.</li> +<li>Automatic partial borrows.</li> +<li>Optional struct attributes.</li> +</ul> +<p>Jon also wanted support for a remote cache of pre-built crates, so that users wouldn't suffer from having to rebuild dozens of crates every time you download your crate's dependencies. +The consensus from Rust maintainers was that such a cache would be essentially impossible with Rust's current architecture.</p> +<p>Niko Matsakis recently released <a href="https://smallcultfollowing.com/babysteps/blog/2024/06/02/the-borrow-checker-within/">The borrow checker within</a>, which feels like a follow-up to some of these discussions.</p> +<h2 id="collaboration-in-the-rust-gui-ecosystem">Collaboration in the Rust GUI ecosystem</h2> +<p>Over the last two years I've joked a few times that everybody in the Rust GUI ecosystem wants the ecosystem to standardize on common crates, as long as it's <em>their</em> crates.</p> +<p>After RustNL, I'm pleased to report this joke isn't accurate anymore.</p> +<p>A vibe that permeated all discussions was people wanting work to be pooled. +It felt like people didn't strongly care whose crate we adopted, as long as we all agreed the crate made sense: +we're slowly crawling out of the <a href="https://xkcd.com/927/">xkcd 927</a> dilemma.</p> +<p>The main ecosystem crates that people are enthusiastic about sharing are:</p> +<ul> +<li><a href="https://github.com/rust-windowing/winit">winit</a> for creating windows.</li> +<li><a href="https://github.com/AccessKit/accesskit/">AccessKit</a> for plugging into accessibility APIs.</li> +<li><a href="https://github.com/gfx-rs/wgpu/">wgpu</a> for using modern GPU features.</li> +</ul> +<p>Jon Kelley also said he would be interested in using Masonry as the native backend for Dioxus, though we haven't hashed out details yet.</p> +<h3 id="corporate-funding">Corporate funding</h3> +<p>For open-source projects, "Who funds this" is a difficult question: in any healthy project, there is a large scale of contributions, with individual non-corporate contributors at one end, and companies paying cash to the project's treasury at the other. +In-between are self-employed people like me contracted to work on an open-source project, and corporate employees who contribute to the project as part of their 9-to-5 job.</p> +<p>Some monetary contributions can also come from individual non-corporate donors: Servo has about fifty of them, for instance.</p> +<p>With that in mind, some notable sponsors for projects represented at the Unconference were:</p> +<ul> +<li><strong>Google Fonts:</strong> Linebender projects.</li> +<li><strong>Futurewei:</strong> Dioxus, Makepad, Robius and Servo.</li> +<li><strong>Embark:</strong> Bevy, winit and rust-gpu.</li> +<li><strong>Foresight Spatial Labs:</strong> Bevy.</li> +<li><strong>Rerun.io:</strong> egui.</li> +</ul> +<p>Not present at RustNL but relevant to the ecosystem are <strong>System76</strong> (funding COSMIC-Text and contributing to iced), <strong>Kraken</strong> (funding iced), and <strong>Slint</strong> who are self-funding as a startup targeting embedded UIs and couldn't attend due to time constraints.</p> +<p>Overall the number of different backers feels like a symptom of a healthy ecosystem: while some large corporate sponsors bring much more resources than others (Google and Futurewei especially), the ecosystem isn't in a state where any specific backer pulling out would completely collapse progress.</p> +<h2 id="conclusion">Conclusion</h2> +<p>Before anything else, I'd like to express a big thanks to the volunteers who helped organize RustNL.</p> +<p>Most of the attendees were absolutely exhausted after two days of talks and two more days of Unconference, but these folks had to <em>run</em> the darn thing. +I think everyone who attended was impressed with them.</p> +<p>Overall RustNL and the Unconference felt like getting a year of coordination done in a week. +It was a thoroughly productive time, and I couldn't be happier I attended. +Everyone I asked about it shared the same opinion.</p> +<p>And the discussions we had during the event showed there was a great appetite to push the ecosystem towards more cooperation, both between GUI projects and with Rust maintainers!</p> +<p>I'm feeling more hopeful about the future of Rust GUI than ever.</p> +<p>Now it's time to get back to work.</p> + + + + + This Month in Xilem, May 2024 + 2024-06-12T00:00:00+00:00 + 2024-06-12T00:00:00+00:00 + + + + Daniel McNab + + + + + https://linebender.org/blog/tmix-05/ + + <p>Several members of Linebender attended <a href="https://2024.rustnl.org/">RustNL</a> at the start of May. +Raph gave a talk titled <em>Xilem: Let's Build High Performance Rust UI</em> (<a href="https://youtu.be/OvfNipIcRiQ">YouTube</a>). +The conference also provided a great opportunity to meet with developers from other Rust user interface projects; +Olivier has produced a report on the unconference, which will be published here shortly. +In addition, those in attendance met after the conference and worked on a roadmap for Linebender, which we are also planning to share here.</p> +<p>We have taken several important steps on Xilem. +At the start of the month, we released <a href="https://github.com/linebender/xilem/releases/tag/v0.1.0">Xilem 0.1.0</a> and <a href="https://github.com/linebender/xilem/releases/tag/masonry%2Fv0.2.0">Masonry 0.2.0</a>. +This is the first published release of Xilem, and includes text input (<a href="https://github.com/linebender/xilem/pull/241">xilem#241</a>), AccessKit integration (<a href="https://github.com/linebender/xilem/pull/244">xilem#244</a>) and a TodoMVC inspired example (<a href="https://github.com/linebender/xilem/pull/257">xilem#257</a>). +Work through the rest of the month included explorations of a generic <code>View</code> trait (<a href="https://github.com/linebender/xilem/pull/310">xilem#310</a>), and an Android port (<a href="https://github.com/linebender/xilem/pull/309">xilem#309</a>, <a href="https://github.com/linebender/xilem/pull/313">xilem#313</a>). +<a href="https://github.com/linebender/rfcs/pull/6">rfcs#6</a> is designed to reduce boilerplate when using Masonry, which should help those creating custom Masonry widgets.</p> +<p>Other Linebender projects have seen steady improvements. +<a href="https://github.com/linebender/vello/pull/575">vello#575</a> significantly reduced shader compilation time at startup for projects using Vello, and <a href="https://github.com/linebender/vello/pull/516">vello#516</a> enabled clearer error handling. +Nico Burns has started an exciting project for inline box layout (<a href="https://github.com/linebender/parley/pull/67">parley#67</a>), which will enable Parley to be used in projects which must implement Web layout.</p> + + + + + This Month in Xilem, April 2024 + 2024-05-01T00:00:00+00:00 + 2024-05-01T00:00:00+00:00 + + + + Raph Levien + + + + + https://linebender.org/blog/tmix-04/ + + <p>Again, last month saw a substantial amount of infrastructure work in the development of Xilem. +The biggest change is landing Masonry as a crate within the Xilem repo (<a href="https://github.com/linebender/xilem/pull/203">xilem#203</a>) and adding a new xilem_masonry front-end. +The existing xilem widget tree remains in the tree during a transitional period, but the focus of development is now on Masonry.</p> +<p>Masonry is a principled abstraction layer within the stack. +While it is designed to work well with the Xilem reactive architecture, it is not dependent on it. +We'd love to see experimentation with alternative reactive frameworks, and also language bindings. +A lot more detail about the motivation and design of Masonry is in Olivier's <a href="https://linebender.org/blog/xilem-backend-roadmap/">roadmap blog</a>.</p> +<p>Two major infrastructural crates have been published. +<a href="https://crates.io/crates/parley">Parley</a> is our text layout crate, supporting variable fonts and other advanced features. +Supporting Parley is <a href="https://crates.io/crates/fontique">fontique</a>, a crate for enumerating the system fonts and making them available for itemization (choosing the right font to support a particular script).</p> +<p>In GPU rendering land, we have written a paper on GPU stroke expansion (<a href="https://arxiv.org/abs/2405.00127">arXiv</a>, <a href="https://github.com/linebender/gpu-stroke-expansion-paper">repo</a>) and submitted it to a conference. +This paper explains quite a bit of the math behind Vello's path rendering, and explains how we adapted it for high performance on the GPU. +It's also a good time to note the <a href="https://docs.rs/crate/wgpu/0.20.0">wgpu 0.20</a> release, which contains some work to improve on suboptimal zero initialization that will dramatically improve startup time on many platforms, including Android (<a href="https://github.com/gfx-rs/wgpu/pull/5508">wgpu#5508</a>). +It also has support for subgroups, which will unblock further performance improvements in Vello.</p> +<p>We're very much looking forward to participating in RustNL 2024, where Raph will present a talk on Xilem. +It looks like it will be a great opportunity to meet with other Rust UI ecosystem projects to find common ground and possibilities to collaborate.</p> + + + + + This Month in Xilem, March 2024 + 2024-04-04T00:00:00+00:00 + 2024-04-04T00:00:00+00:00 + + + + Daniel McNab + + + + + https://linebender.org/blog/tmix-03/ + + <p>Since the last update, there have been three newly released projects from Linebender:</p> +<ul> +<li><a href="https://crates.io/crates/velato"><img src="https://img.shields.io/crates/v/velato.svg" alt="Velato crates.io badge." /></a> +<a href="https://github.com/linebender/velato">Velato</a>: A parser and driver for Lottie animation files in applications using Vello</li> +<li><a href="https://crates.io/crates/vello_svg"><img src="https://img.shields.io/crates/v/vello_svg.svg" alt="Vello SVG crates.io badge." /></a> +<a href="https://github.com/linebender/vello_svg">Vello SVG</a>: Allows displaying (some) SVG documents in Vello applications</li> +<li><a href="https://crates.io/crates/tracing_android_trace"><img src="https://img.shields.io/crates/v/tracing_android_trace.svg" alt="Tracing Android Trace crates.io badge." /></a> +<a href="https://github.com/linebender/android_trace">Android Trace</a>: Resilient bindings to <a href="https://developer.android.com/ndk/reference/group/tracing">NDK Tracing</a> and an integration with <a href="https://crates.io/crates/tracing">tracing</a></li> +</ul> +<p>If you have a WebGPU capable browser you can check out the <a href="https://linebender.org/velato/">web demo of Velato</a>.</p> +<p>Implementation work for <a href="https://github.com/linebender/rfcs/blob/main/rfcs/0001-masonry-backend.md">rfcs#1</a> has started. Masonry is being ported to Vello in <a href="https://github.com/PoignardAzur/masonry-rs/pull/56">masonry#56</a>, with the next step being a move to Winit. +This work can be followed in the <a href="https://xi.zulipchat.com/#narrow/stream/317477-masonry">#masonry</a> stream on Zulip.</p> +<p>We have landed some important improvements to Vello. +Euler spiral based stroke expansion (<a href="https://github.com/linebender/vello/pull/496">vello#496</a>) enables GPU stroking by default, significantly improving performance in scenes which make heavy use of strokes. +Additionally, we now support scenes with more than 64k draw objects (<a href="https://github.com/linebender/vello/pull/526">vello#526</a>). +We have also been making progress on <a href="https://github.com/linebender/vello/issues/366">vello#366</a>, by evaluating different strategies for memory allocation. +The first part of this has landed in <a href="https://github.com/linebender/vello/pull/537">vello#537</a>, which avoids undefined behaviour in more out-of-memory cases.</p> +<p>Additionally, we have been able to continue taking advantage of improvements in the <a href="https://github.com/googlefonts/fontations">foundational font crates</a> from Google Fonts. +This has enabled support for font fallback in <a href="https://github.com/linebender/xilem/pull/196">xilem#196</a>. +Hinting has been unblocked by <a href="https://github.com/linebender/vello/pull/544">vello#544</a>, although the implementation has not yet landed in Xilem.</p> +<p><a href="https://github.com/linebender/rfcs/blob/main/rfcs/0005-version-matrix.md">rfcs#5</a> has been approved, which will improve the robustness of our continuous integration. +Kaur Kuut, the author of the RFC, has also landed these changes in <a href="https://github.com/linebender/vello/pull/523">vello#523</a>.</p> +<p>A focus for the next month is preparing for the <a href="https://2024.rustnl.org/">RustNL conference</a> at the beginning of May. +We are hoping to present a compelling demo there.</p> + + + + + This Month in Xilem, February 2024 + 2024-03-04T07:34:42+00:00 + 2024-03-04T07:34:42+00:00 + + + + Raph Levien + + + + + https://linebender.org/blog/tmix-02/ + + <p>Early this year, we made a decision to use the winit crate for window creation, as opposed to rolling our own. +That work has now landed in main (<a href="https://github.com/linebender/xilem/pull/176">xilem#176</a> was the main PR, with a number of followups). +A major motivation was to enable more platforms, with Android being a major goal. +That work is in progress; a major subtask is enumerating the system fonts. +As expected, this move has uncovered rough edges in winit and some regressions in behavior. +We plan to address those, with the improvements hopefully benefiting the entire Rust UI ecosystem.</p> +<p>The <a href="https://crates.io/crates/vello">Vello crate</a> has been published as version 0.1, with significant documentation improvements and a friendly example. +We consider this an alpha-quality release, as there are known issues. +Even so, we want to get a release out to facilitate integrations and shake out problems.</p> +<p>Another major area of work on Vello is investigation of startup time, which can take multiple seconds when the platform's GPU drivers are slow at compiling the compute shaders. +A number of techniques mitigate that. +One is to compile shaders in parallel, using multiple cores, and that has landed (<a href="https://github.com/linebender/vello/pull/455">vello#455</a>). +An even bigger improvement will be caching compiled shaders. +Daniel McNab has made an encouraging prototype (<a href="https://github.com/linebender/vello/pull/459">vello#459</a>), and the ultimate goal is to land that in wgpu so projects across the ecosystem can benefit from it (<a href="https://github.com/gfx-rs/wgpu/pull/5292">wgpu#5292</a>).</p> +<p>The work to compute strokes on the GPU using Euler spirals continues, but has not yet landed. +The current state is a draft PR that implements the logic in Rust code, which now needs to be translated to WGSL for GPU evaluation (<a href="https://github.com/linebender/vello/pull/496">vello#496</a>, draft PR).</p> +<p>There has been progress at higher levels of Xilem. +Among other things, Nico Burns landed a scroll view implementation (<a href="https://github.com/linebender/xilem/pull/155">xilem#155</a>), and Philipp Mildenberger has been steadily refining xilem_core and xilem_web, including fine grained tree structure tracking and minimal/efficient DOM-tree-updates (<a href="https://github.com/linebender/xilem/pull/160">xilem#160</a>).</p> + + + + + This Month in Xilem, January 2024 + 2024-02-06T07:28:42+00:00 + 2024-02-06T07:28:42+00:00 + + + + Raph Levien + + + + + https://linebender.org/blog/tmix-01/ + + <p>Welcome to the first in the “this month in Xilem” series, bringing updates on the <a href="https://github.com/linebender/xilem">Xilem</a> UI toolkit.</p> +<p>There were two blog posts on the new <a href="https://linebender.org/blog">Linebender blog</a>. +The first, <a href="https://linebender.org/blog/xilem-2024/">Xilem 2024 plans</a>, sets out the goals for the project for the year. +The second, <a href="https://linebender.org/blog/xilem-backend-roadmap/">Roadmap for the Xilem backend in 2024</a>, by Olivier Faure, presents a roadmap for the Xilem native widget set. +A major feature of the roadmap is a clean boundary between the Xilem reactive framework and the lower level widget set. +We hope that enables experimentation with other reactive frameworks and possibly integration with other projects, rather than requiring everybody to buy into the Xilem stack.</p> +<p>On the planning front, a major decision was whether to continue work on our own window creation library, <a href="https://github.com/linebender/glazier">Glazier</a>, or whether to join forces with <a href="https://github.com/rust-windowing/winit">winit</a>. +Among other things, since Android is a primary target for our work, and winit already has a working Android back-end, it offers an appealing path to getting that up quickly. +We have decided to try joining forces with winit, and look forward to future collaboration. +Over the next few weeks, that will entail porting Xilem over to winit (<a href="https://github.com/linebender/xilem/issues/163">xilem#163</a>) and also trying to land working Android IME (soft keyboard) support in winit (<a href="https://github.com/rust-windowing/winit/pull/2993">winit#2993</a>).</p> +<p>In Vello, a major advance was porting the low level font handling code from the experimental swash crate to the production-quality <a href="https://github.com/googlefonts/fontations">skrifa</a> (<a href="https://github.com/linebender/vello/pull/423">vello#423</a>). +Skrifa is being developed by Google Fonts as a memory safe library for loading font files, and is integrated into Chromium builds. +Over the coming weeks, a goal is to release Vello (and supporting crates) on crates.io.</p> + + + + + Roadmap for the Xilem backend in 2024 + 2024-01-19T13:00:00+00:00 + 2024-01-19T13:00:00+00:00 + + + + Olivier Faure + + + + + https://linebender.org/blog/xilem-backend-roadmap/ + + <p>As you may have heard by now, Google Fonts is funding me this year to work on Xilem.</p> +<p>I'm not alone in that: Aaron Muir Hamilton, Daniel McNab and Matt Campbell were funded as well to work on various parts of the ecosystem. I believe this is Matt's third year getting funding from Google Fonts.</p> +<p>Now, <em>what</em> I was hired to do might be unclear to you. The scope we agreed on was fairly broad and was stated as "contributing to Xilem's view tree and developer experience", but that could mean a lot of things.</p> +<p>The first thing I want to do is communicate a clearer picture. I have a a lot of plans for Xilem, and they involve major changes from the current architectures, changes that might be worrying to the community at large or even to Raph Levien. I certainly don't want to give the impression that I'm wresting the project away from the Linebender community for Google's interest, and that means being transparent early and often about the things I want to rework.</p> +<h2 id="what-i-want-for-xilem">What I want for Xilem</h2> +<p>Xilem is a research-and-development project, the latest in a series (Xi-Core, Druid, Crochet, Lasagna, Idiopath), that aims to explore how UI development can be made compatible with Rust.</p> +<p>This might feel a little banal now, because Rust GUI frameworks are popping up everywhere and starting to settle on similar patterns, but those patterns weren't obvious in 2019! Xilem is very different from Druid, and getting to its current architecture has been a process.</p> +<p>Xilem has been perma-experimental since May 2022. Once it got started, the main Druid maintainers stopped contributing almost entirely with the expectation that Xilem would replace Druid once it was ready. Unfortunately, it still hasn't made enough progress to be on parity with Druid, yet Druid still lies abandoned, which isn't great when people had started relying on it.</p> +<p>It's debatable how much this could have been avoided. As I've pointed out before, the Rust GUI ecosystem is subject to massive <a href="https://seths.blog/2005/03/dont_shave_that/">yak-shaving</a>: many of us came here because we wanted to build a text editor, and now we're all learning about <a href="https://faultlore.com/blah/text-hates-you/">text rendering</a>, <a href="https://lord.io/text-editing-hates-you-too/">text editing</a>, <a href="https://raphlinus.github.io/ui/graphics/2020/09/13/compositor-is-evil.html">compositing</a><sup class="footnote-reference"><a href="#1">1</a></sup>, <a href="https://accesskit.dev/accesskit-integration-makes-bevy-the-first-general-purpose-game-engine-with-built-in-accessibility-support/">accessibility trees</a>, <a href="https://raphlinus.github.io/gpu/2021/05/13/stack-monoid-revisited.html">using monoids to implement stuff on the GPU</a>, <a href="https://www.leafwing-studios.com/blog/ecs-gui-framework/">ECS</a>, and some concepts that I'm absolutely certain Raph made up like <a href="https://raphlinus.github.io/curves/2023/04/18/bezpath-simplify.html">Bézier paths</a> and <a href="https://raphlinus.github.io/rust/2023/04/01/rust-to-cpp.html">C++</a>.</p> +<p>And to a certain extent, yak-shaving is good! "I'm going to do better than X without learning how X works" is a child's attitude. It's the attitude we all start with, and it fills us with courage, but that courage is naive. True improvement comes from keeping that courage after spending years learning how immense the problem space is, and keeping faith that it's possible to do better. The Rust community is one that values not just doing things from scratch, but also learning from the past to get them right.</p> +<p>This is good, but the "get them right" part takes a lot of time, and in the meantime, I'd argue that we've neglected end users a bit. We've abandoned Druid before Xilem was ready as an alternative, and then we worked on foundational and experimental projects that would make Xilem stronger and sounder in the long term, but left the project in an awkward state in the meantime (except for the web backend, which made a lot of progress).</p> +<p>In the <a href="https://www.leafwing-studios.com/blog/ecs-gui-framework/">ECS-backed GUI framework</a> article I linked, Bevy maintainers have this to say:</p> +<blockquote> +<p>Not to be too harsh, but a lot of the existing Rust GUI solutions... just aren't very good. There's a lot of passable options, but they all have non-trivial drawbacks. No one has really risen to the top as a clear winner. [...] Deep down, we all know that we can do better, and we should.</p> +</blockquote> +<p>My ambition is to makes this paragraph obsolete before the end of the year. I want Xilem to get back to being suggested to newbies in the same breath as Iced and SlintUI. In the next few years, I want the entire ecosystem to get to a point where people talk about Rust GUI like they talk about ripgrep or rustls.</p> +<p>To give one specific example: my personal goal is to implement seamless hot reloading for Xilem before the end of 2024. I believe it's feasible, and I believe doing it will radically change the way people think about Rust GUI, along with <a href="https://poignardazur.github.io/2023/02/02/masonry-01-and-my-vision-for-rust-ui/">other improvements I hope to unlock over time</a>.</p> +<p>In the shorter term, my plan is to focus on basic features, widgets and styling options so people can experiment with Xilem, building on Raph's work on Vello over the past year. <a href="https://gist.github.com/giannissc/172c6c591997ee14f6120134a7990697">John Skottis's Xilem UX Notes</a> give a good picture of the kinds of things I'll be working on.</p> +<p>The other big short-term priority is going to be documentation. We've seen a lot of people complain that the Linebender project were poorly documented and hard to get into; it was the most popular reaction to our <a href="https://linebender.org/blog/xilem-2024/">2024 announcement</a>, but it echoed sentiments we'd seen before. We're aware of the problem, and we intend to work on it.</p> +<p>In the medium term, I also plan to work on the performance aspect of Xilem. People from Google Fonts have expressed interest in seeing how much performance we can get from Rust UI. While my mission isn't <em>limited</em> to performance work, it will be an ongoing focus, especially since it's an area where the Rust language brings unique opportunities. I'll go into more details on Rust performance and power efficiency in a later article.</p> +<h2 id="major-changes-i-want-to-implement-soon">Major changes I want to implement soon</h2> +<p>These are the big changes I want to work on soon. Realistically, "soon" is going to be relative, because some of these changes are going to be controversial, and part of the work is going to be convincing people of their value.</p> +<h3 id="switching-to-masonry-as-a-backend">Switching to Masonry as a backend</h3> +<p>Okay, this one makes me blush a little.</p> +<p>I'm the only maintainer of Masonry, a GUI crate with barely over 300 stars on Github and little outside interest. Can I really justify taking the money Google pays me to improve Xilem and spending my time on Masonry instead?</p> +<p>That choice isn't random, mind you: Masonry was forked from Druid, Xilem's ancestor, and in fact Xilem and Masonry share a lot of code right now.</p> +<p>In fact, I'd argue that Masonry's codebase is of better quality than Xilem's current native backend. This isn't meant to be a put-down of the work of Xilem maintainers; rather, it's the outcome of a difference in priorities. Nobody was very interested in Xilem's native backend (though Raph was aware of its importance, hence me getting paid to write this), and lots of people were very interested in the frontend and the web backends, therefore the frontend and web backends saw the most work.</p> +<p>From our <a href="https://github.com/linebender/rfcs/pull/1">RFC#0001</a>:</p> +<blockquote> +<p>As a result, Xilem's native backend is in a poor state:</p> +<ul> +<li>There is <a href="https://github.com/linebender/xilem/blob/ea45b9f8c14e3708f0fcbe0a0e1c760f59146323/src/widget/widget.rs#L113-L120">code commented out</a>.</li> +<li>There are <a href="https://github.com/linebender/xilem/blob/ea45b9f8c14e3708f0fcbe0a0e1c760f59146323/src/widget/mod.rs#L19-L20"><em>entire modules</em> commented out</a>.</li> +<li>There is <a href="https://github.com/linebender/xilem/blob/ea45b9f8c14e3708f0fcbe0a0e1c760f59146323/src/widget/widget.rs#L51-L71">documentation referring to items from Druid that no longer exist</a>.</li> +<li>There are <a href="https://github.com/linebender/xilem/blob/ea45b9f8c14e3708f0fcbe0a0e1c760f59146323/src/widget/core.rs#L569C5-L569C66">TODOs without an associated issue</a>.</li> +</ul> +</blockquote> +<p>Masonry's backend codebase is a healthier starting point. Masonry also comes with some built-in perks, like powerful unit tests and a structured widget graph.</p> +<p>It's not clear whether we want to import the Masonry codebase, the crate, or the entire repository, and it's not clear what the ultimate branding should be. The RFC lays out the different possibilities, and discussion is still ongoing, so the community can reach a consensus before doing more work (including possibly not using Masonry at all).</p> +<p>If we do move forward with this, then Masonry will need some porting work:</p> +<ul> +<li>Using Vello and Parley instead of Piet.</li> +<li>Using Glazier instead of druid-shell.</li> +<li>Integrating AccessKit.</li> +<li>Removing the dependency on GTK.</li> +</ul> +<p>AccessKit support in particular is table stakes, by now. The Rust ecosystem is converging on the idea that accessibility (or at least, screen reader support) should be integrated early on in the design of GUI frameworks, not tacked on at the end.</p> +<p>There are other things Xilem added over Druid (notably virtual lists and async support), but I believe Masonry doesn't need to implement them right away for parity. Both will be very important for eventual performance work.</p> +<h3 id="avoiding-custom-widgets">Avoiding custom Widgets</h3> +<p>I'm told by Raph this is a "molotov cocktail" which, uh, fair.</p> +<p>We should write Xilem's backend under the assumption that end users of the library (including the Xilem frontend) will very rarely create their own widgets. Instead, they will usually compose the primitives given to them the same way they compose DOM elements in the browser. There will be escape hatches, from a fixed-size canvas surface where end-users can use arbitrary paint primitives to full-on custom widget code, but we should design the framework under the assumption people will almost never <em>need</em> those hatches.</p> +<p>Clearly, this is a radical move. <strong>There will be a prototyping phase before we choose whether we commit to it</strong>, and RFCs to lay out the details. I'm confident it will pay off.</p> +<p>Developers of hobby GUI frameworks tend to provide a severely anemic set of primitives, under the assumption that if anyone wants other features in their widgets, they can implement them themselves. Both Druid and Xilem suffer from this.</p> +<p>On the other end of the spectrum, the web has shown that you can implement complex custom UIs given a rigid but rich set of primitives.</p> +<p>More importantly, the web is moving towards a powerful paradigm: declarative UI. As time goes on, people are realizing you can get better performance and composition by describing what things should look like and composing them than by imperatively making them do things.</p> +<p>Part of this is that native code is more performant than JS, but part of it just that declarative code is easier to work around than imperative code: its bounds are better defined, it lets you <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/contain">commit to limitations</a> that make the engine's job easier, and it's easier to analyze.</p> +<p>A set of proposals called <a href="https://developer.mozilla.org/en-US/docs/Web/API/Houdini">CSS Houdini</a> came out that went in the exact opposite direction: pushing the layout engine towards more customization and JavaScript code. The proposal hasn't seen much movement since 2021, and I don't think it's a coincidence that the part that would have given the most power to imperative code, the Layout API, hasn't been stabilized in any browser.</p> +<p>The bottom line is that, while implementing custom widgets <em>will always be possible</em>, I want to encourage developers to go as far as they can composing declarative elements instead, and see how far it's possible to go using those building blocks.</p> +<h4 id="more-opinionated-layout">More opinionated layout</h4> +<p>One major customization point I want to restrict in Xilem is layout.</p> +<p>Today all Rust GUI frameworks ship their own layout algorithm, but none of them are <em>competing</em> on their layout algorithm. Often the layout algorithm is just a means to an end; developers that do want to work on a state-of-the-art layout engine will provide it in a modular crate like <a href="https://github.com/vizia/morphorm">Morphorm</a> and <a href="https://github.com/DioxusLabs/taffy">Taffy</a>.</p> +<p>And here's the thing: realistically, most layout engines aren't that creative. Every Rust framework and every major GUI framework I'm aware of uses layout that boils down to "FlexBox with small variations". The number of meaningfully different ways to do GUI layout can be counted on, generously, two hands.</p> +<p>I'd argue we only need CSS Flow, FlexBox, CSS Grid, and maybe Morphorm to cover most people's needs. Conveniently, this is what Taffy aims to provide. There's already an experimental Taffy integration in Xilem, and I want to make it deeper.</p> +<p>That being said, there won't be a hard-coded set of layout algorithms. Rather, layout will rely on a web-inspired protocol between widgets (in other words, trait methods), and that protocol will be strongly opinionated to make implementation of these layout algorithms easier.</p> +<p>More on this in a latter blog post.</p> +<h4 id="no-boxing">No boxing</h4> +<p>Having a semi-fixed set of widgets means you can avoid using <code>Box&lt;dyn Widget&gt;</code>, which has some interesting performance implications.</p> +<p>It means you can add a lot of methods to the Widget trait without worrying about bloating the vtable. And you can write methods under the assumption that they'll be inlined, which opens up interesting DX improvements.</p> +<h3 id="using-ecs-maybe-sort-of">Using ECS, maybe, sort of</h3> +<p>In current Xilem code, if you want your FlexWidget to have children, it must have a <code>Vec&lt;Pod&lt;ChildWidget&gt;&gt;</code> member. Each Pod directly owns a Widget.</p> +<p>I think this is an interesting quirk of Rust GUI, tying directly to Rust's ownership semantics. Non-Rust frameworks often use pointers to child widgets, true, but they're often shared with the framework, with an understanding that the framework is charged with keeping track of how many widgets there are and which is a child of which. In Qt, for instance, it's preferred (but not mandatory) for parents to call <code>delete_later()</code> on their children instead of <code>delete</code>, because it plays better with event handling.</p> +<p>Xilem's approach of "you own your children" is a little bespoke. It means the framework has a hard time iterating over the entire widget tree (say, as part of a DOM inspector) unless each Widget specifically implements the iterating method. And it means if you want to target an event at a specific widget (say, the one with keyboard focus), you need to go through the entire ownership chain, using some heuristics to avoid visiting too many widgets.</p> +<p>I believe Widgets should be owned by the library. If your container has children, then the only thing the container will actually own is keys into a structure (probably a slotmap) where the widget is stored. This makes a lot of things easier, like serialization and debugging, but it has an impact on the entire backend. It's an infrastructure investment.</p> +<p>Lately, I've seen more and more discussion of implementing GUI through an ECS. A lot of that discussion comes from Bevy, which is natural, since the bevy community <del>is made up of ruthless cultists striving to feed ever more sacrifices to the ECS god until it consumes the Earth</del> is intimately familiar with the ECS pattern and has reached a phase where UI work is getting a lot of attention<sup class="footnote-reference"><a href="#2">2</a></sup>. But I've seen discussions about it in the Linebender community too.</p> +<p>Whether we actually want to use ECS is something we still need to research.</p> +<p>The way I understand it, the big draw of ECS is the "S" part, the Systems: it's about handling lots of similar data at once in arbitrary order. Which is why eg archetypes in bevy are useful: you're grouping together entities with the same components, so that you can say "execute this code for all entities with component X and component Y" and have this code be executed on arrays of values with minimal indirection or branching. And the "arbitrary order" part makes them work really well with slotmaps: since you can just read from the beginning of the slotmap, you don't pay the double-indirection penalty.</p> +<p>In other words, the ideal use case for ECS is code of the type <code>for (entity in entities) entity.position += entity.speed</code>.</p> +<p>GUI is pretty far from that ideal use-case: updates are sparse and should only run on a small number of changed widgets. Order often matters. And I'm not sure archetypes would work in a framework with a large variety of widgets and different attributes.</p> +<p>I think there are two things you really want from a Rust ECS library for GUI: slotmaps, and efficient ways to add and remove components from an entity.</p> +<p>Implementing those is going to be a major undertaking, which we'll have to divide into small experiments, but one I expect to pay many times over.</p> +<h2 id="community-involvement-and-more-to-come">Community involvement and more to come</h2> +<p>I want to really put emphasis on something: none of the above is set in stone.</p> +<p>Part of what Raph wants to achieve this year is to make Xilem more of a community project, and that means running more decisions by the community.</p> +<p>I've created <a href="https://github.com/linebender/rfcs/">an RFC repository</a> for this, and each of the sections above will get its own RFC, where I'll expand on my rationale in more detail.</p> +<p>This isn't a rubber-stamping process either: I want to implement those ideas, but if the community<sup class="footnote-reference"><a href="#3">3</a></sup> decides that they are bad, then we'll go another direction.</p> +<p>There's other ideas I haven't discussed yet that I want to come back to:</p> +<ul> +<li><strong>Declarative styling:</strong> Giving Widgets attributes similar to CSS properties, with modifiers for animations, pseudo-classes, media queries and container queries. While inspired by CSS, it wouldn't involve any CSS parsing, selector resolution, specificity resolution, etc.</li> +<li><strong>Compositing:</strong> Xilem is heading towards a "do everything in the GPU" approach. This is good for performance, but Firefox engineers who have gone down this road before us have warned us of the many perils they faced, especially regarding battery life. In general, after layout and painting, you really want a <code>composite()</code> phase to deal with scrolling and some simple animations without touching the GPU at all if possible. <a href="https://raphlinus.github.io/ui/graphics/2020/09/13/compositor-is-evil.html">This is a complex subject</a>, and it would be nice if we could hide most of that complexity from app developers while still giving them good performance.</li> +<li><strong>Resource loading:</strong> This is another area where we might want to crib from game engines. At the very least, we want to be able to ask "Load me this texture/shader/font/etc" without having to write disk I/O in user code. Then we can start thinking about progressive loading, fallbacks, sharing, etc.</li> +</ul> +<p>These ideas are likely to be the subject of further articles and/or RFCs in the near future.</p> +<h3 id="relations-with-other-projects">Relations with other projects</h3> +<p>Presenting the current state of the Rust GUI ecosystem would probably take its own article.</p> +<p>Things are moving quickly, and anything I write now might not be up to date in two weeks. The projects we're most interested in right now are Winit and Bevy, and there's some potential for cooperation with Servo. The COSMIC ecosystem looks pretty cool, but so far it looks like we have less to share with them.</p> +<p>People from parallel projects are communicating and exchanging much, <em>much</em> more than they were in 2022. Between Vello, Parley, wgpu, Taffy, COSMIC-Text and others, projects are converging and maintainers are making more effort to reach out and integrate other people's code.</p> +<p>Stay tuned for more!</p> +<h2 id="hey-this-is-really-cool">Hey, this is really cool!</h2> +<p>Something that came up in discussions I've had with Raph is that it's easy to miss the forest for the trees. In the middle of all the paperwork, blog-writing, RFC-writing, we can end up focusing on the process so much that we forget how excited we are.</p> +<p>So, I'm taking the moment to remind myself: this is really freaking exciting!</p> +<p>For all my criticisms and caveats and realistic assessments of the problems we need to overcome, I'm still feeling absolutely great about this!</p> +<p>I'm super thankful to Raph for getting us this far, to Google Fonts for sponsoring us, and to everyone else who contributed to the Linebender ecosystem. I think we can do something amazing and I'm honestly a little startled to be in this position at all.</p> +<p>To reiterate what I said: in the next few years, I want the entire ecosystem to get to a point where people talk about Rust GUI like they talk about ripgrep or rustls.</p> +<p>I legitimately think Rust has the potential to get best-in-class GUI frameworks, and now the time has come to prove it.</p> +<div class="footnote-definition" id="1"><sup class="footnote-definition-label">1</sup> +<p>By the way, I love this style of writing where we start humanizing a software process and complaining about how much it wants to kill us. The articles I cited are very high-quality too.</p> +</div> +<div class="footnote-definition" id="2"><sup class="footnote-definition-label">2</sup> +<p>I'm told the Bevy community found that joke funny, but I was too afraid for my sanity to check on their Discord server.</p> +</div> +<div class="footnote-definition" id="3"><sup class="footnote-definition-label">3</sup> +<p>"The community" is a nebulous concept here. For obvious reason, we'll give more weight to the opinions of people who have already put work into the Linebender ecosystem, but the general hope is to get a consensus from everyone involved. And you're welcome to weigh in even if you haven't contributed before.</p> +</div> + + + + + Xilem 2024 plans + 2024-01-10T07:34:42+00:00 + 2024-01-10T07:34:42+00:00 + + + + Raph Levien + + + + + https://linebender.org/blog/xilem-2024/ + + <p>2024 promises to be an exciting year for Xilem. The big news is that Google Fonts is funding the work of four open source contributors to the project: Aaron Muir Hamilton, Daniel McNab, Matt Campbell, and Olivier Faure.</p> +<p>Aaron will be working on text layout, building on <a href="https://github.com/dfrg/parley">parley</a>, <a href="https://lord.io/text-editing-hates-you-too/">text input</a> including IME, and Android platform integration. Daniel will be working on GPU infrastructure and performance, with much of the work upstreamed to <a href="https://wgpu.rs/">wgpu</a>. Matt will be working on accessibility, and Olivier will be building the core widget tree, with a focus on developer experience.</p> +<p>Xilem is an ambitious project to explore the limits of UI performance, as described in my <a href="https://youtu.be/zVUTZlNCb8U">High Performance Rust UI</a> talk. The goals include gathering knowledge about the viability of Rust for UI, and what patterns work well. While there is a research focus, we plan to gather this information by building a real toolkit, solving many of the hard problems. The current state of the project is a fairly rough, though promising, prototype, so there is much work to be done. It’s exciting to have the bandwidth and experience of these people working toward that goal, but perhaps the most exciting prospect is bringing together more of the community, people passionate about building high quality UI. Our goal as an open source community is to facilitate that, and to coordinate the work efficiently. What we have now is not a production-ready product, but we wish to move in that direction, including quality documentation - some of the consistent feedback we’re getting about the current state.</p> +<p>Another goal is to bake in accessibility from the start. Too often, it’s an afterthought, tacked on at the end. We’re excited to have Matt, primary author of <a href="https://github.com/AccessKit/accesskit">AccessKit</a>, on board.</p> +<p>Xilem is designed in layers, with a reactivity layer on top, a widget tree adapted from <a href="https://github.com/linebender/druid">Druid</a>, and with <a href="https://github.com/linebender/vello">Vello</a> as the 2D rendering engine. These layers are designed to work well together, but the individual pieces may be useful in other contexts. The funded work will focus on Android as a target, but is intended to work well on desktop platforms as well; this is one of the core strengths of the Rust ecosystem. We don’t have iOS as an immediate priority, but attention from the open source community could change that, and the foundations should support it.</p> +<p>The status of the web backend for the Xilem widget set is more complex. Simply put, it is not a priority for us right now. We have done some explorations into generating DOM nodes from Xilem, but doing it well would increase scope and complexity beyond what we’re comfortable with. For applications deployed <em>primarily</em> on the web, xilem_web (which generates DOM nodes) should be a viable choice, with the possibility of Tauri or Electron for desktop deployment. To enable online demos of native applications, it is most likely that we will implement a version which draws to a canvas element. This has limitations in accessibility and native look and feel - for example, text input and scrolling may behave contrary to user expectations. Until more work is done refining the web backend, we would not recommend this approach for production applications using Xilem.</p> +<h2 id="2023-retrospective">2023 retrospective</h2> +<p>Looking back at 2023, there was a great deal of foundational work. Much of the effort was on Vello, the 2D rendering engine that serves as the graphical foundation of the project. A particular strength is high performance path rendering on GPU, which enables fully dynamic text effects including animation of variable font parameters. Though we had a reasonably good implementation of path rendering in place, much of the second half of the year was taken up by “stroke rework” which computes all stroke styles on the GPU, and also improves the performance and accuracy of antialiasing for all paths. To this end, we invented new computational geometry algorithms for computing parallel curves, the newest based on <a href="https://raphlinus.github.io/curves/2021/02/19/parallel-curves.html">Euler spirals</a>, with some elegant math tuned for GPU evaluation. A writeup explaining the details is in the pipeline.</p> +<p>There was slow and steady work on the higher levels of the stack as well, including factoring out the reactive layer into a generic xilem_core module, and validating that with generation of DOM nodes for browser deployment. The widget tree saw some development as well, including integration with the <a href="https://github.com/DioxusLabs/taffy">Taffy</a> layout engine.</p> +<h2 id="governance-and-community">Governance and community</h2> +<p>Though we now are funded to work on the project, the open source nature of the projects continues unchanged. We’ve been building up infrastructure for open source community, including a <a href="https://xi.zulipchat.com/">Zulip instance</a>, weekly office hours, <a href="https://linebender.org/wiki/">wiki</a>, and, as of this post, a shared <a href="https://linebender.org/blog/">blog</a>. Our <a href="https://linebender.org/contributor-guidelines/">contributor guidelines</a> explain a bit about our processes. Almost all decision making is by consensus. Only very rarely do I need to step in and tie-break. As we scale up, we’re going to be more systematic, starting to use <a href="https://github.com/linebender/rfcs">RFC documents</a> for major changes.</p> +<p>We’re intentionally designing our community to foster learning and collaboration. For example, discussions are on Zulip rather than Discord because it’s searchable, meaning that the same questions are less likely to come up over and over. Its grouping into topics lets participants quickly skim activity as opposed to getting drowned in chatter. It’s working well for us. We also invite others in the Rust UI ecosystem to use our Zulip and wiki. As the Kurzgesagt video <a href="https://www.youtube.com/watch?v=fuFlMtZmvY0">The Internet is Worse Than Ever – Now What?</a> observes, large social spaces are degrading, and the video recommends seeking out smaller, more focused communities. I hope ours is one such.</p> +<p>In any case, we are happy to share bits of infrastructure with other Rust UI efforts, and are always eager to learn from them. I see many of us working toward common goals rather than competing, even if there are different approaches and priorities.</p> +<h2 id="thoughts-on-the-rust-ui-ecosystem">Thoughts on the Rust UI ecosystem</h2> +<p>I’ve been thinking about doing UI in Rust for about 8 years now, and have explored many, many approaches. I’m not alone in this, there have been well over two dozen projects started.</p> +<p>As mentioned in a <a href="https://raphlinus.github.io/rust/gui/2022/07/15/next-dozen-guis.html">previous blog</a>, any given application will have a set of requirements. Is Web one of the main deployment targets? Will there be embedded video? Is there a need to integrate with some other subsystems, such as a game engine? Each of these has profound implications. Some problem spaces (compilers are an example) are “smooth,” in that continual refinement will lead to fairly similar outcomes no matter the starting point, but over time I’ve come to the conclusion that UI is especially lumpy. I believe this contributes to the continuing pattern of new UI toolkits coming out every couple months or so; the author surveys what’s available, finds none that match the specific set of requirements, and creates a new one.</p> +<p>In some ways, Xilem is in the same pattern, but there are <em>some</em> things we’re doing differently. For one, it’s explicitly a research project, with knowledge about how to build UI in Rust an outcome possibly as important as the codebase. We’re trying to be systematic about finding the best ways to do things, which ideally will make some solutions more general. And, increasingly, we’re designing things as modular layers that can be swapped out. With luck, even if people don’t end up adopting the entire stack, there will be some useful components for the ecosystem.</p> +<p>A good overview of the opportunities and challenges in Rust UI, particularly for making mobile apps, is <a href="https://wingolog.org/archives/2023/06/15/parallel-futures-in-mobile-application-development">parallel futures in mobile application development</a> by Andy Wingo. The linked blog posts in that series also go into considerable detail about JavaScript and TypeScript based approaches, which have important lessons as well.</p> +<h3 id="declarative-ui-patterns">Declarative UI patterns</h3> +<p>The trend in UI programming has been overwhelmingly away from a soup of mutable objects with interlinked references and toward various declarative or reactive patterns. That’s a good thing for Rust UI, because the former is very un-ergonomic in Rust.</p> +<p>In the JavaScript world, there is a Cambrian explosion of reactive techniques. React is by far the most popular, but there is a strong sentiment it’s possible to be better, particularly on performance, but also robustness, as the logic for deciding <a href="https://www.joshwcomeau.com/react/why-react-re-renders/">when to re-render</a> is fickle, and can <a href="https://arxiv.org/abs/2310.04368">miss re-renders</a>. Elm deserves special mention, as its avoidance of global shared mutability makes it particularly easy to adapt to Rust, so it serves as the reactive core of the <a href="https://github.com/iced-rs/iced">iced</a>, <a href="https://github.com/antoyo/relm">relm</a>, and <a href="https://github.com/vizia/vizia">vizia</a> UI toolkits, as well as <a href="https://yew.rs/">yew</a> on the WASM side. But there is also <a href="https://emberjs.com/editions/octane/">Ember Octane</a> (based on Adapton), a number of fine-grained reactivity approaches such as <a href="https://www.solidjs.com/">SolidJS</a>, and many, many more (not to mention the incredible diversity of solutions for state management).</p> +<p>We’re seeing much of that diversity mirrored into the Rust world. On the WASM side, we see <a href="https://dioxuslabs.com/">Dioxus</a> as a fairly faithful adaptation of React, <a href="https://github.com/leptos-rs/leptos">leptos</a> (also <a href="https://sycamore-rs.netlify.app/">sycamore</a> and <a href="https://github.com/gbj/tachys">tachys</a>) adhering fairly closely to SolidJS, yew as an adaption of elm, and <a href="https://github.com/flosse/rust-web-framework-comparison">more</a>.</p> +<p>A reactive layer such as Dioxus or leptos can be compiled to WASM and run in a browser to generate DOM nodes. More recently, we’re seeing that it can be decoupled from that environment, and a reactive core can drive a widget tree. Examples include <a href="https://github.com/marc2332/freya">Freya</a> which uses Dioxus, and <a href="https://github.com/lapce/floem">floem</a> which implements fine-grained reactivity inspired by leptos.</p> +<p>Xilem doesn’t directly correspond to any JavaScript framework; it relies on static typing and is actually closer to SwiftUI than anything web based.</p> +<p>One of the central questions in Rust UI going forward is: which approach to declarative UI is best? It’s possible a clear winner will emerge, or perhaps there will be a different answer depending on the use case, or it might just come down to a matter of personal style, with a number of viable contenders (arguably that’s where JavaScript is). We’re taking a two pronged approach. First, we’re moving forward with Xilem. There’s a specific reason - Xilem is designed to support multithreaded rendering easily, while many of the other frameworks rely on thread local storage for access to a store of observables, an approach with high impedance mismatch to multithreading. Since performance is a goal, we didn’t want to give that up by adopting another framework. I also think Xilem is pretty good, but that remains to be seen.</p> +<p>Another way to gather more evidence on the Xilem declarative layer is to use it to generate DOM nodes in a browser, in other words decouple it from the widget set. As described in the <a href="https://www.youtube.com/watch?v=XjbVnwBtVEk">Xilem Vector Graphics</a> talk, we have been experimenting with that a bit, and a major development in the last year was to factor out the core declarative logic into xilem_core, and also develop a xilem_web layer for creation of DOM nodes. Early indications suggest that this may be a viable alternative to frameworks such as Dioxus and leptos, and we're eager to learn more from those explorations.</p> +<p>Xilem is untested, though promising, and it may be that some other approach is better. If so, we’re prepared to pivot. We’ll be designing the widget set so that it doesn’t have a hard-coded dependency on the Xilem declarative layer, and could, at least in theory, be driven from other frameworks. Olivier is author of the <a href="https://github.com/PoignardAzur/masonry-rs">masonry</a> crate, where being agnostic to the declarative layer was an explicit goal. He’ll be adapting many of the ideas from that.</p> +<p>Making a widget set agnostic has other potential benefits. While writing app logic in Rust is very promising, there are still compelling reasons to use other languages. A widget tree implemented in Rust with fast graphics and smooth interactivity, scripted in some other language, is compelling. I made a <a href="https://github.com/linebender/druid/pull/2185">prototype</a> in Python, which, though rough, shows promise.</p> +<h2 id="infrastructure">Infrastructure</h2> +<p>A UI toolkit depends on a great deal of infrastructure. We’re making careful choices around that, and also looking for opportunities to collaborate with the rest of the ecosystem. One choice I’m particularly excited about is investing in <a href="https://wgpu.rs/">wgpu</a>. I think WebGPU will move modern GPU usage forward considerably, especially compute shaders, which are heavily used in Vello. This technology will make truly portable applications requiring high compute throughput possible for the first time, and we’re shooting for smooth UI integration with the GPU usage in these applications.</p> +<p>Whether to use <a href="https://github.com/rust-windowing/winit">winit</a> or build our own platform integration has long been a subject of discussion. We’re reopening that discussion with the winit maintainers as of this writing, but it’s still too early to say whether we’ll join forces, or decide that the goals of the project support having a separate codebase.</p> +<p>A huge part of any UI effort is text, and that’s also a long-standing interest of mine. I’m impressed with <a href="https://github.com/pop-os/cosmic-text">cosmic-text</a> but ultimately we decided to move forward with <a href="https://github.com/dfrg/parley">parley</a>, in part so we can test out ideas with variable fonts. The lower levels of the text stack will be rebased on the <a href="https://github.com/googlefonts/fontations">fontations</a> work of the Google Fonts team, which is rapidly becoming a production-quality implementation.</p> +<p>Building common infrastructure for accessibility also benefits the entire ecosystem, and we're thrilled to see the increasing adoption of AccessKit. Indeed, on all these topics, we’re happy to share what we’re doing with other projects, as most of the infrastructure described above is general in application, rather than specific to our projects.</p> +<h2 id="conclusion">Conclusion</h2> +<p>The potential for Rust UI is huge. The Rust language enables top-notch performance and reliability and is also expressive for high-level application logic. We plan to prove that out, based on encouraging existing research and explorations, as well as new research to discover the patterns for Rust UI that work best at scale. This involves work at all levels of the stack, including infrastructure we are happy to share with other Rust UI efforts.</p> +<p>Xilem is still an early prototype. For those who desire a “batteries included” toolkit for building UI, we ask your patience. For those who are interested, you are invited to come build this future with us.</p> + + + + diff --git a/blog/doc-include/index.html b/blog/doc-include/index.html new file mode 100644 index 0000000..52f00a9 --- /dev/null +++ b/blog/doc-include/index.html @@ -0,0 +1,181 @@ + + + + + + + + #![doc = include_str!()] with intra-doc links - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

#![doc = include_str!()] with intra-doc links

+

Daniel McNab, June 28, 2024

+

Creating crate level documentation by including your README can lower maintenance burden, as you do not need to manually keep the crate level docs synchronised. +However, when writing this documentation, you will also want to link directly to some mentioned items. +These links need to work in all the places that the README is rendered, such as on your package's https://crates.io homepage, in addition to in rustdoc output. +To achieve this, you can link to the online documentation for the items:

+
To get started with foobar, use the [`frobnicate`][] function.
+
+[`frobnicate`]: https://docs.rs/foobar/latest/foobar/fn.frobnicate.html
+
+

This would however mean that users of cargo doc will be redirected to your crate's online docs (as opposed to their local docs) when clicking on that link. +It is however possible to make links in included markdown files behave as intra-doc links, by adding a second link reference definition in the documentation comment. +This must be placed before the doc = include_str!() line, for example:

+
//! [`frobnicate`]: frobnicate
+#![doc = include_str("../README.md")]
+
+

This means that the link has the expected link target on https://crates.io and in rustdoc (including on https://docs.rs). +This trick works because when there are duplicate markdown link reference definitions, "the first one takes precedence". +rustdoc sees the intra-doc link before the link to the online docs, and so uses the intra-doc link. +However, when the README is rendered standalone, only the link reference definition for the online docs is present, and so that target is used.

+

Example

+

For an example of both of these techniques in action, see the Android Trace crate (android_trace). +In particular, the text of interest is: "the main entry point to the library is AndroidTrace". +You can observe that this link goes to version 0.1.1 on the docs page, but version 0.1.0 elsewhere.

+ +

And the corresponding source code:

+ +

The links have since been updated to use latest, but the direct link being to version 0.1.0 shows how this pattern works.

+ +

rust-analyzer has an "Open External Docs" command when you have an item selected. +This will open the online documentation for the selected item, generally on https://docs.rs. +This works even if the item is yet to be published, in which case it will open the URL where the item would be. +You may wish to replace the resolved version number in the URL with latest, e.g. https://docs.rs/foobar/latest/foobar/

+

Limitations

+

#![doc = include_str!("../README.md")] has two main relevant limitations which you may need to work around.

+

The first of these is in code blocks. +Normal rustdoc examples can include hidden setup lines, starting with a # character. +These will not be rendered by rustdoc.

+
```rust
+# use foobar::frobnicate;
+frobnicate();
+```
+
+

However, other markdown renderers do not support this extension, so the example above will be rendered as something like:

+
# use foobar::frobnicate;
+frobnicate();
+
+

Unfortunately, I am not aware of a workaround for this; my current best suggestion is to avoid using these hidden lines in your README. +Doctests in included markdown files do also have some diagnostics issues, as reported in rust-lang/rust#81070.

+

The second limitation is with file links, such as a link to your license file of the form [LICENSE-MIT](LICENSE-MIT) (as recommended in C-PERMISSIVE). +This is because rustdoc does not support relative file links in Markdown. +This can be solved by using the "opposite" of this trick - you can use a web link in your lib.rs, and a file link in the README.

+

A second trick

+

READMEs contain some content which are not expected to be present in a crate's documentation. +For example, a top-level title, which would duplicate the crate foobar header added by rustdoc. +This can be resolved by using css in your documentation to hide these items; rustdoc allows embedding CSS in your documentation. +However, this should only be included in your lib.rs, so that the header is shown in other contexts.

+
//! <style>
+//! .rustdoc-hidden { display: none; }
+//! </style>
+
+

Any text in the README which should be excluded from your docs page can then be surrounded by a div with the rustdoc-hidden class, for example:

+
<div class = "rustdoc-hidden">
+
+# Foobar
+
+</div>
+
+

As far as I'm aware, this does not have any accessibility considerations, as browsers will not make display: none items available in their accessibility tree.

+

Tracing Android Trace (see above) also uses this trick to hide the license section from the crate docs. +The license information is already present in the crate's info box.

+

Conclusion

+

Using #![doc = include_str!("../README.md")] can integrate nicely with intra-doc links, if you use some tricks. +I believe that this pattern reduces the quality gap between bespoke documentation in lib.rs enough that using README includes becomes the right pattern for most crates. +This avoids the maintenance burden of needing to ensure that text in the crate level docs and the README do not become out-of-sync. +I intend to evaluate this technique by applying it across Linebender crates. +It may still be better to have bespoke documentation for each location, for projects which can afford the maintenance costs of that solution. +But for other projects, this can provide an easy way to improve their crate level documentation.

+

These patterns can also be applied when including non-README markdown documents. +I suggest linking to this post when using these patterns, to allow future readers of your code to understand the technique being used.

+

Discuss on the Linebender Zulip.

+ + +
+
+ + + diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..40ac49a --- /dev/null +++ b/blog/index.html @@ -0,0 +1,225 @@ + + + + + + + + | Homepage for the Linebender organization + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

Blog posts

+ + + +
+
+ + + diff --git a/blog/roadmap-may-2024-retro/index.html b/blog/roadmap-may-2024-retro/index.html new file mode 100644 index 0000000..6b3f645 --- /dev/null +++ b/blog/roadmap-may-2024-retro/index.html @@ -0,0 +1,323 @@ + + + + + + + + Retrospective on the May-July roadmap - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

Retrospective on the May-July roadmap

+

Daniel McNab, August 24, 2024

+

Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.

+

At the start of May, we created a roadmap for the following three months. +We recently went through a process of analysing how well our progress was guided by the roadmap; this report summarises those results.

+

Vello (original)

+

Robust dynamic memory (original)

+
    +
  • Priority: Highest.
  • +
  • Status: Experimental PR (vello#606), but hasn’t landed. +Work required on the CPU side API, but the GPU operations are well-understood. +This PR could not be released in its current form.
  • +
+

Reliable snapshot tests (original)

+
    +
  • Priority: High.
  • +
  • Status: This was implemented in vello#610. +This has already been extremely useful in our review process, as it allows changes to be validated in the files changed view. +We also implemented an experiment to use Git LFS, which has been working really well to avoid increasing repository size.
  • +
+

Sparse strips (original)

+ +

Add tests (original)

+
    +
  • Priority: Medium
  • +
  • Status: This item had already been completed at the time the roadmap was written. +This was also expanded upon in. +During our retrospective meeting, we did determine some potential future expansions to testing, namely: +
      +
    • Running individual stages in isolation, to enable property testing (TODO: Make Vello issue).
    • +
    • Testing for additional platforms, such as DirectX on Windows and Android (TODO: Make Vello issue).
    • +
    +
  • +
+

Progress beyond roadmap

+

We have also landed several important features which were not part of our planned roadmap. +These include:

+
    +
  • Blending which uses more than four deep layers (vello#657).
  • +
  • Preliminary support for embedding pre-existing wgpu textures (vello#636). +This was driven by user needs. +Further work in this direction is tracked in vello#664.
  • +
  • Support for Emoji (COLRv1 in vello#615, bitmap in vello#641).
  • +
+

The stroke expansion paper documents a key part of Vello's pipeline. +This was presented at ACM High Performance Graphics (HPG) 2024, placing 3rd Place in the Best Paper Award.

+

Masonry (original)

+

Complete text input (original)

+
    +
  • Priority: Highest
  • +
  • Status: Not that much progress. +This work is being continued, and indeed there has been significant progress as of the time of writing. +This is tracked in parley#52.
  • +
+

Better tracing for debugging (original)

+
    +
  • Priority: High
  • +
  • Status: xilem#384 implements most of this, the rest is deferred. +There are known issues with the size of the log files created by default in very large apps.
  • +
+

Fix glaring documentation problems (original)

+
    +
  • Priority: High
  • +
  • Status: The issues mentioned in this item were addressed in xilem#329 and xilem#503.
  • +
+

Finish repository port (original)

+
    +
  • Priority: High
  • +
  • Status: This was completed. +We moved all Masonry issues into the Xilem repository, and updated all references in code to use full links. +This move was coordinated in #linebender > Moving Masonry into Xilem.
  • +
+

Write “widgets in arena” RFC (original)

+
    +
  • Priority: High
  • +
  • Status: The RFC was rfcs#6, which was mostly implemented in xilem#396.
  • +
+

Write “pass order” RFC (original)

+
    +
  • Prioriy: High
  • +
  • Status: rfcs#7 is in draft, and several important parts of the RFC have been completed.
  • +
+

Rewrite documentation (original)

+
    +
  • Priority: Medium
  • +
  • Status: This work has been deferred until the "pass order" refactor is complete, as we expect Masonry's core to be quite stable at that point.
  • +
+

Improve focus handling (original)

+
    +
  • Priority: Medium
  • +
  • Status: Not done.
  • +
+

Improve pointer status handling (original)

+
    +
  • Priority: Medium
  • +
  • Status: Basic translation of touch events was added in (xilem#313). +This unblocked using Masonry on devices where pointer input is not expected (primarily on Android). +We have split the remainder of this task into two tasks, with a priority placed on completing the parts which unblock other work (such as scrolling on Android).
  • +
+

Progress beyond roadmap

+

Masonry is in a state of flux, however is starting to see a few exploratory users. +To unblock these users, some additional important features were added outside of the roadmap, such as:

+
    +
  • Support for embedding Masonry inside a pre-existing event loop (xilem#417).
  • +
  • Support for a gap property in the flexbox (xilem#437).
  • +
  • Fixes on iOS, including xilem#418 and xilem#421.
  • +
  • xilem#233 allowed our tests to be run on CI in a consistent manner.
  • +
+

Parley (original)

+

Create abstractions for text selection and editing (original) ?

+
    +
  • Priority: Highest
  • +
  • Status: There have been useful discussions in parley#52. +Work has started on this in parley#106 in response to this retrospective.
  • +
+

Inline block layout (original)

+
    +
  • Priority: High
  • +
  • Status: A first cut of this feature was added by Nico Burns in (parley#67). +parley#76 expands upon this, and has been approved in principle, but is awaiting thorough review.
  • +
+

Write adequate documentation (original)

+
    +
  • Priority: High
  • +
  • Status: Some work was done towards this in parley#26, which unfortunately could not be merged. +parley#97 added some documentation to Fontique. +Further documentation work from Nico is currently blocked on the tree-like styles PR parley#76 being merged (to avoid conflicts).
  • +
+

Software renderer (original)

+
    +
  • Priority: Low
  • +
  • Status: This was not completed in the form envisioned. +However, Nico contributed two examples, showing how to use Parley with Swash (parley#54) and tiny-skia (parley#55). +We have decided not to carry this forward into the next roadmap.
  • +
+

Progress beyond roadmap

+

parley#56 added support for Emoji, which is used with the Vello PRs.

+

Recently the harfruzz project, a fork of rustybuzz to be integrated fully with fontations, has emerged as an extremely promising direction for text shaping for the Rust ecosystem. We plan to use it as the basis for text layout.

+

Xilem (original)

+

Android bringup (original)

+
    +
  • Priority: Highest
  • +
  • Status: Android is supported in several of our examples, with the primary work required for support completed in xilem#309. +No non-boilerplate code changes are required to get a Xilem application running on Android. +Some compromises were made, in particular cargo gives an un-silencable warning for each example which supports Android and cross-platform backends. +We did reach out to the Cargo team about this use case, but did not get a positive response.
  • +
+

Update repository layout (original)

+
    +
  • Priority: High
  • +
  • Status: This was completed in xilem#302. +Kaur applied the same change to Vello in vello#590.
  • +
+

Rework xilem_core to be compatible with Masonry backend (original)

+
    +
  • Priority: High
  • +
  • Status: This was completed in xilem#310. +Philipp then applied this to Xilem Web in xilem#403.
  • +
+

Write documentation (original)

+
    +
  • Priority: High
  • +
  • Status: This was not completed. +The work in xilem#310 did document some of the core, but there is very little user-facing documentation of the Xilem level.
  • +
+

Re-implement async integration (original)

+
    +
  • Priority: Medium
  • +
  • Status: The core of this task was completed in xilem#423 was the main implementation. +Two-way communication with the async tasks is not yet implemented
  • +
+

Add unit tests (original)

+
    +
  • Priority: Low
  • +
  • Status: This was not prioritised. +We have raised the priority of this item in our next roadmap.
  • +
+

Add basic benchmarks (original)

+
    +
  • Priority: Low
  • +
  • Status: There has been no progress on this item. +This will be a "highest" priority item in the next roadmap.
  • +
+

Progress beyond roadmap

+

Xilem has also seen some very useful changes not tracked above, including many community contributions. +Some highlights of these contributions are:

+
    +
  • Philipp Mildenberger contributed heavily to Xilem's core design, such as by restoring the ability to return ViewSequences by returning to a previous workaround for Rust's overly-cautious trait solver (xilem#472). +He also extended the Xilem API by restoring OneOf (xilem#394), and implementing various Adapt nodes (xilem#401). +Additionally, he picked up the work to expand Flex to use the new Xilem Core in xilem#428.
  • +
  • Jared O'Connell contributed two new examples, a calculator (xilem#467), and a stopwatch (xilem#492).
  • +
+

There has also been lots of really good progress on Xilem Web, but we do not roadmap Xilem Web and so we do not cover that progress here.

+

AccessKit (original)

+

Matt Campbell's work on AccessKit has begun, and a proof-of-concept Android adapter is in progress.

+ +

At the time of writing there is not a permanent link to this work, but it can be seen in the android-basics branch.

+

Android specific work (original)

+

Subclassing View/Application/Activity (original)

+
    +
  • Priority: Highest
  • +
  • Status: This work is in progress, and unfortunately has required more research than expected. +We spent some time investigating DEX injection, which Matt has got implemented. +However, it’s now looking like a custom Activity and View is the way forward, which requires close collaboration with upstream tools. +We are continuing to prioritise this highly.
  • +
+

Handling IME (original)

+
    +
  • Priority: Highest
  • +
  • Status: This work is ongoing. +winit#3787 allows opening a virtual keyboard, however this does not integrate with full IME (so for example, it is incompatible with autocorrect). +Real IME requires the Activity to support it directly and therefore involves content view subclassing.
  • +
+

Gesture recognition (original)

+
    +
  • Priority: Low
  • +
  • Status: xilem#313 added emulated mouse press and move from touches. +This unblocked use of Xilem on Android, but is not the intended final state. +The priority of detecting a scrolling gesture has been increased slightly.
  • +
+

Conclusions

+

Overall, the roadmap provided a useful guide of what to work on, and we have implemented many of the most important features from it. +One clear recurring issue is documentation - even where we have chosen to roadmap this, we have made little progress. +Similar concerns are clear for testing in Xilem, although we have laid some important groundwork there. +We firmly recognise the role of documentation as an aid to onboarding, which is becoming more important as we work towards alpha releases. +I believe that we can make good progress in this area before the end of 2024.

+ + +
+
+ + + diff --git a/blog/roadmap-may-2024/index.html b/blog/roadmap-may-2024/index.html new file mode 100644 index 0000000..2e40288 --- /dev/null +++ b/blog/roadmap-may-2024/index.html @@ -0,0 +1,312 @@ + + + + + + + + May-July roadmap for Linebender - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

May-July roadmap for Linebender

+

Olivier Faure, June 17, 2024

+

On May 7 and 8, 2024, folks from the Linebender team went to the RustNL conference for two days, followed by two days of Unconference.

+

By that point, we all felt fairly exhausted, but because Raph is a cruel taskmaster since we wanted to use the opportunity we had, we came together in our hotel's conference room to discuss the Linebender project, and what we wanted from it.

+

We'd initially thought that this day would be an informal day of unstructured chatting about the ecosystem, but it fairly quickly turned into a semi-formal planning exercise, where we tried to figure out a roadmap for the next few months.

+

What follows is a comprehensive summary of what exactly we're planning to do. +We've tried to focus on blockers, where a missing feature in one project is stalling progress on other projects, because those are the hardest barriers to coordination, and we wanted to take advantage of being in the same room together to knock them down.

+

This is a snapshot of the project status at the time we're writing this. +It includes some work we already finished since RustNL, but will not be updated when further work finishes.

+

Vello

+

Robust dynamic memory

+
    +
  • Priority: Highest.
  • +
  • Assigned: Daniel McNab.
  • +
  • Description: Allocating dynamic memory in a robust way is essential to display large scenes without graphical artifacts. We have several possible solutions, we need to implement one.
  • +
  • Issue: vello#366
  • +
+

Reliable snapshot tests

+
    +
  • Priority: High.
  • +
  • Assigned: Daniel McNab.
  • +
  • Description: Snapshot tests are essential to test regressions in graphic software. Masonry's test suite heavily depends on them. But it's flaky right now because even when the fonts and inputs are exactly the same, renderers can have subtle differences that make the snapshots slightly different. We either need to create a fully deterministic renderer or add testing infrastructure that can tolerate small differences. nv-flip might have what we want.
  • +
  • Issue: vello#608
  • +
+

Sparse strips

+
    +
  • Priority: High.
  • +
  • Assigned: Raph Levien.
  • +
  • Description: Sparse strips are a new research direction that might significantly improve our rendering pipeline and our memory footprint. We want to write a prototype implementation so we can confirm the performance benefits.
  • +
  • Zulip thread: Sparse strip path rendering
  • +
+

Add tests

+
    +
  • Priority: Medium.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: Adding tests is often a "we'll do it later" item, but it has short-term benefits as well. Adding tests would help Vello contributors check that their modifications don't add regressions to the crate, and help us catch hidden bugs. As a first step, we'd want to at least add some extremely basic tests, such as checking that Vello doesn't crash when we run a sample image through the CPU shaders.
  • +
  • PR: vello#439
  • +
+

Masonry

+

Complete text input

+
    +
  • Priority: Highest.
  • +
  • Assigned: Olivier Faure, Aaron Muir Hamilton.
  • +
  • Description: We'd like to bring up Masonry's textbox widget to be best-in-class among Rust frameworks. We want to support native-feeling interactions out of the box, such as cursor movement (go to next word, go to beginning of line), selection (select to end of text) and editing (IME, deleting an entire word, etc). This is something other framework developers have expressed interest in, so we want to implement it in a composable way.
  • +
  • Issue: xilem#388
  • +
+

Better tracing for debugging

+
    +
  • Priority: High.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: Masonry currently uses the tracing crate to produce logs usable for debugging. These logs could be improved, so that a user finding a bug can quickly narrow in on information relevant to the bug, without having to restart the app with changed log levels. The bulk of the improvement would be to implement a new subscriber with multiple layers.
  • +
  • Issue: xilem#250
  • +
+

Fix glaring documentation problems

+
    +
  • Priority: High.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: Masonry's documentation hasn't been updated since the port to Winit. While a lot of the code is still in flux, and thus hard to document, we should at least do a quick rewrite pass to remove references to Piet, Glazier, etc.
  • +
  • PR: xilem#329
  • +
+

Finish repository port

+
    +
  • Priority: High.
  • +
  • Assigned: Daniel McNab.
  • +
  • Description: We've ported the masonry-rs repository to the linebender organization, but that repository isn't where the crate's code lives anymore. We should update the README to reflect that information, port the issues to linebender/xilem, and archive linebender/masonry.
  • +
  • Zulip thread: Finishing the Masonry repository transition
  • +
+

Write "Widgets in Arena" RFC

+
    +
  • Priority: High.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: This was something alluded to in the January blog posts. We want to move Masonry from storing widgets in WidgetPod to storing them in a slotmap-like arena. This is a large enough change to write an RFC about it.
  • +
  • PR: rfcs#6
  • +
+

Write "Pass order" RFC

+
    +
  • Priority: High.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: Right now widgets can use context methods in their different passes to request that other passes be run. What passes can run what other passes isn't clearly documented, especially around edge cases. We should write an RFC to nail down the passes, how they can communicate, and the rationale around them.
  • +
  • PR: TBD.
  • +
+

Rewrite documentation

+
    +
  • Priority: Medium.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: Masonry's documentation hasn't been updated since the port to Winit. Once other major changes are implemented, the documentation should be brought up to date. We should avoid procrastinating on documentation too much just because the architecture is still in progress.
  • +
  • Issue: xilem#389
  • +
+

Improve focus handling

+
    +
  • Priority: Medium.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: We should improve tab focus in Masonry. Right now tab focus has some bugs, doesn't cover buttons, isn't updated by clicks, and uses architecture inherited from Druid that could be strongly simplified once other architectural changes are completed.
  • +
  • Issue: xilem#390
  • +
+

Improve pointer status handling

+
    +
  • Priority: Medium.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: We should centralize and improve how Masonry handles pointers. In particular, we should add an explicit "pointer capture" API that makes other widgets not get events from that pointer until the pointer is released or lost.
  • +
  • Issue: xilem#312
  • +
+

Parley

+

Create abstractions for text selection and editing

+
    +
  • Priority: Highest.
  • +
  • Assigned: Chad Brokaw, Aaron Muir Hamilton.
  • +
  • Description: We want Parley to implement types and methods that Masonry and other editors will be able to use to create a text-editing widget, or to handle selection in non-editable text. The initial implementation may be located in Masonry.
  • +
  • Issue: parley#52
  • +
+

Inline block layout

+
    +
  • Priority: High.
  • +
  • Assigned: Chad Brokaw.
  • +
  • Description: Parley should support laying out inline content the way web browsers do, where blocks are spliced into your text and will be laid out according to available inline space the same way words are.
  • +
  • Issue: parley#25
  • +
  • PRs: parley#67, parley#76
  • +
+

Write adequate documentation

+
    +
  • Priority: High.
  • +
  • Assigned: Nico Burns.
  • +
  • Description: Parley currently has virtually no documentation. If we want it to become a foundational crate, we need to tell people how to use it.
  • +
  • PR: parley#26
  • +
+

Software renderer

+
    +
  • Priority: Low.
  • +
  • Assigned: Chad Brokaw.
  • +
  • Description: Create a software renderer for the glyphs created by Parley, so that users can easily import Parley in their library without depending on a graphics API like Vello. The software renderer should be black-and-white for simplicity. We'll call for volunteers to implement COLRv1 and other advanced features.
  • +
  • PRs: parley#54, parley#55
  • +
+

Xilem

+

Android bringup

+
    +
  • Priority: Highest.
  • +
  • Assigned: Daniel McNab.
  • +
  • Description: We want Xilem to reliably work on Android. Running your Xilem app should require a small number of steps. Ideally, it should be as simple as running cargo some-command in your project.
  • +
  • PR: xilem#309
  • +
+

Update repository layout.

+
    +
  • Priority: High.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: We've agreed on a layout for Linebender repositories. We should move projects in the Xilem repo to match that layout.
  • +
  • PRs: xilem#302, vello#590
  • +
+

Rework xilem_core to be compatible with Masonry backend

+
    +
  • Priority: High.
  • +
  • Assigned: Daniel McNab.
  • +
  • Description: The version of Xilem that was ported to Masonry used a different View trait that is incompatible with the current xilem_core crate. We need to rework xilem_core to get traits that can be used by both Masonry and xilem_web. Doing so while keeping readable code is non-trivial.
  • +
  • PR: xilem#235, xilem#310
  • +
+

Write Documentation

+
    +
  • Priority: High.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: Xilem's lack of documentation is one of the problems new users complain about the most often. We need to avoid staying in that state for too long.
  • +
  • Issue: xilem#392
  • +
+

Re-implement async integration

+
    +
  • Priority: Medium.
  • +
  • Assigned: Daniel McNab.
  • +
  • Description: One of Xilem's selling points is the ability to handle virtual lists and async sources of data. That ability was temporarily removed for the Masonry port, but we'd like to add it back. We don't want Masonry to be aware of async stuff, but the AppDriver trait should at least provide a method which lets Xilem access Masonry internals on its own.
  • +
  • Issue: xilem#340
  • +
+

Add unit tests

+
    +
  • Priority: Low.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: We need to figure out an architecture for doing unit tests in Xilem. Tests can then be added by volunteer contributors. At some point we should hopefully switch to a "new test for every new feature" workflow.
  • +
  • Issue: xilem#393
  • +
+

Add basic benchmarks

+
    +
  • Priority: Low.
  • +
  • Assigned: Olivier Faure.
  • +
  • Description: Right now we're mostly working off vibes to know whether or not any of our work improved performance or introduced regressions. +We should write at least one benchmark that would test a basic Xilem use-case, so we get a general idea of how our performance is progressing.
  • +
  • Issue: xilem#362
  • +
+

AccessKit

+

Matt Campbell's contract with Google hasn't started yet. +When it does, the top priority will likely be the Android backend.

+

The plan is to study existing Android accessibility implementations for non-Java toolkits, including Flutter, Chromium, and Gio, to get a better understanding of what's required to implement Android accessibility from scratch.

+

Beyond Android support, we've only had cursory discussions of what work Matt will do for the rest of the year. +Possible themes include scrollable containers, virtualized lists, richer text support (e.g. exposing font and style attributes) across platforms, and better integration into Xilem/Masonry.

+

Android-specific work

+

Getting the Android port right involves a lot of small changes and making things feel non-broken.

+

Some notable sub-goals:

+

Subclassing View/Application/Activity

+
    +
  • Priority: Highest.
  • +
  • Assigned: Aaron Muir Hamilton, Raph Levien.
  • +
  • Description: The Java classes of an Android application are where the rubber meets the road. We're investigating what we want our boilerplate to look like.
  • +
+

Handling IME

+
    +
  • Priority: Highest.
  • +
  • Assigned: Aaron Muir Hamilton, Raph Levien.
  • +
  • Description: We need to extend Winit to be compatible with Android IME interfaces. An Android application without support for the virtual keyboard and other input methods is a non-starter. Our design choices here will have some influence on accessibility as well.
  • +
+

Gesture recognition

+
    +
  • Priority: Low.
  • +
  • Assigned: Aaron Muir Hamilton.
  • +
  • Description: When the user swipes on the screen, we want to send some kind of scrolling event instead of a normal pointer event. Ideally there should be first-class support for that event to handle momentum scrolling, but a dumber solution would just emulate mouse wheel ticks.
  • +
+

Conclusion

+

Whew! We have our work cut out for us there.

+

Overall, I'm feeling very optimistic about the coming months. +In the weeks since we first drafted this roadmap, we've already made a lot of progress on our respective tasks (for instance Daniel is now running on what async experts call a "work-stealing" algorithm), so it does look like we'll meet our deadlines.

+

What comes after that is a bit hazier. +Our three areas of focus are likely to be Android support, accessibility, and developer experience.

+

As we fill out gaps in our feature set, Xilem is moving towards its faraway goal: becoming a stable, mature framework for GUI applications. +We're not GUI yet, but we certainly hope to be one day.

+

In the meantime, stay tuned!

+ + +
+
+ + + diff --git a/blog/rustnl-2024-unconference/index.html b/blog/rustnl-2024-unconference/index.html new file mode 100644 index 0000000..a80ff48 --- /dev/null +++ b/blog/rustnl-2024-unconference/index.html @@ -0,0 +1,225 @@ + + + + + + + + Report on the RustNL 2024 Unconference - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

Report on the RustNL 2024 Unconference

+

Olivier Faure, June 15, 2024

+

On May 7 and 8, 2024, folks from the Linebender team went to the RustNL conference in Delft. +We listened to some Rust-related talks, Raph gave one on Xilem, Rik Arends did the "hot-reload my entire editor live" thing that makes every other Rust GUI developer jealous, it was an all-around great time.

+

After RustNL, though, another less-documented event called The Unconference. +It was from roughly the same organizers and took place in the same city, but the format was fairly different.

+

The Unconference wasn't livestreamed, and I haven't found any public discussion of it, so I thought I'd take the time to describe a bit of what was going on.

+

The format

+

The "Unconference" was two days of loosely structured chats between members of various Rust project teams where people talked about ecosystem collaboration, complained to lang team members that their favorite feature wasn't implemented yet, went to pester everyone else about variadic generics, and other good fun.

+

Attendees were split into three teams:

+
    +
  • The Rust project.
  • +
  • GUI and Applications.
  • +
  • Embedded development.
  • +
+

Discussions inside these teams were mostly self-organized, with cross-team discussions mostly taking place during lunch and recess.

+

On the tyranny of structurelessness

+

Note: This section is very much my personal opinion and doesn't represent the Linebender project as a whole.

+

I'm not sure the self-organized format worked well.

+

From what I saw, the Embedded team took well to it, and the Rust team was kept productive thanks to Alice Cecile's efforts in marshaling everyone.

+

In the case of the GUI team, people were spread in a very large room, which should have been conducive to small side discussions and people splitting up to talk about the problems that interested them. +Instead, there was an unspoken accord to progress through agenda items one by one, with a few people dominating the discussions on these items.

+

Because those people we spread around a large room, they had to talk loudly to address each other, which left little room for side-discussions. +Because the people talking were naturally the most confident and extroverted, more introverted people ended up taking a passive role in the discussion.

+

To me, this feels like a strategic mistake. +It was a setup that encouraged bikeshedding and long back-and-forths and discouraged plurality of opinions. +It's no coincidence that the most interesting conversations of the Unconference happened at lunch: lunch was the point of the Unconference where people were most mixed, had the most spontaneous conversations, and were least constrained by having to follow what someone else was saying.

+

Our discussions were still productive, I just feel like the format could have been improved.

+

The GUI team

+

As a member of the Linebender project, I was mostly exposed to the GUI team's proceedings.

+

The main topics of interest were:

+
    +
  • Build tooling (especially for Android and other non-desktop platforms).
  • +
  • Text layout and editing.
  • +
  • Winit adoption.
  • +
  • Accessibility.
  • +
  • Potential for further collaboration.
  • +
  • Requests for new Rust features.
  • +
+

Note that I'm skipping a lot of topics from the agenda and other side discussions. +The topics above were the most prominent during those two days.

+

There was also a fair amount of informal chatter around LogLog Games' strongly critical Leaving Rust gamedev after 3 years article. +I think those discussions mostly reflected the Bevy community's consensus, that the article had some flaws but overall pointed at very clear weaknesses in the Rust GUI / game engine ecosystem.

+

Build tooling

+

Everyone agreed that a better solution was needed to ship non-TUI Rust apps.

+

There was discussion about various platforms and build systems, and the difficulty of having to e.g. write Java code for an Android port, and whether anyone wanted to take responsibility for maintaining that glue layer for the rest of the ecosystem.

+

No actionable decisions were made, but the consensus seems to be that although integrated build tools are desirable, external build tooling for complex platforms (primarily Apple and Android) is likely to remain necessary. +Nobody seems to have stepped up to work on multi-target builds in Cargo, and since external build tools are required as it is, most people are okay with building everything several times when they release a multi-target package. +Most users are comfortable invoking platform-specific tools for bundling, signing, and manifest generation, so there is not much urgency for integrated tooling for these.

+

Text layout and editing

+

There was some widespread interest in the Linebender ecosystem's text-handling crates. +From what I remember, Rik Arends and others had concerns about whether e.g. Parley and Swash depend on our Vello renderer (they don't).

+

Some people also wanted Parley to be decoupled from Swash.

+

People were especially interested in the idea of having access to a common text-editing widget, or at least infrastructure for creating one. +That widget would handle IME, text selection, accessibility actions, etc, in a way that would feel native to different platforms with their own text-editing quirks (mobile, macOS, Linux with vim mode, etc).

+

Winit

+

By now all of the Rust ecosystem has firmly converged on winit as the windowing platform-abstraction solution of choice.

+

(Well, not all! One small project with indomitable maintainers still holds out against the invaders.)

+

The consensus during this discussion seemed to be that Winit was there to stay. +TAO users present were generally interested in being able to use upstream Winit in the future, if its API adopts or supersedes the improvements made in TAO. +Most were happy to see Winit becoming more trait-oriented, and to see the dpi crate spun off from Winit.

+

Glazier is still shelved and we're planning to port its features to Winit until it reaches feature parity.

+

A discussion that came up was the idea of splitting more "vocabulary types" from Winit into standalone crates. +Vocabulary crates, e.g. crates that only define types and very little code, have a very low cost in memory and build times, while allowing projects to interop with e.g. Winit without actually adding a dependency on Winit.

+

This was connected with the discussions about text editing: having a vocabulary crate that would list Winit's events and also Parley's cursor movements would allow for a very low-dependency text editing widget.

+

Accessibility

+

Note: This section is also my personal opinion and doesn't represent the Linebender project either.

+

The subject of Accessibility came up informally, but I'll claim it was underexplored.

+

While the subject was on the agenda, by the time we reached it the Unconference had been running long enough that everyone was tired and ready to leave or get to the catering. +This is an unfortunate pattern that I think is worth pointing out: if projects don't make a deliberate effort to prioritize discussions of accessibility, the subject will be left out.

+

Matt Campbell, the maintainer of AccessKit, could not attend the Unconference. +I'm concerned that, in his absence, other maintainers might have felt a dilution of responsibility: since the accessibility guy wasn't there, nobody felt empowered to bring up accessibility.

+

(This might sound like it contradicts my section about structurelessness above. +It doesn't. +I'm not saying organizers should have pushed harder for accessibility - they did try - I'm saying that we should strive for a culture where framework developers think about accessibility without waiting for someone to tell them to.)

+

One point did come up during the discussion which I'd like to hammer in: the Rust ecosystem should adopt a holistic view of accessibility. +Accessibility isn't just about screen readers, and making a framework accessible doesn't stop at adding AccessKit as a dependency, though doing so is a great first step.

+

Rik asked if there was a minimal set of ARIA attributes that people could start using in their UI, as the set of available attributes is gigantic. +The AccessKit framework is rich, and it's not obvious at first glance how much is needed versus nice-to-have. +The current reference in the Rust ecosystem is the AccessKit implementation in egui.

+

Requests for Rust features

+

Jon Kelley, the creator of Dioxus, had a laundry list of features he wanted from the Rust language. +That list was later filed in the Project Goals repository.

+

The requests were well-documented, with motivating examples in existing Dioxus code that would clearly be improved by the features. +Most of them felt both self-contained and like they would tremendously both beginners and veteran Rust developers; though Jon made the point that the papercuts he wanted to remove were especially punishing for new developers trying to become familiar with Rust.

+

Overall people were very enthusiastic about them, and the lang team members in the room seemed pretty optimistic that those features could be added.

+

My favorite proposals were:

+
    +
  • Capture trait for auto-cloning reference-counted types in closures.
  • +
  • Automatic partial borrows.
  • +
  • Optional struct attributes.
  • +
+

Jon also wanted support for a remote cache of pre-built crates, so that users wouldn't suffer from having to rebuild dozens of crates every time you download your crate's dependencies. +The consensus from Rust maintainers was that such a cache would be essentially impossible with Rust's current architecture.

+

Niko Matsakis recently released The borrow checker within, which feels like a follow-up to some of these discussions.

+

Collaboration in the Rust GUI ecosystem

+

Over the last two years I've joked a few times that everybody in the Rust GUI ecosystem wants the ecosystem to standardize on common crates, as long as it's their crates.

+

After RustNL, I'm pleased to report this joke isn't accurate anymore.

+

A vibe that permeated all discussions was people wanting work to be pooled. +It felt like people didn't strongly care whose crate we adopted, as long as we all agreed the crate made sense: +we're slowly crawling out of the xkcd 927 dilemma.

+

The main ecosystem crates that people are enthusiastic about sharing are:

+
    +
  • winit for creating windows.
  • +
  • AccessKit for plugging into accessibility APIs.
  • +
  • wgpu for using modern GPU features.
  • +
+

Jon Kelley also said he would be interested in using Masonry as the native backend for Dioxus, though we haven't hashed out details yet.

+

Corporate funding

+

For open-source projects, "Who funds this" is a difficult question: in any healthy project, there is a large scale of contributions, with individual non-corporate contributors at one end, and companies paying cash to the project's treasury at the other. +In-between are self-employed people like me contracted to work on an open-source project, and corporate employees who contribute to the project as part of their 9-to-5 job.

+

Some monetary contributions can also come from individual non-corporate donors: Servo has about fifty of them, for instance.

+

With that in mind, some notable sponsors for projects represented at the Unconference were:

+
    +
  • Google Fonts: Linebender projects.
  • +
  • Futurewei: Dioxus, Makepad, Robius and Servo.
  • +
  • Embark: Bevy, winit and rust-gpu.
  • +
  • Foresight Spatial Labs: Bevy.
  • +
  • Rerun.io: egui.
  • +
+

Not present at RustNL but relevant to the ecosystem are System76 (funding COSMIC-Text and contributing to iced), Kraken (funding iced), and Slint who are self-funding as a startup targeting embedded UIs and couldn't attend due to time constraints.

+

Overall the number of different backers feels like a symptom of a healthy ecosystem: while some large corporate sponsors bring much more resources than others (Google and Futurewei especially), the ecosystem isn't in a state where any specific backer pulling out would completely collapse progress.

+

Conclusion

+

Before anything else, I'd like to express a big thanks to the volunteers who helped organize RustNL.

+

Most of the attendees were absolutely exhausted after two days of talks and two more days of Unconference, but these folks had to run the darn thing. +I think everyone who attended was impressed with them.

+

Overall RustNL and the Unconference felt like getting a year of coordination done in a week. +It was a thoroughly productive time, and I couldn't be happier I attended. +Everyone I asked about it shared the same opinion.

+

And the discussions we had during the event showed there was a great appetite to push the ecosystem towards more cooperation, both between GUI projects and with Rust maintainers!

+

I'm feeling more hopeful about the future of Rust GUI than ever.

+

Now it's time to get back to work.

+ + +
+
+ + + diff --git a/blog/tmil-09/http_cats.png b/blog/tmil-09/http_cats.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0abd0d3e860f730f1488a7889dd2bc0799ef54 GIT binary patch literal 201711 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 literal 0 HcmV?d00001 diff --git a/blog/tmil-09/index.html b/blog/tmil-09/index.html new file mode 100644 index 0000000..455f64f --- /dev/null +++ b/blog/tmil-09/index.html @@ -0,0 +1,161 @@ + + + + + + + + This Month in Linebender, September 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + +

+
+
+ +

This Month in Linebender, September 2024

+

Daniel McNab, Olivier Faure, October 15, 2024

+

Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.

+Linebender logo; smoothly stroked overlapping lowercase letters, an l and a b. +

Xilem

+

Xilem is our flagship GUI project, inspired by SwiftUI. +It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.

+
    +
  • HTTP cats example (xilem#571).
  • +
  • lens, a shorthand for a common component pattern (xilem#587).
  • +
  • We added Views for some existing and new widgets: + +
  • +
+ +
+A list of HTTP status codes, with 'Select' buttons. HTTP code 418 'I'm a teapot' is selected, with a picture of a kitten hiding in a teapot. +
+

The HTTP cats example.

+
+
+

Masonry

+

Masonry is the widget system used by Xilem. +It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.

+

Our ongoing pass specification project has been largely implemented. +That work is now in a wrapping-up stage, which has allowed Olivier to work on improving the codebase's quality in general. +Some highlights of work from September:

+
    +
  • xilem#515: Removes unimplemented functionality from our text handling code.
  • +
  • xilem#570: An implementation of a grid layout, by Jared O'Connell.
  • +
  • xilem#550: Restores scroll requests, as used by text inputs.
  • +
  • xilem#565: Allows widgets to implement more efficient pointer position dispatching, by new Linebender member Tom Churchman.
  • +
  • xilem#580: Adds screen reader support for the textbox widget.
  • +
+ +

Some ongoing work includes:

+
    +
  • xilem#615: Detailed accessibility information for text input and prose widgets.
  • +
  • xilem#606: Custom client side decorations for Wayland, by Marco Melorio.
  • +
  • xilem#605: Greater flexibility in the layout of the Image widget, by failingprovince.
  • +
  • xilem#591: An SVG-like widget for absolute positioning, by Muhammad Ragib Hasin.
  • +
+

Vello

+

Vello is our GPU vector renderer. +It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.

+

The month of september included a lot of progress towards the 0.3.0 release.

+
    +
  • We no longer consider Vello to be experimental (vello#691). Please note that Vello is still an alpha, and has several known issues.
  • +
  • An implementation of the single pass scan described last month is being created by Thomas Smith in vello#685.
  • +
+

Parley

+

Parley is a text layout library. +It handles text layout, mostly at the level of line breaking and resolving glyph positions.

+
    +
  • Nico Burns contributed a new way to assign layout properties in parley#76.
  • +
+

Others

+ + + +
+
+ + + diff --git a/blog/tmix-01/index.html b/blog/tmix-01/index.html new file mode 100644 index 0000000..00d4b47 --- /dev/null +++ b/blog/tmix-01/index.html @@ -0,0 +1,108 @@ + + + + + + + + This Month in Xilem, January 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

This Month in Xilem, January 2024

+

Raph Levien, February 6, 2024

+

Welcome to the first in the “this month in Xilem” series, bringing updates on the Xilem UI toolkit.

+

There were two blog posts on the new Linebender blog. +The first, Xilem 2024 plans, sets out the goals for the project for the year. +The second, Roadmap for the Xilem backend in 2024, by Olivier Faure, presents a roadmap for the Xilem native widget set. +A major feature of the roadmap is a clean boundary between the Xilem reactive framework and the lower level widget set. +We hope that enables experimentation with other reactive frameworks and possibly integration with other projects, rather than requiring everybody to buy into the Xilem stack.

+

On the planning front, a major decision was whether to continue work on our own window creation library, Glazier, or whether to join forces with winit. +Among other things, since Android is a primary target for our work, and winit already has a working Android back-end, it offers an appealing path to getting that up quickly. +We have decided to try joining forces with winit, and look forward to future collaboration. +Over the next few weeks, that will entail porting Xilem over to winit (xilem#163) and also trying to land working Android IME (soft keyboard) support in winit (winit#2993).

+

In Vello, a major advance was porting the low level font handling code from the experimental swash crate to the production-quality skrifa (vello#423). +Skrifa is being developed by Google Fonts as a memory safe library for loading font files, and is integrated into Chromium builds. +Over the coming weeks, a goal is to release Vello (and supporting crates) on crates.io.

+ + +
+
+ + + diff --git a/blog/tmix-02/index.html b/blog/tmix-02/index.html new file mode 100644 index 0000000..0ae4cf8 --- /dev/null +++ b/blog/tmix-02/index.html @@ -0,0 +1,113 @@ + + + + + + + + This Month in Xilem, February 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

This Month in Xilem, February 2024

+

Raph Levien, March 4, 2024

+

Early this year, we made a decision to use the winit crate for window creation, as opposed to rolling our own. +That work has now landed in main (xilem#176 was the main PR, with a number of followups). +A major motivation was to enable more platforms, with Android being a major goal. +That work is in progress; a major subtask is enumerating the system fonts. +As expected, this move has uncovered rough edges in winit and some regressions in behavior. +We plan to address those, with the improvements hopefully benefiting the entire Rust UI ecosystem.

+

The Vello crate has been published as version 0.1, with significant documentation improvements and a friendly example. +We consider this an alpha-quality release, as there are known issues. +Even so, we want to get a release out to facilitate integrations and shake out problems.

+

Another major area of work on Vello is investigation of startup time, which can take multiple seconds when the platform's GPU drivers are slow at compiling the compute shaders. +A number of techniques mitigate that. +One is to compile shaders in parallel, using multiple cores, and that has landed (vello#455). +An even bigger improvement will be caching compiled shaders. +Daniel McNab has made an encouraging prototype (vello#459), and the ultimate goal is to land that in wgpu so projects across the ecosystem can benefit from it (wgpu#5292).

+

The work to compute strokes on the GPU using Euler spirals continues, but has not yet landed. +The current state is a draft PR that implements the logic in Rust code, which now needs to be translated to WGSL for GPU evaluation (vello#496, draft PR).

+

There has been progress at higher levels of Xilem. +Among other things, Nico Burns landed a scroll view implementation (xilem#155), and Philipp Mildenberger has been steadily refining xilem_core and xilem_web, including fine grained tree structure tracking and minimal/efficient DOM-tree-updates (xilem#160).

+ + +
+
+ + + diff --git a/blog/tmix-03/index.html b/blog/tmix-03/index.html new file mode 100644 index 0000000..ec3e5a9 --- /dev/null +++ b/blog/tmix-03/index.html @@ -0,0 +1,119 @@ + + + + + + + + This Month in Xilem, March 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

This Month in Xilem, March 2024

+

Daniel McNab, April 4, 2024

+

Since the last update, there have been three newly released projects from Linebender:

+
    +
  • Velato crates.io badge. +Velato: A parser and driver for Lottie animation files in applications using Vello
  • +
  • Vello SVG crates.io badge. +Vello SVG: Allows displaying (some) SVG documents in Vello applications
  • +
  • Tracing Android Trace crates.io badge. +Android Trace: Resilient bindings to NDK Tracing and an integration with tracing
  • +
+

If you have a WebGPU capable browser you can check out the web demo of Velato.

+

Implementation work for rfcs#1 has started. Masonry is being ported to Vello in masonry#56, with the next step being a move to Winit. +This work can be followed in the #masonry stream on Zulip.

+

We have landed some important improvements to Vello. +Euler spiral based stroke expansion (vello#496) enables GPU stroking by default, significantly improving performance in scenes which make heavy use of strokes. +Additionally, we now support scenes with more than 64k draw objects (vello#526). +We have also been making progress on vello#366, by evaluating different strategies for memory allocation. +The first part of this has landed in vello#537, which avoids undefined behaviour in more out-of-memory cases.

+

Additionally, we have been able to continue taking advantage of improvements in the foundational font crates from Google Fonts. +This has enabled support for font fallback in xilem#196. +Hinting has been unblocked by vello#544, although the implementation has not yet landed in Xilem.

+

rfcs#5 has been approved, which will improve the robustness of our continuous integration. +Kaur Kuut, the author of the RFC, has also landed these changes in vello#523.

+

A focus for the next month is preparing for the RustNL conference at the beginning of May. +We are hoping to present a compelling demo there.

+ + +
+
+ + + diff --git a/blog/tmix-04/index.html b/blog/tmix-04/index.html new file mode 100644 index 0000000..b9e1bb9 --- /dev/null +++ b/blog/tmix-04/index.html @@ -0,0 +1,111 @@ + + + + + + + + This Month in Xilem, April 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

This Month in Xilem, April 2024

+

Raph Levien, May 1, 2024

+

Again, last month saw a substantial amount of infrastructure work in the development of Xilem. +The biggest change is landing Masonry as a crate within the Xilem repo (xilem#203) and adding a new xilem_masonry front-end. +The existing xilem widget tree remains in the tree during a transitional period, but the focus of development is now on Masonry.

+

Masonry is a principled abstraction layer within the stack. +While it is designed to work well with the Xilem reactive architecture, it is not dependent on it. +We'd love to see experimentation with alternative reactive frameworks, and also language bindings. +A lot more detail about the motivation and design of Masonry is in Olivier's roadmap blog.

+

Two major infrastructural crates have been published. +Parley is our text layout crate, supporting variable fonts and other advanced features. +Supporting Parley is fontique, a crate for enumerating the system fonts and making them available for itemization (choosing the right font to support a particular script).

+

In GPU rendering land, we have written a paper on GPU stroke expansion (arXiv, repo) and submitted it to a conference. +This paper explains quite a bit of the math behind Vello's path rendering, and explains how we adapted it for high performance on the GPU. +It's also a good time to note the wgpu 0.20 release, which contains some work to improve on suboptimal zero initialization that will dramatically improve startup time on many platforms, including Android (wgpu#5508). +It also has support for subgroups, which will unblock further performance improvements in Vello.

+

We're very much looking forward to participating in RustNL 2024, where Raph will present a talk on Xilem. +It looks like it will be a great opportunity to meet with other Rust UI ecosystem projects to find common ground and possibilities to collaborate.

+ + +
+
+ + + diff --git a/blog/tmix-05/index.html b/blog/tmix-05/index.html new file mode 100644 index 0000000..c033bc8 --- /dev/null +++ b/blog/tmix-05/index.html @@ -0,0 +1,108 @@ + + + + + + + + This Month in Xilem, May 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

This Month in Xilem, May 2024

+

Daniel McNab, June 12, 2024

+

Several members of Linebender attended RustNL at the start of May. +Raph gave a talk titled Xilem: Let's Build High Performance Rust UI (YouTube). +The conference also provided a great opportunity to meet with developers from other Rust user interface projects; +Olivier has produced a report on the unconference, which will be published here shortly. +In addition, those in attendance met after the conference and worked on a roadmap for Linebender, which we are also planning to share here.

+

We have taken several important steps on Xilem. +At the start of the month, we released Xilem 0.1.0 and Masonry 0.2.0. +This is the first published release of Xilem, and includes text input (xilem#241), AccessKit integration (xilem#244) and a TodoMVC inspired example (xilem#257). +Work through the rest of the month included explorations of a generic View trait (xilem#310), and an Android port (xilem#309, xilem#313). +rfcs#6 is designed to reduce boilerplate when using Masonry, which should help those creating custom Masonry widgets.

+

Other Linebender projects have seen steady improvements. +vello#575 significantly reduced shader compilation time at startup for projects using Vello, and vello#516 enabled clearer error handling. +Nico Burns has started an exciting project for inline box layout (parley#67), which will enable Parley to be used in projects which must implement Web layout.

+ + +
+
+ + + diff --git a/blog/tmix-06/Minesweeper.png b/blog/tmix-06/Minesweeper.png new file mode 100644 index 0000000000000000000000000000000000000000..d85494005dc5361c5e2da41a39e175f542e6144e GIT binary patch literal 41939 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 literal 0 HcmV?d00001 diff --git a/blog/tmix-06/Xilem Emoji Picker.png b/blog/tmix-06/Xilem Emoji Picker.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b5e91cb3d5a40a2c48a63ab76eb2d94e97889c GIT binary patch literal 203407 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 W$D?O_e+tJ4<$&f + + + + + + + This Month in Xilem, June 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + +

+
+
+ +

This Month in Xilem, June 2024

+

Daniel McNab, July 3, 2024

+

We released Vello 0.2.0 at the start of the month, which included some key improvements discussed in previous months' updates. +We also merged initial handling of Emoji (vello#615), which supports glyphs which use the COLR specification (Apple's system emoji font does not use this format and so currently will not render). +In-flight work includes an enhanced testing setup (vello#610), GPU memory allocation robustness (vello#606), and improved correctness for some unusual strokes (vello#607). +The GPU-Friendly Stroke Expansion paper has been accepted to High Performance Graphics 2024, and will be presented in Denver on July 26. +A revised draft of the paper is published on arXiv.

+
+Screenshot of an app, containing a 4x4 grid of labelled Emoji, zoom in and out buttons and pagination controls. 'cat face with wry smile' is selected +
+

A toy Emoji viewer example (xilem#420) running on Android. +This example uses system fonts, so has limited platform support because of the caveat mentioned above.

+
+
+

xilem#310 brought in some new ideas about how Xilem Core can be structured, which enables support for specialised kinds of View, such as for window properties. +Adapt views built on this were used to create an Elm-inspired example in xilem#401, showing the flexibility of the Xilem architecture. +Philipp Mildenberger has been prolific in his work on Xilem, as a co-author of the new Xilem Core, and in adapting Xilem Web to use it. +He also worked to bring support for OneOf views to Xilem Core in xilem#394 - these were previously only supported in Xilem Web.

+

Masonry's observability support has also been improved, with automatic tracing to a temporary file in debug builds added in xilem#384. +xilem#396 implements rfcs#6, changing the architecture of Masonry to make it easier to write new features and tests.

+

There was also some excellent community engagement with Xilem in June. +Veniamin Ilmer has created an open source Minesweeper game using Xilem. +The discussion on Zulip (in #xilem > Minesweeper converted from Iced to Xilem) has been very useful in guiding areas for improvement.

+
+A window titled Minesweeper, with text in the top-left 'Mines: 82', a top-center button with a neutral ASCII emoticon, and a board represented by a grid of buttons 30 wide and 16 tall, where some buttons are replaced with colour labels containing digits, and some buttons contain an exclamation mark. +
+

Screenshot by Veniamin Ilmer of their Minesweeper game, used under the Apache 2.0 license.

+
+
+

Following on from May, Olivier wrote and published a report on our experience of the RustNL unconference. +This led to some useful discussion online - see the zulip thread corresponding with that post for links. +We are now in the final month of the May-July 2024 roadmap. +In the intervening time much of the work has been started or completed, although there have been some changes of priorities. +I expect that we will soon be looking at prioritising items on our long-term roadmap.

+ + +
+
+ + + diff --git a/blog/tmix-07/calculator_example.png b/blog/tmix-07/calculator_example.png new file mode 100644 index 0000000000000000000000000000000000000000..bcb9d5efad8902efc0d71ab6be90b63e7679f22c GIT binary patch literal 19820 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 + + + + + + + This Month in Xilem, July 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
+
+ +

This Month in Xilem, July 2024

+

Daniel McNab, Olivier Faure, August 8, 2024

+

Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.

+

This month saw a lot of community contributions to Linebender projects. +Philipp Mildenberger especially is a major driver for progress on Xilem and especially the xilem_web crate. +Bruce Mitchener has been very active reviewing pull requests, which is an under-appreciated but essential task for any open-source project.

+

Xilem

+

Xilem is our flagship GUI project, inspired by SwiftUI.

+
    +
  • xilem#423 integrates Tokio into Xilem, showing how the Xilem model can interact with async work.
  • +
  • xilem#428 by Philipp adds explicit support for Flex parameters.
  • +
  • Philipp ported the async work to Xilem Web, and experimented with some extensions: +
      +
    • xilem#440 is an experiment into async event handling.
    • +
    • xilem#448 added the MemoizedAwait view, which runs a task whenever the input data has a new value.
    • +
    +
  • +
  • xilem#467 by Jared O'Connell adds a calculator example. +This example can also be run on Android (xilem#474).
  • +
+
+A calculator with display section showing the calculation 9994 + 3231 = 13225. Below this section is a grid of buttons 4 wide and 5 tall, containing the digits 0-9 and some other calculator operations. +
+

The new calc example for Xilem.

+
+
+

Masonry

+

Masonry is the widget system used by Xilem. +The most impactful change was the implementation of the "Widgets in arenas" RFC in xilem#396. +Widgets are now stored in a global arena, which has little impact on the public APIs but make future changes a lot easier to implement.

+
    +
  • xilem#417 exposes an unstable API for embedding Masonry and Xilem into an existing Winit application.
  • +
  • xilem#418, xilem#421 improved our unofficial support for iOS.
  • +
  • rfcs#7 specifies a clearer architecture for passes, including simplifications necessary for compositor use. +Actually integrating with the compositor is still out of scope for reasons Raph has laid out before, but the new pass specification gives us a starting point when we get there.
  • +
+

Vello

+

Vello is our GPU vector renderer.

+
    +
  • The GPU-friendly Stroke Expansion paper has been released. +Follow the link for the outline, the full paper, demos, and a talk at the HPG 2024 conference. +Note that the interactive demo is built with xilem_web.
  • +
  • Vello 0.2.1 has been released. +This patch version resolves a longstanding crash around empty scenes.
  • +
  • vello#643, vello#647 switch to Git LFS for storing snapshot test files. +Git LFS is an open-source Git extension supported by Github, that lets users commit large files to a repository without permanently bloating it. +Using it has trade-offs around bandwidth usage in CI, but otherwise matches our use-case perfectly.
  • +
+
+A screenshot containing a single bezier curve, split into several differently coloured segments. The control points of the curve are visible. The expanded stroke for this curve is shown as a filled section, with the generated line segment end points visible as small circles. There are several controls for settings of the stroke expansion above the curve. +
+

The demo for the stroke expansion paper, which was created using Xilem Web. +An interactive version can be found on the paper's website.

+
+
+

Parley

+

Parley is a text layout library. +Nico Burns contributed quite a few improvements to Parley this month:

+
    +
  • parley#67 implements inline box layout, which lets us mix textual and non-textual content and have the non-textual content laid out in flow with the text.
  • +
  • parley#76, parley#84 gets style types closer to CSS engines.
  • +
+

Others

+
    +
  • The Glazier repository has been archived. +This is in continuity with our direction so far, as we've dropped support for it and committed to building our crates on top of Winit.
  • +
  • We are at the end of our documented May-July 2024 roadmap. +We expect to do a full retrospective on it soon, including the items we shipped and those that slipped.
  • +
  • Daniel and Olivier are now accepting "office hours" style appointments, for open-ended discussion of the ecosystem. + +
  • +
+ + +
+
+ + + diff --git a/blog/tmix-07/stroke_expansion_demo.png b/blog/tmix-07/stroke_expansion_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7c9a3297229b2da9bf08c99ced1cae0fd4f9d8 GIT binary patch literal 79928 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νEdB7GHtzed?+>b;8I&fJ}W#8UfxQV^kA zm@n0?TXdNRdQIHb$L>yWB-|+a!rqSSWeJ$s&&z^cfS9kJ&WQGqmgKeQu511m#-6<* z(-ck7I`G5Yg>tj612fWyj!7p?1p@rol1y1^@H$P}KLXjBYDcDT8rVHl2$mnN-u?-W zr!eCR0UxQ_F@5rRLqtYRsfcH&O(PBdR%*@D2W4)_F;@**{DE42d)+Hr{sjT4{-%91R>C`% zH%rRT=y&=sEV3H4SA2vgk7M+|Ov0R6sZ6;EWFhf6Q^}l!lTRJ9JFqzj2q&-2f+*~{ zT#iK7;SyhLQI(|qDrC4Yn>W}$Dg8pIBT*=4A~VqP9JjQ zdoS_&KyB-xJ=~X5are*1bu~*> z4AS!%p(}_Kt;Gqu0$a*Qx!%ZUr2KlvM6ejTGluH3ykVuA_w^W9L|o=`rr>^BX_p<3 zbN7|4q&Sn4(n1I!w_e)m7PJX>s+xR51JHiAaTqie4wuSp;1%XpX<7&<*LhF;(Q12< zX{UkKW2cPvGiwfSTx#)4uf57%^1XdAR(WKd1?I2#oNUL8kFwWzie|v;rps5TrD|{F zr<07KQcW`)OVpVnyUojYwjRFZwrH8yecISOKNmcsR^Bv^F?3SZR!@?fBM`A_Prh%z zSn{;6(!0-)KrVBd&Yr9mt6BM=r=+5-%mMY_{pgi_`hmr%w|`$miutuH5+R4!gLEri zZ-l`c^dAq}UV6b3nDm_sfO26nr*9f>8e1;Oj9Lpru11d2F^+sru!e44R0|{Z4q>f3C+b-653%Do|0C- zPzdy2Y^1w>3b+q+b5ZZtg{uKtNrwuW$t4vJ9^949!;cAZ_NkS?CLU72-YFM9dVeoWq1C3 z6pc-gqpbZbAMG*G=5X- zc>K-8l82y2_!M)1?7bNR(Q`ukH(KP&H%t4n$8q3(M`hZraznWTHD0I9sJy{-#D4Q8 z`|&$R>lhK6^1S%NMH+E#uHPxhLO$8DrWi^0_T<8lHKql|3$_41W)tR`TbFnYJLSIKq z(&J*TqdDqx)ft-7u@Dd~{Lf$zaU!Tr^nj5WFo|Eg2C&$=$#KN9)AVP_Q(uhsV_5uV z%&UeGB)nrLmKChhti9cFU3Avk@wPDY00o7V28EZ0UPQ4cw-XUlYc$pxrODc4ZQLDL=}p5*Wnb_MvJa{816Pp8B#zFx0X=F# zC*i>$d5>SIP~E&K(_d3HN`SIkHA5h#aUttZ{wgc=btmC0HX!boar1~E5O<;wTrZ%q z_+qo`Mi633S$eWvHzJ(2-R!4Eu-}|j_@p2r&um z{&?r{ZsYD^SxoVrvX(S7X3POvh0Z0Y_SqeN4_a`vIT_}&YsDsdOI)TnZRqQ5aC0)L zrkr19(M6C z@#%>HO~%HjW%j-|^UJG!)RB;Cn5fV&OJ8^*dYm?!!TE8JCOh=K22+a^M-l~+^oy&D z_6LzislMR|N-|+urKF1}dzKlmdlBqSDB|Hn{7pliP1Rz4+x_{4S3e*SYdIYa?dv5B zC!(0>4C>;4G4)m4`~ah0Y57lts6oS$xv$B?7z~MeHuRT!IqHg1#S)EdptB-rBzN(i z{1z5?Rpnlt#oGMa@jOwyln^p2IOWyn%~ zhoA{KpG`XnJ9Ray{8&=icb58=t%-)LIHs`M#P@UldUGN=VU#mbKBg*=?>rL4@#9SW zHO~_%Az3UG5K~Xhw8V{PP><=2{i(m!7Iz}xkve*l+lB*gR{1X8#=}gJRf%)8AF8l{ zRI%#hBapxE$E*fi3#gA1F$ts2jD+xr$&N5GCl!C3Bk;L!|Y&H;ds>%oR1#Cpv6CI-s^hcQ{!P`z|A3OyHt?x*S~Q) zTv;(I0-m|&bt1{IQo0~dYci9sEKz#?7rGa4-vp3~Cdxt~-v4aj&0ruW;)$MmaU`@` zF!9N!n`gL>OIKnMb2GT9xWNEdCFQ9ZOPCQP1_kugR8r)>@3o(KWA`@;@aWNG0@n$G zwGu)Av7S=uMeV2rWi)qukXtWxKXACud0n8 z_!WRR%x$yfv0F+1mz)|^59^mdej9fZBcpNXP}CVYC6XKCA(z;=k&Qzpo7l9IE0|Tn)ts`;PBC6KD^zN>=q9 zhvT1ufcD=(-{*>lhy5TByP)U5#}z!jc=R*L_x@_)qOyfW2sFi0wT>c~`>*9A04$$K z(Q&UGZTzTcPH@}Rx_n?!^+*%tot`q)x8~!4_I!BHI$(NmQ|A6*Z7=so*l5Av4(n(D z!;N=mDl1P$g!l&O8p-}%lHwJw7+8yY4Kq^-%|&lBlWy-(hcS7m8+&I?O|XdGPSju< zZA2|;+%^p9>5#EQq?C%48!U>- zv3r2If-qN#RrTk>h-%4`c#K{OU#~R#E_91Ohz1_4e}B9mVmM~p%P51Bg)jUYAsfb{ zx75ZFkzCJt+xi#JMrdA86T+b|S&s8h4%v-U->$~v$Hsqs&K_Ld0oovHX|`8-)<-=w zJohWyBBJpAs!Ee^w)qPUf+Q|e%LPZ+J6Wr>Qy_v>Zoj#f8%6|d1x?k)9~ujQb5aS| zlTZM2P&x5T|L|X;AgfB8(EuOjaT$_ivnk9eKk*bKkX94VvX#Pr_fy-}4L_FpqHFj!XMmunz8{ao8ITdUq2q2JdEoYNlR9DHhW1=bm2Q zo@JPX54hZl+6eJ}caF$U&}G^OtV~^VSJD3l0)Jv;ISZiBdOUy@en_Yt}p0Y>jzbXE?Z6_rel)Q(CeLw^tPZsCOUX0 zJ79>KNX|&f-w_%}(aQiuH0YgyEUh#8{;&rQ#3{6K?}@Xhn~-0+083)zFtJdPKj^vN zxM93KSzN|yTo?N5`=;0b7B$AH4X{r!GVP`WdF@v^)}%&|;34!GGIjy-R?|K=d*pyy zU3^#`nW^j0-vdAViLKC^fipBFn83=sQ!ulS==Hxf38b3qpeI+G^9wJm05s{&c;iGU zS^1rq&0NjpN+9;QW*LBvAjA6^GH=)DLBNod3JSZ=rkB%dG87>pxQ3wsHSz{u_w)N> zZ4NT4Isj+MGoYYXN=vGX;QVMEA+RoEhi1^iSYv>Hv#3=D+dTy63NmUb$Ty+=hFsWg ztk8e?Bd0>~{F{b^gvneX*HY$$bZkf!eigt(u-Xv8-`bydAYpd{mJxBTRCp+B-Au!_ zW%32kMTXTc`!w_TqYmc8L-4C^39G(i9-;hq-9BcGlfSahDhp-qFUS<@y;;zHFih;h zYfhE-pylN0hy5t3cQG~R6{xIXc5PQ?De2KGVb-Bnnw%Mf(8yUXO@yVwf37EU;A)N7 zExOD^)h6g-pMU2FQS-T*c@Y}CM4vgXFt^x4U$2s$5=?;A%)r{L_HEe-+yHAG4up$m zO{c0wZf=hhOR(7OCqWUI@JTlUDruCal=lBV!4lUVOQ)03>KXh1U{NOaL-qa4-~-3L z?&;E+$Nl1)IZ4iHL-eOVnvHD?6*eqI{Ri3Gh0lS@Px+NL1R5NXgt>p+r!-{;w*d7^pIYD7^BYgmys0S#I>KsRmIE zpBnG2T*v%l-(h?~(0OKvh*UxxmG+Nv1`r`bC&``5;sS|>Jwz%y!ksc z{uPD**bb|Y_{)jSKL`E)zxMx%$p6ph>?!Z1=yHMh1R8|o!e01f=!DaBV6tGgK#qi~ zmo(7$bhF18;803Wt6+?ylZdT<_)GA{;FX$;8-JC}o3{Q4{TODiw74wB^H$XWTQv@m zZ^2%grFy7{kk`6x1+gS~(DOhs1Rz$Z0fMT%^8Py0YF*KJ{#BA}79W{;t&bCVWUZV) z=Ho&W*TTRe;Vm6r#p;`jx_obklLhs;zY6XJ0?&dTufXES5uCmo@N&A7I0rAj@40|( z3dQY2MlA1YgvqVq9sWv~{^c)luHE#?U|RhRuH*u?mo}*fq631?5@I{@{)5Autr?oiPghi^T%?mQr^^ z7(X1MZ4xcH8i2`GbR|+dGSgSpel=`I2l^t_n;R*ryJOj8-6nEAlN)YDyR+N)nA4Zs z;Nfg~zRE1$I6=cpij^^gq>fn6o8-@?x+=YZ5Yw_~Q0238c;%|nRo-87R`K$&#On^h1p#^RXiM2wukVaz4SRR*;#^#3UFTRgYZe9ofz`uI z4?wG!|5iyESy0cqQW8LVgx}aq01X21Bk4$tR#6Ehe$y&t#0&U2^|Pp%Dp?}_kIuct zN{_2IK%U7VRRZ*w7!k>Z;Y zGUe~!G8zT&S2}gh$R@}idyav68(QCXR(1(sImC&EKJL~4G18+mr|^g}MC{egvxy#s zDA%}`RV%COoj-=~kKbM<;bG3-0d8?mj69o;SMhvd`|Tfg)JU&JfDfGTvo5Qh3I*(k z@ALJYc&9f007D@9h@ZLv5&#@XZIA=64WTzE1~fKLV(U-9+*nC30?Da=c&udLQxGh zD_up*p<#8KS+xQM+3^yseOo|I8YM@EZZGm}Xl3Cb1aRp3MhYMI@vlX_o2&5~+xEEp z9o##iEVf7=zzL}Wr6;)k7d{541x4JbO2-l_MbyeVWQ0CO-b483`8x|gFQHbTL7F14j2R>d-cnrGE#39MS^TU0Lx@SL6+O+ zqItQ8siZV!%KBlIp#9q;?5TKr6vXaDWeYgLr{1$wG97PUGyqm-Em3fSA+IckHa6=M zr%xWo{q%acpMUHEbH`-B79y@`=zW&NYojaJ3KS9fi|OCvA4`}w;f0_!;F${8cpEhn ze02M*4SelnbiCFNp7|8qV=j7w zx5tBp@OlO>Wy0$7NA}W2a@qdpv%oLnG%x$*M0&B8bw&tiUg=s__80>Utx~fIK*h!% zjlRR~>5Hb0O?9hCVY>$Ql=luNj8nEhGc&_&HH5MlTUH6*z-jCfm|#M_MJKf#mp>21 z<|OC=0C+HXdf6FKS&}v#%IcEj1xP#*%09=j7BP4usmlOeI&svfvlRh{m@a!?81y%~ z&#zTqn>aw&Uy|6=yw!L6jk0wS)Fl8v9%LWHy=+HpmGWD@pa3}HEoYQo%68Bra(fF< zwCP)y#=%vNucirGD|cH?M#$(;f98yJ)pjLuf>r~uML#>?qMm#C_Ji=x*C#tIoZK`2(O`L+u zL`L7CpB4;&sD%U;R}#||%lGH?l|VsUFFNdk%YZWqHeTz79s8W5F6Yr-0~e~<5Br_0 znUYG$i9Rp&;=NHkyFOMX!1z`Ipi7PDaNAf}9H*x~);>UbzpYmiC1EQET9>6$k*niJ z+*=7ikY<3GK0z6A45*Hrya1-`WLWj*5kuc<$TQC3o#@(5bKA-%n7`FtCwRolpdJ2- zXJ-|T*n{aJ%^iIK(Yn(i{Q#!mN!C%la9BCKbwIk3N^exPUL>W^x(L=40In`uBo7t#P(ZL zkB|Jkz%d{$q5!P{)l04`#+g}N;;udsHDg&AbK+k zE7;(QpdEQ<@)e*4ebY5lRDc!POA#;IT6QSZ)`5tb7n1rt{%qQ?eNLWC6n21SFxLoO zAub*|KA*QMoDNKb19r~RX?;+)nR?Ws$4(g-XvzzwX@IcuX-=&qT9uVZpL+27X@tA(V}?*u9b&uR3ixf-7)hD5S5Gi2-xP(enbEeOA31q`jBn& zULE(hT>C?C%x~kcutGpbZgU#FKwZlS!uwi*1}=yZG5b(T{TADX@ujgoP;d zEl6ec1sQ4bAE~8wN|M%|==?^O85SYXMt*PbVTPAWS5;4afmfI23Sq#GWM@tKt5MPv zVgM&bnHh5AB^aEBGRTr@1evRO%$Q}V3RW}(b(2eu;1H3U?jE|#4?019L#oXkfIgBj zBJ6c}n6lhmISjtJzd0!Eb-kZ?y|UUHeL&tR-)3L=u7t2tKmRPcGkWEL+3;#W;h<#W z^0$x@hZLnFkgW1H(o08UMuG@-=on}KF{yYC2vI&j5JxTZ)cJIiysrH_Ejr$#E;^J@ zcmMMfcyW#Z-DX3%~_sre$xgA`unY#7(h6!iqMtj*GO3Bo8G_nekF}#HZGp)hE_* z7)fgh!1j+sl%gp?S$24wW&aAXj;2;iA;fz>bk7=U zsxsDf#yO4FgSEa`+nVpHV}g2e(VN4Yh*|p=nm5t!2!5;P&^C&w0T_{<=!jKD5DVRI z24uA~lM`CcaQymm7M(<<@k@e(3aBJQ8H!V4&I_!iN6LG;9ANRROl0+el^#HRQqF{& zR2mG+omu?RU~}a>E|G)+5>^(Me2t2M0MaaK%>+7F-R49y*vUs-It#`X)Nrnw-Ri=! z#H+CWDHP`kG2mE@0-%zykLNpbHjm3O)66?6zf`eJb7{U_*wB>cvRD$Hm}76hRhE4= zmm*s~OB=JFMgk>sU0Avn@Hivt$3w%B9Bpl4SF>d=6e#QS>8bUbM#CHE%8W~>d)C-of zx{|>3Ug%0Lv+9e=-g3{d{RwO;jh35zA=&WDLzAVe3APAQJ)zyh+B{}>W(=DGGd-(C zbD^E7JD`}owYcd0kc+R(WK}1t`y|tPF&HSEm>NF|QprAXR^Ji6*_{{}%Lb1qPy}DDTtE(}r^$PaAQui}N{PlJv754VHZo@Fxu#?T(Wixe#aue~^2U)zfsZ7_<3!NJ zi)afIQsx%qhJQQBey{f=;+ebZLXctQf2(qY7#v29QA=Z>(?FR^8;ajyeM>y}0F;8s zF76}=ZpANQ2C9<;_HA-t} z&QSPtqg90kd1pKQxqmf1Hg+1uuB6bEE0Q?^MPW5~wyEjdjUy(nYep_tjqH$}h*ARd zP8zqn=E3v?frT^#-yRfob+F~xd8?7RgUQZwYYcAzZZ#Fz(v=?MJtc?K(xzG!b|(jK z`@RPUQh8Ea+(ANWW}+wj!-uz7G3@$%xK8TK@oW*>B0iVp<7XT@w)!>(wZbs(`_LeG zm>GL3bwKS z2^`3ZU5MSUT3Zm(awvCa^e(NN+m?NC@1UCv22N|yutxRL8IbDf;s6L&R87u$q;HGx z)^B@h58GMG64nW};W(foWV8qu5`88Pa6o#o30Lhj8xC@A5kLcNQY>kC~*XqPNz&9Q$HCB1soZe8dlcx|*U|s=$=8 z!ORd=A+Sh_sD9lF$m3fgI`bq*i;1Fx_YJV&BO5C(W;yJ>h9qO_59e7uL4FXr2g^H` z5|QO4+YPIQI&_ zd)N2+yLrEarGcyT$=ELrtN5Yy{Gb>cP;*#*D~asHFxAc!^k#+vx~4Hl5JRuhdIhV9uPLxeaPqX0Wq2F5 zJX2{Xvpfg_*k+j~Gh4j_I_|yOS#zn(ZC!bMadoSG!_V14(E-ruf zHqPXz@A%+tlsGAUB5$L=a+GVGml>yMdOvoSazY(XrT&WJIq&kSk`*cI_~hCLg!iks zP5R^BbeJZg^9vdi&AZ2Cd6GN5vN_T482tSY{ci2gVm!(3OKUYS19uU>QS$h9zN_B^ zD%6%dNr#^`dV~ZokTvPkPfPNCfv=nv_JDRHed^-_(4AT@t^r4e*sg~8X|8VZ6?E&w zQk@uQi)xSIK+cfWg)hk`zI9b*Q4;twY3sVlq@1W`0GzO^=*CoAst|qm8*g32_jZs6 zW|+oF!kiM`$GJZjBN}{<7<>yJsZ>bNYtqwV zazd(@a*pxL<0>dCvAVIa$w5`lx1w*-k9}2~flOXYgRsLet4B*Ra;CpC3d)|LE*ig` zbv&bcQxf;NJl91179V_HFpZjtgSXu9X+GI1PwFDsd*hAJpE$MgY$Q@tZhH>lAZU>B zr;qz$awyEL<(GTEGt#}3W}^~rJzaoGZ|(Z?#VK+0v<`1C+VTU-TXOi-<|nA#lMQ>H z!6Iws1l{`T3}k(7Df>maHYAK4^OPm8D^SJM7rh=ETf3&-Uf{G7*!wq+=zFLySYmBZ zp`PkG_f147wg9sZGnsdN$)ZYPXPto#S`Oh!&$&v;2s-n8oweujPA*=tE|sk8y~r&r z2sp2$F;Wf<(s5lFZJs;-bu3Kap_6Ra=04#o5GBAEQv}rCi}dJ2N}tn%y_an26UsFK z+x}h5;h!Jefg9T;712-4uVD2FXM88ZHC>}+NnkCVfRKnfzMXUF)pR*p%$0e}Q|8u+ zamO=qF>5`~W66cyRg&8sNCkJUT`@beul1y^juL9ftvM{Lo?r zs;$IjGBy7*E5rK^%IBiMWbdMY^c^_X$+rb{_C5wR`8d3F*B!5Qjr|_BdRx5`!1`9; z%@|MgK-Mj|PhhP&)4;u8%GHPR#1uGrVr8@USka7Q{kZ!0LVty&^|TkX^W8Rzox8S! znIc@a)STKdW6q6N?4>p5eJtmOdXv4s_71okg?6!$h*;cA-2;JR*s#fAgE_t^i#C@9 zPaWAt-DvFfh=+j7mSyh&ZT!$JIj0!h?j-1_Zb+Vrp|9$v*$IbeXjbuzP!ai{+{t)= zvN8daR_Njr_i)aJTDrp`9&~N#{v{?G`VG}`XPNP?D0JxbdaSI52R5t{`;6xAwYDJj z_28*&HX0x=-2xP4{8A!8^X`4iue!>)lkojF{@9%&%hbng9M991Eul6io)UHyEL51w zj7;Z5)FbZ6U1yQX_#N%NKG#TCjfZ&1PAQMm%$Mf z)@b`W1fYj1RhY|EtY4USmKL@<`6a8V%yYc2q=6<@g_9}vC3EI#d+tb8mRuSc8+m;} zZX!Wzgzx9Qe)CfuOES?7Woi0%AtX^ysKPvmlN0w=XnGPOjVe{SBCQ)AjX7fbSJl$s zE~=R|R2Jr4Y%$@qQ~phlcg2$i{;^N6Ew6#jR&P93DZdMaQLH7cRHo5)#s8+)qA)#q zYUv_KVwm795dpFOrsK;p&7%H4Ij?t8Jb+p%kABWLTa$3wx@~pmOkvvdmg7Fqg!I<0 zPKz_Dwr1LMNNeugqn@)J%W}khr7s8tkL(KI3KBu#_-_D6K^RN5VzR7ioY!StfC&Pi zLh#eh2Y}u0-+OA(6Q(y3rtV|Xt5?U0ggTOv#%FG~SYz4C_(lb!TTB;ks(szoQFE~r zE_89Hi6w)0_18%qp`k;Jm)9KR>Ea=nrcejmUHc=2F!6l0tJ1hoT;0AZtRKSCqmp&z zO!8HnKj6KQ%FNpQs9@V+CYz$u91TCr54y??pEoX&2Ml~lwwN+u3uzRFN&#hF;!^C` zY%GmG*1hIGWIH5)9pixmKZ9GLay7TdjiVL7k~(kmh;7B0vHu-Of$cLW+X(|%$AGeu zYy|a`Mf!)Bl1*V6@=|B52j1+P&pzCez2*_SLM_Uxn1q+KI-6GTRKae|4pWC+F%nB( zP>vZ(sdN+CVZ@^#gY<83ewc1JwY4L?8d?3D1yFx+JpV4tuJT3E#7oKZ0V}D?A0f}BJ;^*xe3Vnrva;PRffPnRs4*lMs;y*@h+Nkx5k@UTx#A9 z-wPVlf2-S(9UGBNqYSeRoAn;A3ahsEZ4_TyQ=INzO(I^W(y->GD`XDm@8IXGw3%!H zzlJ@0do|q?`MwPk@j-3=eZQfTsw`-oRw0%3Y-cVA}n(7!{=yXs_iBI z1V@Asr(6|V3=wdlI&^mN7q9l0<0N`SQgG2Z{D!rywZnv^Rnk$6oNkOV`$vAwau%Ff zQ}?0~X!fv4k;;>5U8UHTGKZ54ic+wxJ$B1uuQkd{7Hwvx7}b_`e(b#5pb`y3rMTsP zLz9WRG3QmHQ+swKd?Ipt_%39u7Zkkdk)~WezI5YVc7btd;C{H7*)0SUBcPybXEgXw z^n+#=U&sGyukcT3m_A!Vanf2>>E#X7!`<-6HO?qB=7G(@c1@d}f%#l6JKis}?A9LD zW9mm{jkrnBnOgAx%A0te7O1e!Z{aSdvaROEHYzLYd{l#pD)2-Z^JakWwk%>oS^1KQ zUD}{PeKnh?m`}xz{CQG1a%GuIMiEc4j_0fRm=By{)A~UDz0t^(`c5Y4dU4vpE^j5>_=JwClc4Q~kAuT9mj&k>Yb$I##mYyt^|ECn z11u{MkiV@XIRTS@_BxYq`JGb7DW|ytQW@3lw-W(JaAy*tQdZpKd67HY(IzMgLaiyy zWR?}nAoY)(@2aq)pPW#UwxTDWJZD9Hw2O-KOHf$nXb5w7BiM*0(T?ABIzlW~gNs$= z6{T-fcX*HQULWBQSU}$CSQh7x!^7uf(oQUji+R>whd4eJ<0mywd($uj@~oz~0s8a? zs?(S9EXfgxCM29dYS~v1y;!EvQBal>5Irk4otX26ege|#2tuE&Q#&)^D65U=9AOA9I0+WS3>({ysn{|E^6vRD zo{o;B#(hTS?E08uXo3w>V3ES_*NNror-D>{167hILUI>Yx-{Cn8=pN2M?ryIEon%W zdm$Zyz_B%!S~`Tm`dglu-Ec>jsn*oHTpQeM7Swi?^_vbpc-uzO6w6b;6b)|ylw6#9BS ztAA4@OSS@GtzA_)S`NJdsNU1oJrV{8%fXH0mUf0=2R3$1HGU9mNLZ!upo%Anv=hwp zd%Dc!%B9K)1*IV&+iBGogsVS}PY9alj|2@_rs5AGG%aR_27^cmz?0--HVlIceO9GF zwR2FO#FaXg%ks;G)6}&t9GPDKg(_xG5COfWC2B+8>KA3rZVwEDv`tIRVRk+Ic`0$J zXJ|aqzc3cbig2=vlfs19x{C92&cE4W^+-HJ@5ChHo^=i25KUy!9vok&_MJq=ziA~% z)Piw?)W|(|$MO=)%aWI%ov!e3zQW?BY7?Y1?gql4OyQ@`h|}gwLH$5KSF+{MPz1m= zg%ej-q_WWwgV#HDQFOdUD%*gOrPRzs?sZ6YX6;as1o-RwSYG!|gTK2K23hG9prXeH zueD*;7DVf)5tW3KO2_HHlk$T?5A?zMCZ1xtX_v{Fls{C90d1luQtnBU?x@3XCG_6Z zU!m?fThk_2muT$i*FE~nPePl#>RYQ}7Y^mjE`i0)BmxKE5AP}amP_S1H)taYZ&$pV z#E;+|l%RWh2D2#cxAXOY0j2pJSo7u0`v(@IPIDH8dGV~IhJ!38Ats(m%1obi_s@DO zy^s3~^K|5rFZ__6EA$4jR`uoBh)V67yR1b^(-?HuDf?W~7s5G#gPm5ov7BIif@XuG zc`h5>LGA1W*j8je;TNRXBUD2LwpUVgi~i5$)&9UlZ?brIPC}OGIqrU1$jZ-rs=RGO zh3=lzK+e1c(7QAKAA4^ZR#n%9jlyPwbeGcI-O@-%hjhE?7Lbreq&FemAqprRk`mIL zN|$tpbbo6b&-=XR`u?1s=Q{7d?d4*wxyBsx9x=zbXTy>`_g05ODEY%Da+4-o+L2%a zvZ#vXwa{3E4@`q2WvKz=_Iii{W@xkha5oCzvP^TGUiKb9}Mf8+6RPk}Q~<^`foY zth30MpEZ8*wL&;Mb4l6E+0XQ+MPz{jM!Fy0Fu-j{_WGMJv(+wa%*<}EekDxw`QA`c z*}PjtDZyN`yIvc5z*^$dslkM!?e3$wouwz@zCAx=f15bbZ^zm~Zq<n5M%hTK*X60n{4GF}*-&@1FP%)%ZiY5MXL4G!5o13PCWue+t zKK*(h9CGXoKJPwDTrXP_(l7DUWVu{QN7(rhN|9-!&CYtz;=lfK7i^(ts%^LrWVe&S zG)AuD`^%N-4v#qWlRdv_)LHjjWq9z46A64rh4=ooWWLHJvz0mvxd? zWmQAn=TG|=`h~IwB1D)8Dp?5o$-M^*A4;QLWZ!*@yG?ktW$fAtf2~8>uV$DuKFD#n zJ@3(_SUZn@(8SB7ecx%rwYEmI@-@$IAkoeTGI`Ju_T8%V%}%N4a$TNGurVB1E>R!l zvA&1ck$T0?kaNrMn4gKkC%lxDd0L^5yh`mhE81l!vGl*y-y#yIfGzQj527`SNqfuk zvXU|_pMpYg;2%obH&-X$d`uZAHa2U>#`}i%M*X8Q9r;(j4awKM%y5lW_~$}srPiL5 zAC*2xsl|V$^hR@G0tgfGEY?go*eHvv@-k`-;p2E; zP#1h}`_uABag)RB>}TGF?t|uQ$IjW+)#T);119&DPi~nf#?O^7=hq`7 z@r?Gj`s9Y;n5C-Pygj2!!>Uv8@K+ZVEx1Z z(ibluBm%wNR{>3oZs_e*6*HvjHFeQOQ{qvXrP^2wCM%fX6
    I5k}l_)=_*s@b^+ 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 *-S?8irAC|b`i$TeQ`JY7 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 literal 0 HcmV?d00001 diff --git a/blog/tmix-08/index.html b/blog/tmix-08/index.html new file mode 100644 index 0000000..f30a6a1 --- /dev/null +++ b/blog/tmix-08/index.html @@ -0,0 +1,203 @@ + + + + + + + + This Month in Xilem, August 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    This Month in Xilem, August 2024

    +

    Daniel McNab, September 11, 2024

    +

    Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.

    +
    +Linebender logo; smoothly stroked overlapping lowercase letters, an l and a b. +
    +

    Linebender has a new logo, which was contributed by Markus Siglreithmaier. +We're seeking feedback on Zulip in #linebender>logo.

    +
    +
    +

    Xilem

    +

    Xilem is our flagship GUI project, inspired by SwiftUI.

    +
      +
    • We integrated basic animated variable font rendering (xilem#507).
    • +
    • Philipp Mildenberger moved us back to using ViewMarker in xilem#472. +This restores the ability to return ViewSequences, by making a tradeoff to work around Rust's faulty trait ambiguity rules.
    • +
    • We added Views for some existing and new widgets: +
        +
      • spinners, useful for showing indetermine progress (xilem#497);
      • +
      • progress bars (xilem#513); and
      • +
      • the Portal widget, which brings support for scroll areas to Xilem (xilem#561).
      • +
      +
    • +
    +

    Xilem Web is a community managed experimental DOM implementation of the Xilem pattern. +This month, the updates include:

    +
      +
    • Support for returning multiple views from the main logic (xilem#482).
    • +
    • Support for DOM templating, for efficient repeated creation of similar views (xilem#495).
    • +
    +
    +A timer with the value '0:00:26.4' (26.4 seconds) above two buttons, reset and start. Below these are 5 laps, labelled 'lap 5' to 'lap 1', each with a lap time of approximately 5 seconds and a corresponding elapsed time. This is all contained in an OS window titled 'Stopwatch'. +
    +

    Jared O'Connell additionally contributed a stopwatch example in xilem#492.

    +
    +
    +

    Masonry

    +

    Masonry is the widget system used by Xilem. +This month has been dominated by Olivier's implementation of pass specification (rfcs#7):

    +
      +
    • xilem#512: The new compose pass, which is used to minimise redraw when scrolling.
    • +
    • xilem#510: Adds the mutate pass, which allows later passes to assume the tree structure is stable by limiting when tree mutation can occur.
    • +
    • xilem#522: Implements paint and accessibility as passes, with follow-up by Tom Churchman in xilem#557.
    • +
    • xilem#488 and xilem#540: updated event and pointer handling, and disabled handling respectively.
    • +
    • In progress work includes layout in xilem#529, focus in xilem#538, animation in xilem#539 and scroll requests in xilem#550.
    • +
    +

    We also had some great community contributions, such as:

    +
      +
    • Richard Dodd added a new progress Bar widget (xilem#513).
    • +
    • Fixes for Portal scrolling, by Tom Churchman (xilem#563).
    • +
    +
    +A horizontal progress bar which is 70% filled with blue, with white text overlaid saying 70%. Below this is a checkbox labelled 'set indetermine progress', and a button labelled 'change progress'. +
    +

    The progress bar widget was contributed by Richard Dodd in xilem#513.

    +
    +
    +

    We continue to make progress on other key features.

    +
      +
    • Snapshot tests now are cross-platform and run in CI (xilem#233).
    • +
    • Pan/flick gestures are being developed in xilem#562.
    • +
    • Progress continues on text input for Android. This involves creating our own Activity, with support for both text input and accessibility. +This new Activity will use SurfaceView like other modern native code based activities (GameActivity, MakepadActivity, etc.), and our aim is that it won't require a Java toolchain to build a simple application.
    • +
    • Progress continues on the Accessibility integration for Android. You can try this in xilem#575, or see it in the below video.
    • +
    +
    + +
    +

    The Xilem to_do_mvc example running with TalkBack integration. +Video provided by Matt Campbell.

    +
    +
    +

    Vello

    +

    Vello is our GPU vector renderer. +We have made some really great progress in August.

    +
      +
    • We now support blurred rounded rectangles, contributed by Markus Siglreithmaier (vello#665)
    • +
    • Blend stack spilling was implemented, which allows blends more than four layers deep (vello#661).
    • +
    • Fixes for some visual artifacts in vello#651, vello#659 and vello#673.
    • +
    • Embedding existing wgpu textures is now supported (vello#636).
    • +
    • We now support bitmap glyphs (i.e. emoji), in addition to our previous COLR support (vello#641).
    • +
    • Work has begun on sparse strips, which is tracked in vello#670.
    • +
    • Frame pacing for Android is being investigated and developed in vello#674.
    • +
    • Thomas Smith has been doing some deep-dives into parallel scan, which is the core operation in Vello. +This work can be found in #gpu>Progress for GPU's Without Forward Progress Guarantees.
    • +
    +
    +A vertically split image. On the left are three blurred shapes: a blue rectangle with rounded corners, and two black ellipses. The ellipses are partially occluded by the boundaries of the image. On the right is a web page, showing three blog post titles and summaries, each in a box with a black box shadow. +
    +

    Vello now supports blurred rounded rectangles, based on the maths from Raph's blog. +Left: Vello's blurred rounded rectangles test scene. +Right: Blitz's servo example which renders box shadows using this feature.

    +
    +
    +

    Parley

    +

    Parley is a text layout library.

    +
      +
    • Primitives required for robust text editing were added in parley#106.
    • +
    +

    Others

    + + + +
    +
    + + + diff --git a/blog/tmix-08/progress_bar.png b/blog/tmix-08/progress_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..1aacc03ef74d1d4fd19b19b6b94652b7eb8e7b1e GIT binary patch literal 8479 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

    ?TrhdSvo!C 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

    0Q2 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®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 NA3Cm_e9-vH-vAXw({KO) literal 0 HcmV?d00001 diff --git a/blog/tmix-10/floem-todo-list.png b/blog/tmix-10/floem-todo-list.png new file mode 100644 index 0000000000000000000000000000000000000000..f65913f506a9a087e970800234460df397ab4085 GIT binary patch literal 17262 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 + + + + + + + Linebender in October 2024: resvg stewardship - Linebender + + + + + + + + + + + + + + + + + + + + + +

    +
    +
    + +

    Linebender in October 2024: resvg stewardship

    +

    Bruce Mitchener, Daniel McNab, November 4, 2024

    +

    Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.

    +

    This month's update is very significant, featuring several crate releases and the adoption of resvg.

    + +

    We would like to thank Yevhenii Reizner (RazrFalcon) for all his work on resvg, tiny-skia, and related projects. +Due to some changes in his personal circumstances, he has to give up working on his collection of excellent crates and he has been seeking new homes for them to help keep the lights on. +The following projects are now part of Linebender:

    +
      +
    • resvg - an SVG rendering library, including usvg;
    • +
    • tiny-skia - a skia subset ported to Rust.
    • +
    +

    These crates are widely used within the ecosystem and play an important role in many software projects, and not just in Rust! +Given that Linebender has a mission to provide high quality libraries for GUI and we have established processes for managing those libraries, we feel well positioned to step in and help out. +Several associated repositories and projects are also now part of Linebender. +These are simplecss, svgtypes, and resvg-test-suite.

    +

    We do not expect this change to significantly impact current users of resvg, usvg, or tiny-skia. +Our role is a stewardship role, to allow updates to continue as needed by the community. +If things work for you now, they will continue to work for you going forward.

    +

    Our plans for the near future are:

    +
      +
    • Integrate with existing Linebender practices for CI, testing, and releases.
    • +
    • Review and respond to incoming pull requests and issues.
    • +
    • Re-license the resvg repository (including both resvg and usvg) from the MPL-2.0 license to a dual Apache 2.0 / MIT license as is common within the Rust world and the standard for Linebender projects.
    • +
    • Provide new releases as needed, working with the community to bring additional maintainers.
    • +
    +

    In the longer term, we will look at how the ecosystem is evolving and what’s needed or useful. +The Linebender team has deep expertise in 2D rendering, including vector graphics, color and text layout, shaping, and rendering. +We look forward to seeing how we can apply this to these projects.

    +

    Relicensing

    +

    We’ve already begun the process of re-licensing the resvg repository and are nearly done. +The change of license will be present in the next release, which will also be our first release under the Linebender umbrella. +This will allow us to share code between the Linebender crates more easily.

    +

    This process can be followed at resvg#838.

    +

    Help Wanted

    +

    We welcome pull requests and issues.

    +

    Also, with RazrFalcon becoming less involved, we’re losing a key source of knowledge about the code itself as well as the philosophy behind it. +We look forward to hearing from people who use the various crates to understand how you use it, what you use it for, and what you’d like to see.

    +

    For further discussion, please use the resvg channel on the Zulip.

    +
    +

    +

    Alongside the work on resvg, we have been continuing work on our existing projects.

    +

    Xilem

    +

    Xilem is our flagship GUI project, inspired by SwiftUI. +It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.

    +
      +
    • xilem#681: View::rebuild was updated to reflect the ability to use reborrowing.
    • +
    • xilem#669: The font weight for labels was exposed, by Marco Melorio.
    • +
    +

    Work on Xilem Web continues.

    +

    Masonry

    +

    Masonry is the widget system used by Xilem. +It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.

    +
      +
    • xilem#632: Starts a Masonry book, including a guide on creating a To-Do List app.
    • +
    • rfcs#7: The pass specification RFC has been fully implemented, and the RFC has been merged.
    • +
    • xilem#705: Moved methods for mutating widgets to free functions. +
        +
      • This decreases ergonomics in favour of increasing uniformity between Masonry and crates which create their own widgets.
      • +
      • This change is intended to improve rustdoc output, and the ergonomics should be restored once Rust has Arbitrary Self Types V2.
      • +
      +
    • +
    • xilem#615: Our accessibility for text has been greatly improved, allowing by-character and by-word movement through accessibility tools.
    • +
    • xilem#660: request_paint has been removed in favour of a new request_render, so that accessibility updates are less likely to be missed.
    • +
    • xilem#718, xilem#720: restored the ability to embed Masonry in external projects by re-exporting required items.
    • +
    • xilem#612: A built-in feature-gated integration with Tracy.
    • +
    +

    Daniel also provided a talk to GOSIM China 2024 about Masonry. +The recording of this presentation is not yet available.

    +
    +A tracing view of a single frame in Masonry. There are high-level spans with details underneath, and GPU operations are shown. +
    +

    Masonry now has built-in support for tracing using Tracy, using the tracing-tracy crate.

    +
    +
    +

    Vello

    +

    Vello is our GPU vector renderer. +It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.

    +

    The main update is the release of version 0.3.0. +This release includes previously discussed support for emoji and blurred rounded rectangles. +We also now no longer consider Vello to be experimental, and so would encourage you to try Vello for your projects. +Raph has been working on Sparse Strip Path rendering; progress can be followed in the Zulip thread.

    +

    We do still have several known issues, but are not aware of any issues which would block wider adoption.

    +
    +A to-do list desktop app, in a vertical layout: Use Floem, unchecked; Create more TODOs, checked; Join the Linebender Zulip, unchecked. There is a button labelled 'New To-Do'. +
    +

    Vello is now supported as a renderer for the external Floem project, developed for the Lapce editor. +Note that Lapce does not currently itself use Vello.

    +
    +
    +

    Parley

    +

    Parley is a text layout library. +It handles text layout, mostly at the level of line breaking and resolving glyph positions.

    +

    We released Parley 0.2.0. +This includes:

    +
      +
    • parley#126: A new abstraction for text editing operations.
    • +
    • parley#129: Ergonomics improvements for style properties.
    • +
    • parley#76: A tree-style layout builder, useful for building up a text section (e.g. between elements).
    • +
    +

    We have also done some follow up work, including:

    +
      +
    • parley#143: Support for shortcutting drawing work if rendering has not changed.
    • +
    • parley#152 (in progress): An example showing cursor blinking, by tannal.
    • +
    +

    Piet

    +

    Piet is a 2d graphics library which abstracts over platform-native graphics APIs. +Linebender is focused on Vello rather than Piet for performance reasons, but some users may find Piet useful, as it relies on more mature renderers and is more compatible with older platforms. +During October, we released Piet 0.7.0.

    +

    Some key updates from October included in this release are:

    +
      +
    • piet#572: Use of Arc over Rc for stroke dashing, by anesthetice.
    • +
    • piet#585: An update to the Rust 2018 edition, from Bruce Mitchener.
    • +
    • piet#578: Improved robustness of copy_raw_pixels on Direct2D by Kaur Kuut.
    • +
    • Many dependency updates.
    • +
    +

    Druid

    +

    Druid is a GUI library which was a predecessor to Xilem, and an ancestor of Masonry.

    +

    We are in the process of relicensing Druid from its current license of Apache 2.0 only to the Rust ecosystem standard Apache 2.0 OR MIT dual license. +If you have previously contributed to Druid, please read and respond to druid#2414. +This will greatly improve cross-compatibility with the rest of the Rust ecosystem, particularly for adapting code from Druid into newer toolkits. +We plan to archive the Druid repo after one more release, as we are not actively developing it; we are working to bring Xilem to parity in capability. +We will also apply this license change to Xilem and Masonry, as well as Glazier, which is currently archived.

    +

    Others

    + + + +
    +
    + + + diff --git a/blog/tmix-10/masonry-tracy.png b/blog/tmix-10/masonry-tracy.png new file mode 100644 index 0000000000000000000000000000000000000000..066ba8f2113ad5629850ce436a329546f7c1cca5 GIT binary patch literal 99170 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≥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 literal 0 HcmV?d00001 diff --git a/blog/xilem-2024/index.html b/blog/xilem-2024/index.html new file mode 100644 index 0000000..e3b7924 --- /dev/null +++ b/blog/xilem-2024/index.html @@ -0,0 +1,131 @@ + + + + + + + + Xilem 2024 plans - Linebender + + + + + + + + + + + + + + + + + + + + + +

    +
    +
    + +

    Xilem 2024 plans

    +

    Raph Levien, January 10, 2024

    +

    2024 promises to be an exciting year for Xilem. The big news is that Google Fonts is funding the work of four open source contributors to the project: Aaron Muir Hamilton, Daniel McNab, Matt Campbell, and Olivier Faure.

    +

    Aaron will be working on text layout, building on parley, text input including IME, and Android platform integration. Daniel will be working on GPU infrastructure and performance, with much of the work upstreamed to wgpu. Matt will be working on accessibility, and Olivier will be building the core widget tree, with a focus on developer experience.

    +

    Xilem is an ambitious project to explore the limits of UI performance, as described in my High Performance Rust UI talk. The goals include gathering knowledge about the viability of Rust for UI, and what patterns work well. While there is a research focus, we plan to gather this information by building a real toolkit, solving many of the hard problems. The current state of the project is a fairly rough, though promising, prototype, so there is much work to be done. It’s exciting to have the bandwidth and experience of these people working toward that goal, but perhaps the most exciting prospect is bringing together more of the community, people passionate about building high quality UI. Our goal as an open source community is to facilitate that, and to coordinate the work efficiently. What we have now is not a production-ready product, but we wish to move in that direction, including quality documentation - some of the consistent feedback we’re getting about the current state.

    +

    Another goal is to bake in accessibility from the start. Too often, it’s an afterthought, tacked on at the end. We’re excited to have Matt, primary author of AccessKit, on board.

    +

    Xilem is designed in layers, with a reactivity layer on top, a widget tree adapted from Druid, and with Vello as the 2D rendering engine. These layers are designed to work well together, but the individual pieces may be useful in other contexts. The funded work will focus on Android as a target, but is intended to work well on desktop platforms as well; this is one of the core strengths of the Rust ecosystem. We don’t have iOS as an immediate priority, but attention from the open source community could change that, and the foundations should support it.

    +

    The status of the web backend for the Xilem widget set is more complex. Simply put, it is not a priority for us right now. We have done some explorations into generating DOM nodes from Xilem, but doing it well would increase scope and complexity beyond what we’re comfortable with. For applications deployed primarily on the web, xilem_web (which generates DOM nodes) should be a viable choice, with the possibility of Tauri or Electron for desktop deployment. To enable online demos of native applications, it is most likely that we will implement a version which draws to a canvas element. This has limitations in accessibility and native look and feel - for example, text input and scrolling may behave contrary to user expectations. Until more work is done refining the web backend, we would not recommend this approach for production applications using Xilem.

    +

    2023 retrospective

    +

    Looking back at 2023, there was a great deal of foundational work. Much of the effort was on Vello, the 2D rendering engine that serves as the graphical foundation of the project. A particular strength is high performance path rendering on GPU, which enables fully dynamic text effects including animation of variable font parameters. Though we had a reasonably good implementation of path rendering in place, much of the second half of the year was taken up by “stroke rework” which computes all stroke styles on the GPU, and also improves the performance and accuracy of antialiasing for all paths. To this end, we invented new computational geometry algorithms for computing parallel curves, the newest based on Euler spirals, with some elegant math tuned for GPU evaluation. A writeup explaining the details is in the pipeline.

    +

    There was slow and steady work on the higher levels of the stack as well, including factoring out the reactive layer into a generic xilem_core module, and validating that with generation of DOM nodes for browser deployment. The widget tree saw some development as well, including integration with the Taffy layout engine.

    +

    Governance and community

    +

    Though we now are funded to work on the project, the open source nature of the projects continues unchanged. We’ve been building up infrastructure for open source community, including a Zulip instance, weekly office hours, wiki, and, as of this post, a shared blog. Our contributor guidelines explain a bit about our processes. Almost all decision making is by consensus. Only very rarely do I need to step in and tie-break. As we scale up, we’re going to be more systematic, starting to use RFC documents for major changes.

    +

    We’re intentionally designing our community to foster learning and collaboration. For example, discussions are on Zulip rather than Discord because it’s searchable, meaning that the same questions are less likely to come up over and over. Its grouping into topics lets participants quickly skim activity as opposed to getting drowned in chatter. It’s working well for us. We also invite others in the Rust UI ecosystem to use our Zulip and wiki. As the Kurzgesagt video The Internet is Worse Than Ever – Now What? observes, large social spaces are degrading, and the video recommends seeking out smaller, more focused communities. I hope ours is one such.

    +

    In any case, we are happy to share bits of infrastructure with other Rust UI efforts, and are always eager to learn from them. I see many of us working toward common goals rather than competing, even if there are different approaches and priorities.

    +

    Thoughts on the Rust UI ecosystem

    +

    I’ve been thinking about doing UI in Rust for about 8 years now, and have explored many, many approaches. I’m not alone in this, there have been well over two dozen projects started.

    +

    As mentioned in a previous blog, any given application will have a set of requirements. Is Web one of the main deployment targets? Will there be embedded video? Is there a need to integrate with some other subsystems, such as a game engine? Each of these has profound implications. Some problem spaces (compilers are an example) are “smooth,” in that continual refinement will lead to fairly similar outcomes no matter the starting point, but over time I’ve come to the conclusion that UI is especially lumpy. I believe this contributes to the continuing pattern of new UI toolkits coming out every couple months or so; the author surveys what’s available, finds none that match the specific set of requirements, and creates a new one.

    +

    In some ways, Xilem is in the same pattern, but there are some things we’re doing differently. For one, it’s explicitly a research project, with knowledge about how to build UI in Rust an outcome possibly as important as the codebase. We’re trying to be systematic about finding the best ways to do things, which ideally will make some solutions more general. And, increasingly, we’re designing things as modular layers that can be swapped out. With luck, even if people don’t end up adopting the entire stack, there will be some useful components for the ecosystem.

    +

    A good overview of the opportunities and challenges in Rust UI, particularly for making mobile apps, is parallel futures in mobile application development by Andy Wingo. The linked blog posts in that series also go into considerable detail about JavaScript and TypeScript based approaches, which have important lessons as well.

    +

    Declarative UI patterns

    +

    The trend in UI programming has been overwhelmingly away from a soup of mutable objects with interlinked references and toward various declarative or reactive patterns. That’s a good thing for Rust UI, because the former is very un-ergonomic in Rust.

    +

    In the JavaScript world, there is a Cambrian explosion of reactive techniques. React is by far the most popular, but there is a strong sentiment it’s possible to be better, particularly on performance, but also robustness, as the logic for deciding when to re-render is fickle, and can miss re-renders. Elm deserves special mention, as its avoidance of global shared mutability makes it particularly easy to adapt to Rust, so it serves as the reactive core of the iced, relm, and vizia UI toolkits, as well as yew on the WASM side. But there is also Ember Octane (based on Adapton), a number of fine-grained reactivity approaches such as SolidJS, and many, many more (not to mention the incredible diversity of solutions for state management).

    +

    We’re seeing much of that diversity mirrored into the Rust world. On the WASM side, we see Dioxus as a fairly faithful adaptation of React, leptos (also sycamore and tachys) adhering fairly closely to SolidJS, yew as an adaption of elm, and more.

    +

    A reactive layer such as Dioxus or leptos can be compiled to WASM and run in a browser to generate DOM nodes. More recently, we’re seeing that it can be decoupled from that environment, and a reactive core can drive a widget tree. Examples include Freya which uses Dioxus, and floem which implements fine-grained reactivity inspired by leptos.

    +

    Xilem doesn’t directly correspond to any JavaScript framework; it relies on static typing and is actually closer to SwiftUI than anything web based.

    +

    One of the central questions in Rust UI going forward is: which approach to declarative UI is best? It’s possible a clear winner will emerge, or perhaps there will be a different answer depending on the use case, or it might just come down to a matter of personal style, with a number of viable contenders (arguably that’s where JavaScript is). We’re taking a two pronged approach. First, we’re moving forward with Xilem. There’s a specific reason - Xilem is designed to support multithreaded rendering easily, while many of the other frameworks rely on thread local storage for access to a store of observables, an approach with high impedance mismatch to multithreading. Since performance is a goal, we didn’t want to give that up by adopting another framework. I also think Xilem is pretty good, but that remains to be seen.

    +

    Another way to gather more evidence on the Xilem declarative layer is to use it to generate DOM nodes in a browser, in other words decouple it from the widget set. As described in the Xilem Vector Graphics talk, we have been experimenting with that a bit, and a major development in the last year was to factor out the core declarative logic into xilem_core, and also develop a xilem_web layer for creation of DOM nodes. Early indications suggest that this may be a viable alternative to frameworks such as Dioxus and leptos, and we're eager to learn more from those explorations.

    +

    Xilem is untested, though promising, and it may be that some other approach is better. If so, we’re prepared to pivot. We’ll be designing the widget set so that it doesn’t have a hard-coded dependency on the Xilem declarative layer, and could, at least in theory, be driven from other frameworks. Olivier is author of the masonry crate, where being agnostic to the declarative layer was an explicit goal. He’ll be adapting many of the ideas from that.

    +

    Making a widget set agnostic has other potential benefits. While writing app logic in Rust is very promising, there are still compelling reasons to use other languages. A widget tree implemented in Rust with fast graphics and smooth interactivity, scripted in some other language, is compelling. I made a prototype in Python, which, though rough, shows promise.

    +

    Infrastructure

    +

    A UI toolkit depends on a great deal of infrastructure. We’re making careful choices around that, and also looking for opportunities to collaborate with the rest of the ecosystem. One choice I’m particularly excited about is investing in wgpu. I think WebGPU will move modern GPU usage forward considerably, especially compute shaders, which are heavily used in Vello. This technology will make truly portable applications requiring high compute throughput possible for the first time, and we’re shooting for smooth UI integration with the GPU usage in these applications.

    +

    Whether to use winit or build our own platform integration has long been a subject of discussion. We’re reopening that discussion with the winit maintainers as of this writing, but it’s still too early to say whether we’ll join forces, or decide that the goals of the project support having a separate codebase.

    +

    A huge part of any UI effort is text, and that’s also a long-standing interest of mine. I’m impressed with cosmic-text but ultimately we decided to move forward with parley, in part so we can test out ideas with variable fonts. The lower levels of the text stack will be rebased on the fontations work of the Google Fonts team, which is rapidly becoming a production-quality implementation.

    +

    Building common infrastructure for accessibility also benefits the entire ecosystem, and we're thrilled to see the increasing adoption of AccessKit. Indeed, on all these topics, we’re happy to share what we’re doing with other projects, as most of the infrastructure described above is general in application, rather than specific to our projects.

    +

    Conclusion

    +

    The potential for Rust UI is huge. The Rust language enables top-notch performance and reliability and is also expressive for high-level application logic. We plan to prove that out, based on encouraging existing research and explorations, as well as new research to discover the patterns for Rust UI that work best at scale. This involves work at all levels of the stack, including infrastructure we are happy to share with other Rust UI efforts.

    +

    Xilem is still an early prototype. For those who desire a “batteries included” toolkit for building UI, we ask your patience. For those who are interested, you are invited to come build this future with us.

    + + +
    +
    + + + diff --git a/blog/xilem-backend-roadmap/index.html b/blog/xilem-backend-roadmap/index.html new file mode 100644 index 0000000..8d7bb1a --- /dev/null +++ b/blog/xilem-backend-roadmap/index.html @@ -0,0 +1,208 @@ + + + + + + + + Roadmap for the Xilem backend in 2024 - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Roadmap for the Xilem backend in 2024

    +

    Olivier Faure, January 19, 2024

    +

    As you may have heard by now, Google Fonts is funding me this year to work on Xilem.

    +

    I'm not alone in that: Aaron Muir Hamilton, Daniel McNab and Matt Campbell were funded as well to work on various parts of the ecosystem. I believe this is Matt's third year getting funding from Google Fonts.

    +

    Now, what I was hired to do might be unclear to you. The scope we agreed on was fairly broad and was stated as "contributing to Xilem's view tree and developer experience", but that could mean a lot of things.

    +

    The first thing I want to do is communicate a clearer picture. I have a a lot of plans for Xilem, and they involve major changes from the current architectures, changes that might be worrying to the community at large or even to Raph Levien. I certainly don't want to give the impression that I'm wresting the project away from the Linebender community for Google's interest, and that means being transparent early and often about the things I want to rework.

    +

    What I want for Xilem

    +

    Xilem is a research-and-development project, the latest in a series (Xi-Core, Druid, Crochet, Lasagna, Idiopath), that aims to explore how UI development can be made compatible with Rust.

    +

    This might feel a little banal now, because Rust GUI frameworks are popping up everywhere and starting to settle on similar patterns, but those patterns weren't obvious in 2019! Xilem is very different from Druid, and getting to its current architecture has been a process.

    +

    Xilem has been perma-experimental since May 2022. Once it got started, the main Druid maintainers stopped contributing almost entirely with the expectation that Xilem would replace Druid once it was ready. Unfortunately, it still hasn't made enough progress to be on parity with Druid, yet Druid still lies abandoned, which isn't great when people had started relying on it.

    +

    It's debatable how much this could have been avoided. As I've pointed out before, the Rust GUI ecosystem is subject to massive yak-shaving: many of us came here because we wanted to build a text editor, and now we're all learning about text rendering, text editing, compositing1, accessibility trees, using monoids to implement stuff on the GPU, ECS, and some concepts that I'm absolutely certain Raph made up like Bézier paths and C++.

    +

    And to a certain extent, yak-shaving is good! "I'm going to do better than X without learning how X works" is a child's attitude. It's the attitude we all start with, and it fills us with courage, but that courage is naive. True improvement comes from keeping that courage after spending years learning how immense the problem space is, and keeping faith that it's possible to do better. The Rust community is one that values not just doing things from scratch, but also learning from the past to get them right.

    +

    This is good, but the "get them right" part takes a lot of time, and in the meantime, I'd argue that we've neglected end users a bit. We've abandoned Druid before Xilem was ready as an alternative, and then we worked on foundational and experimental projects that would make Xilem stronger and sounder in the long term, but left the project in an awkward state in the meantime (except for the web backend, which made a lot of progress).

    +

    In the ECS-backed GUI framework article I linked, Bevy maintainers have this to say:

    +
    +

    Not to be too harsh, but a lot of the existing Rust GUI solutions... just aren't very good. There's a lot of passable options, but they all have non-trivial drawbacks. No one has really risen to the top as a clear winner. [...] Deep down, we all know that we can do better, and we should.

    +
    +

    My ambition is to makes this paragraph obsolete before the end of the year. I want Xilem to get back to being suggested to newbies in the same breath as Iced and SlintUI. In the next few years, I want the entire ecosystem to get to a point where people talk about Rust GUI like they talk about ripgrep or rustls.

    +

    To give one specific example: my personal goal is to implement seamless hot reloading for Xilem before the end of 2024. I believe it's feasible, and I believe doing it will radically change the way people think about Rust GUI, along with other improvements I hope to unlock over time.

    +

    In the shorter term, my plan is to focus on basic features, widgets and styling options so people can experiment with Xilem, building on Raph's work on Vello over the past year. John Skottis's Xilem UX Notes give a good picture of the kinds of things I'll be working on.

    +

    The other big short-term priority is going to be documentation. We've seen a lot of people complain that the Linebender project were poorly documented and hard to get into; it was the most popular reaction to our 2024 announcement, but it echoed sentiments we'd seen before. We're aware of the problem, and we intend to work on it.

    +

    In the medium term, I also plan to work on the performance aspect of Xilem. People from Google Fonts have expressed interest in seeing how much performance we can get from Rust UI. While my mission isn't limited to performance work, it will be an ongoing focus, especially since it's an area where the Rust language brings unique opportunities. I'll go into more details on Rust performance and power efficiency in a later article.

    +

    Major changes I want to implement soon

    +

    These are the big changes I want to work on soon. Realistically, "soon" is going to be relative, because some of these changes are going to be controversial, and part of the work is going to be convincing people of their value.

    +

    Switching to Masonry as a backend

    +

    Okay, this one makes me blush a little.

    +

    I'm the only maintainer of Masonry, a GUI crate with barely over 300 stars on Github and little outside interest. Can I really justify taking the money Google pays me to improve Xilem and spending my time on Masonry instead?

    +

    That choice isn't random, mind you: Masonry was forked from Druid, Xilem's ancestor, and in fact Xilem and Masonry share a lot of code right now.

    +

    In fact, I'd argue that Masonry's codebase is of better quality than Xilem's current native backend. This isn't meant to be a put-down of the work of Xilem maintainers; rather, it's the outcome of a difference in priorities. Nobody was very interested in Xilem's native backend (though Raph was aware of its importance, hence me getting paid to write this), and lots of people were very interested in the frontend and the web backends, therefore the frontend and web backends saw the most work.

    +

    From our RFC#0001:

    +
    +

    As a result, Xilem's native backend is in a poor state:

    + +
    +

    Masonry's backend codebase is a healthier starting point. Masonry also comes with some built-in perks, like powerful unit tests and a structured widget graph.

    +

    It's not clear whether we want to import the Masonry codebase, the crate, or the entire repository, and it's not clear what the ultimate branding should be. The RFC lays out the different possibilities, and discussion is still ongoing, so the community can reach a consensus before doing more work (including possibly not using Masonry at all).

    +

    If we do move forward with this, then Masonry will need some porting work:

    +
      +
    • Using Vello and Parley instead of Piet.
    • +
    • Using Glazier instead of druid-shell.
    • +
    • Integrating AccessKit.
    • +
    • Removing the dependency on GTK.
    • +
    +

    AccessKit support in particular is table stakes, by now. The Rust ecosystem is converging on the idea that accessibility (or at least, screen reader support) should be integrated early on in the design of GUI frameworks, not tacked on at the end.

    +

    There are other things Xilem added over Druid (notably virtual lists and async support), but I believe Masonry doesn't need to implement them right away for parity. Both will be very important for eventual performance work.

    +

    Avoiding custom Widgets

    +

    I'm told by Raph this is a "molotov cocktail" which, uh, fair.

    +

    We should write Xilem's backend under the assumption that end users of the library (including the Xilem frontend) will very rarely create their own widgets. Instead, they will usually compose the primitives given to them the same way they compose DOM elements in the browser. There will be escape hatches, from a fixed-size canvas surface where end-users can use arbitrary paint primitives to full-on custom widget code, but we should design the framework under the assumption people will almost never need those hatches.

    +

    Clearly, this is a radical move. There will be a prototyping phase before we choose whether we commit to it, and RFCs to lay out the details. I'm confident it will pay off.

    +

    Developers of hobby GUI frameworks tend to provide a severely anemic set of primitives, under the assumption that if anyone wants other features in their widgets, they can implement them themselves. Both Druid and Xilem suffer from this.

    +

    On the other end of the spectrum, the web has shown that you can implement complex custom UIs given a rigid but rich set of primitives.

    +

    More importantly, the web is moving towards a powerful paradigm: declarative UI. As time goes on, people are realizing you can get better performance and composition by describing what things should look like and composing them than by imperatively making them do things.

    +

    Part of this is that native code is more performant than JS, but part of it just that declarative code is easier to work around than imperative code: its bounds are better defined, it lets you commit to limitations that make the engine's job easier, and it's easier to analyze.

    +

    A set of proposals called CSS Houdini came out that went in the exact opposite direction: pushing the layout engine towards more customization and JavaScript code. The proposal hasn't seen much movement since 2021, and I don't think it's a coincidence that the part that would have given the most power to imperative code, the Layout API, hasn't been stabilized in any browser.

    +

    The bottom line is that, while implementing custom widgets will always be possible, I want to encourage developers to go as far as they can composing declarative elements instead, and see how far it's possible to go using those building blocks.

    +

    More opinionated layout

    +

    One major customization point I want to restrict in Xilem is layout.

    +

    Today all Rust GUI frameworks ship their own layout algorithm, but none of them are competing on their layout algorithm. Often the layout algorithm is just a means to an end; developers that do want to work on a state-of-the-art layout engine will provide it in a modular crate like Morphorm and Taffy.

    +

    And here's the thing: realistically, most layout engines aren't that creative. Every Rust framework and every major GUI framework I'm aware of uses layout that boils down to "FlexBox with small variations". The number of meaningfully different ways to do GUI layout can be counted on, generously, two hands.

    +

    I'd argue we only need CSS Flow, FlexBox, CSS Grid, and maybe Morphorm to cover most people's needs. Conveniently, this is what Taffy aims to provide. There's already an experimental Taffy integration in Xilem, and I want to make it deeper.

    +

    That being said, there won't be a hard-coded set of layout algorithms. Rather, layout will rely on a web-inspired protocol between widgets (in other words, trait methods), and that protocol will be strongly opinionated to make implementation of these layout algorithms easier.

    +

    More on this in a latter blog post.

    +

    No boxing

    +

    Having a semi-fixed set of widgets means you can avoid using Box<dyn Widget>, which has some interesting performance implications.

    +

    It means you can add a lot of methods to the Widget trait without worrying about bloating the vtable. And you can write methods under the assumption that they'll be inlined, which opens up interesting DX improvements.

    +

    Using ECS, maybe, sort of

    +

    In current Xilem code, if you want your FlexWidget to have children, it must have a Vec<Pod<ChildWidget>> member. Each Pod directly owns a Widget.

    +

    I think this is an interesting quirk of Rust GUI, tying directly to Rust's ownership semantics. Non-Rust frameworks often use pointers to child widgets, true, but they're often shared with the framework, with an understanding that the framework is charged with keeping track of how many widgets there are and which is a child of which. In Qt, for instance, it's preferred (but not mandatory) for parents to call delete_later() on their children instead of delete, because it plays better with event handling.

    +

    Xilem's approach of "you own your children" is a little bespoke. It means the framework has a hard time iterating over the entire widget tree (say, as part of a DOM inspector) unless each Widget specifically implements the iterating method. And it means if you want to target an event at a specific widget (say, the one with keyboard focus), you need to go through the entire ownership chain, using some heuristics to avoid visiting too many widgets.

    +

    I believe Widgets should be owned by the library. If your container has children, then the only thing the container will actually own is keys into a structure (probably a slotmap) where the widget is stored. This makes a lot of things easier, like serialization and debugging, but it has an impact on the entire backend. It's an infrastructure investment.

    +

    Lately, I've seen more and more discussion of implementing GUI through an ECS. A lot of that discussion comes from Bevy, which is natural, since the bevy community is made up of ruthless cultists striving to feed ever more sacrifices to the ECS god until it consumes the Earth is intimately familiar with the ECS pattern and has reached a phase where UI work is getting a lot of attention2. But I've seen discussions about it in the Linebender community too.

    +

    Whether we actually want to use ECS is something we still need to research.

    +

    The way I understand it, the big draw of ECS is the "S" part, the Systems: it's about handling lots of similar data at once in arbitrary order. Which is why eg archetypes in bevy are useful: you're grouping together entities with the same components, so that you can say "execute this code for all entities with component X and component Y" and have this code be executed on arrays of values with minimal indirection or branching. And the "arbitrary order" part makes them work really well with slotmaps: since you can just read from the beginning of the slotmap, you don't pay the double-indirection penalty.

    +

    In other words, the ideal use case for ECS is code of the type for (entity in entities) entity.position += entity.speed.

    +

    GUI is pretty far from that ideal use-case: updates are sparse and should only run on a small number of changed widgets. Order often matters. And I'm not sure archetypes would work in a framework with a large variety of widgets and different attributes.

    +

    I think there are two things you really want from a Rust ECS library for GUI: slotmaps, and efficient ways to add and remove components from an entity.

    +

    Implementing those is going to be a major undertaking, which we'll have to divide into small experiments, but one I expect to pay many times over.

    +

    Community involvement and more to come

    +

    I want to really put emphasis on something: none of the above is set in stone.

    +

    Part of what Raph wants to achieve this year is to make Xilem more of a community project, and that means running more decisions by the community.

    +

    I've created an RFC repository for this, and each of the sections above will get its own RFC, where I'll expand on my rationale in more detail.

    +

    This isn't a rubber-stamping process either: I want to implement those ideas, but if the community3 decides that they are bad, then we'll go another direction.

    +

    There's other ideas I haven't discussed yet that I want to come back to:

    +
      +
    • Declarative styling: Giving Widgets attributes similar to CSS properties, with modifiers for animations, pseudo-classes, media queries and container queries. While inspired by CSS, it wouldn't involve any CSS parsing, selector resolution, specificity resolution, etc.
    • +
    • Compositing: Xilem is heading towards a "do everything in the GPU" approach. This is good for performance, but Firefox engineers who have gone down this road before us have warned us of the many perils they faced, especially regarding battery life. In general, after layout and painting, you really want a composite() phase to deal with scrolling and some simple animations without touching the GPU at all if possible. This is a complex subject, and it would be nice if we could hide most of that complexity from app developers while still giving them good performance.
    • +
    • Resource loading: This is another area where we might want to crib from game engines. At the very least, we want to be able to ask "Load me this texture/shader/font/etc" without having to write disk I/O in user code. Then we can start thinking about progressive loading, fallbacks, sharing, etc.
    • +
    +

    These ideas are likely to be the subject of further articles and/or RFCs in the near future.

    +

    Relations with other projects

    +

    Presenting the current state of the Rust GUI ecosystem would probably take its own article.

    +

    Things are moving quickly, and anything I write now might not be up to date in two weeks. The projects we're most interested in right now are Winit and Bevy, and there's some potential for cooperation with Servo. The COSMIC ecosystem looks pretty cool, but so far it looks like we have less to share with them.

    +

    People from parallel projects are communicating and exchanging much, much more than they were in 2022. Between Vello, Parley, wgpu, Taffy, COSMIC-Text and others, projects are converging and maintainers are making more effort to reach out and integrate other people's code.

    +

    Stay tuned for more!

    +

    Hey, this is really cool!

    +

    Something that came up in discussions I've had with Raph is that it's easy to miss the forest for the trees. In the middle of all the paperwork, blog-writing, RFC-writing, we can end up focusing on the process so much that we forget how excited we are.

    +

    So, I'm taking the moment to remind myself: this is really freaking exciting!

    +

    For all my criticisms and caveats and realistic assessments of the problems we need to overcome, I'm still feeling absolutely great about this!

    +

    I'm super thankful to Raph for getting us this far, to Google Fonts for sponsoring us, and to everyone else who contributed to the Linebender ecosystem. I think we can do something amazing and I'm honestly a little startled to be in this position at all.

    +

    To reiterate what I said: in the next few years, I want the entire ecosystem to get to a point where people talk about Rust GUI like they talk about ripgrep or rustls.

    +

    I legitimately think Rust has the potential to get best-in-class GUI frameworks, and now the time has come to prove it.

    +
    1 +

    By the way, I love this style of writing where we start humanizing a software process and complaining about how much it wants to kill us. The articles I cited are very high-quality too.

    +
    +
    2 +

    I'm told the Bevy community found that joke funny, but I was too afraid for my sanity to check on their Discord server.

    +
    +
    3 +

    "The community" is a nebulous concept here. For obvious reason, we'll give more weight to the opinions of people who have already put work into the Linebender ecosystem, but the general hope is to get a consensus from everyone involved. And you're welcome to weigh in even if you haven't contributed before.

    +
    + + +
    +
    + + + diff --git a/contributor-guidelines/index.html b/contributor-guidelines/index.html new file mode 100644 index 0000000..4f4512a --- /dev/null +++ b/contributor-guidelines/index.html @@ -0,0 +1,121 @@ + + + + + + + + Linebender contributor guidelines - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Linebender contributor guidelines

    +

    About the projects

    +

    The Linebender organization is an umbrella for a diverse and ambitious set of project, with the goal of creating high performance, accessible, high quality UI in Rust. An explicit goal is to push the boundary and fill in gaps in our understanding of UI infrastructure, as opposed to implementing existing cookbook techniques.

    +

    Discussions and community

    +

    We use a Zulip instance as the primary place for discussions. All are welcome, and everyone with a GitHub account can sign up. Additional discussion happens in issues in the individual repos, and we also have tracking issues. We don’t use GitHub discussions, preferring the Zulip.

    +

    We also hold weekly office hours. This is a chance to give status updates, make decisions, and discuss architectural directions. It is open to all, and there are public notes.

    +

    We have recently re-started a wiki, and eagerly encourage gardening. While the Zulip does have archives, they are not indexed by search engines (though search is available within Zulip), so the wiki represents the definitive place for the results of discussions and resources.

    +

    To propose a nontrivial change, it is better to file an issue first rather than sending a PR. Depending on the scope and disruption of the change, it might make sense to bring it up on Zulip. Especially if a clear consensus doesn’t emerge in a reasonable time, discuss it in office hours.

    +

    While the main focus of the Linebender community infrastructure is to develop Xilem, Vello, and related modules, we also want to help move the entire ecosystem forward. People from other Rust UI efforts are welcome, and discussions about how to join forces and share infrastructure especially so.

    +

    We use the Rust Code of Conduct and hold people to a much higher standard of conduct than is usual on the Internet. Don’t worry if you’re interacting in good faith, though, the moderators will work with you to try to resolve issues.

    +

    Code reviews

    +

    Here are our policies around code review:

    +
      +
    • Every PR must be approved by someone with write access before committing.
    • +
    • The wiki is an exception; there we optimistically merge without review
    • +
    • Usually we wait for the original author of the PR to commit if they have write access.
    • +
    • Both merge and squash commits are fine, it’s up to the committer.
    • +
    • We give write access to everyone with a good faith intent to improve the code. Usually this is shortly after the first commit.
    • +
    • There are currently five owners: @raphlinus, @dfrg, @DJMcNab, @xStrom, and @cmyr. They approve new committers and can make changes to the organization.
    • +
    +

    We struggle with getting PRs approved and landed quickly. To try to improve that, here are some suggestions.

    +

    First, we encourage everybody to review PRs. It’s a good way for newcomers to get up to speed on the project, and contribute in a meaningful way. There are two goals of the code review process: to improve the quality of the code that lands, and for people to learn something; it’s worthwhile if some knowledge flows in either direction or ideally both.

    +

    If a PR goes unreviewed too long, it’s absolutely a good idea to ping it on Zulip. It’s also fine to ask for reviewers during office hours, especially if there’s a deeper issue to be discussed.

    +

    Responsibility

    +

    Linebender is a collection of open source projects, with a research flavor. We make no guarantees of any of them being suitable for production. We welcome contributions from anybody. Participating should be done out of joy and should not feel like a burden.

    +

    Sometimes PRs stall out, or people have an intent to work on an issue and don’t get to it. In those cases, we encourage others to take them over. We try to discourage “cookie licking” as much as possible.

    +

    Filing an issue does not come with a guarantee it will be worked on. We really value high quality issue reports, but they can be closed if there’s no clear action to be taken, and we encourage everybody in the project to feel empowered to do so, or otherwise garden such as asking for more details.

    +

    Over time, we hope that some of the projects will mature so that they are useful in production (this is already the case for pulldown-cmark, which is not officially part of the Linebender org). We very much welcome collaboration toward that goal, and use of the crates in all kinds of contexts including commercial projects. For such commercial use, we encourage a collaborative approach, where the organization dedicates sufficient staff time and energy to take responsibility for issues and feature requests, working collaboratively with the open source organization.

    + + +
    +
    + + + diff --git a/cubic_robust_coincident.svg b/cubic_robust_coincident.svg new file mode 100644 index 0000000..0d3320f --- /dev/null +++ b/cubic_robust_coincident.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/cubic_robust_colinear.svg b/cubic_robust_colinear.svg new file mode 100644 index 0000000..d582602 --- /dev/null +++ b/cubic_robust_colinear.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/cubic_robust_hodograph.svg b/cubic_robust_hodograph.svg new file mode 100644 index 0000000..cbcb108 --- /dev/null +++ b/cubic_robust_hodograph.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/cubic_robust_simple.svg b/cubic_robust_simple.svg new file mode 100644 index 0000000..38e45bf --- /dev/null +++ b/cubic_robust_simple.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/curve_families_graph.svg b/curve_families_graph.svg new file mode 100644 index 0000000..e0e539d --- /dev/null +++ b/curve_families_graph.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();oA8WwtMQv)F=2NlzV0@>sf4Y($##>s7y#4n?Jdhk#pQ+C#7Mp?Zd z3@_m*<$3L#^rtrdBC$b5rrwaBBeK~*d zEdR&wDSQ4g_Ts>|hGHWy?@+84G@WqdHq-RNy%E{0l%Z>dVId5-u;lwM2Kd<7lhB`$ zHS>1ghZm|Oy*qv`KReF-;{^|Ye7hb?(yLrXG%PHM%6QWgV}WC*mbQqi`vty_=wv9! zm=n0#hgaf{Y;LLgR47DKk)jpSH&erfVuYI+>16O@5#^HDm1r!{T*;RT3EmQ1$0@wg z+}Jeo4FfGH@dk#G_*FFwfk%qp-n>x1Hg)gFH~Ef#2k|q{+$Ivus2fI{L`P_E)MwQe zmr`gMe6qW}51^gL)Cwv5W&FqSdT07&MP8*1DeQY>0jmE zcOu!ZVuma|y+=AVq3-Wts?*r*UdXBeb4-U(v$O|Yi4SEqzg3kMbyskbbCNzK%*HrWH*xPh<5yq#Eb82E_YU4xHsmE|l2dsf zA|0|`FHKx-Ky~u>jIN;GTE46idDF^Nbzao;#PYJJ5Vk+%VBqUehn8c5xFpFBL)lf> zIS=gqJoTI|%)B-i$1}27?Dg~7;9Mi`k+F;go+F0f+k`J{`dsKCJB-MeDr7@xMt9NPZ-k93ABqk5ZOR9AyvFaf)j~*B|vBQ!& ziESw*zb7QbYommCKAFzX=i@9|yPW#tAR+Dq9Yurz9Uc9x=UkIK%%-g z3@=cEGL@(2(&}deecopR&oH0SJfr?iSeUTqcL#a%-Iml2EwvJ1pg0q4M99yuoe=rZ zkMF7;P=|*{$cD#9_(mv&`$=zxw?;TJCn#2B_U3KHp5oN4!SKp(hj7hSjaH9VazjHyE<=Tx>xMoX6f+L3hY{?IqDseEsoDDP zo0Oy;y~|>GG?;BGJ@clOoGHTW-uC-U#Vgq|*?qlSy)SyNec*m1`KXLZ!J*8|-z;H~ zr!UIPfJcTWb4a38ztpx=+)Sm0c*7p5voNZL>*e@o*jKM;|bY#^$ zY-U>~q1<`g&$(SL}j=2Yv*d^xXJC-j$sIU3D@al zkBQXAxh8Eb9Ect8A24q%ZBt*Lxa@eD^Rn_)Ueb7;dGZvVCO5c~#KOzxG^=E(0geHM z0Y9+INz2G^u9K4cUk`l!lRSZQk?SYt4qqp)j-`83MZcfXl=)2#4NKea)BM_To#}Jm z`+KzJ|6~Sarexy($jh|MOzOz(z;B<8S>bZimFF~$Hjd8cwdP$b=P0~x&iN_z%hX4@ z!BD*z!^)ofcD|rz^FCj&=ZeK#yTeDDy2-l^n2s?k-zPR&`^F;H zs#>#sfdIcIbMmBObUN5!2 zZG|YO_;s&$6QxjE(C|iScdTC9#E2vPiT@Fwilpww(KA17zdNa>ECRe1%O47NX;^9e z-)%oc1W}eUEsB*mY)#LnaW+TKM+Ze47p6TmZccog_E|1ym~xj*1mUT1R11%TOWn0g z)zmlBcbGa%Z%B`jO89j@IF5hSwn(f9QF+5ZJT$t9#!%P2dynT=wbH1PjFPonK_Z7k z)91j;1a=HmN$I?STnmb1H&}03It`J?6TT1P3h9*3mtC7HsxYr)cRsG^tI?^u=0#U8 z_=(}E;eCZnh1n17V=VQ#8@VE=G6iDmOoH5Qb~}ghS@8+{&nu-W4>!U$zHgBE$2L*u z$<#eN?mcpRSDPi#%Rgwo5!>=-%I5bQSi0_AG4T}Qqj%O30}njk2{CQ3eqcP{pnKMu zl1--UudMZcP){TgO6x*pS ze~dJHySO+SP#x8m%o7?rCYw+EvY&_$UW!`m=4(aQt)M#el3$mlJf1UkdbTdRK?D3Lk30$;`r-A z8t%3e;qxlv3++D?Vi|bG1-Vw+gCnCO%ZewB+2gN>IL!)e9<^K%A$g;{RW;xo_$>Rl z=y0Y=wfrYdef1yD^p4uR)u68t0Xd0kaYJ8Ak}77MR<^bqmgcMqtRL5rx)lFWZOR*_ z%%)5zcPV#UogQ;>D4$=QbF*6|Sd9`<^in+TUf1iRF7sMmvR@NAW?X-`^sD0QZlX<6 zjkD(ZmQ25|aj)^rDE(-kaHsHB*XM5eBGe}}OaAkp=juX5d5&}4O*c2zpB#IY?z~-E zbEWg-*>i0n|HCIZUR7sF^^(eYk8N#qZa0H^OLY0*+n)2W^7r?vUCMPKb-9OThouWz zd*z4EU7kO``6im?kf=fT9@lLY=UM_3v)d@#&LU~AqmoVx(B36!7-AeTu!z#M1_`2+ zuAc~JUOOJOM=9_U6!H}FC{;m8%|>Z~-_dZ{giiM*bCph2`%)$ zKWFgr$=3`%`mo`L-FTUZx={KZkF<4TTa>nONOaeyxI+q_;8P{o}F|QbA9{woK zNia@aT^$@?3HTm?ROk}zSz>>(%0oc#N89oh35_=j3wfHqc%={{5TCZe>WiBx8TSHnV5GMK{L+h6=|;qWtr( zR(ynRsL#=-7v{6Q*}FZF^bCg`^Cs4pwG0XVwE<{9ijgR&VXvpjgT2~^%fCFX=r+&H zjQ&bXqssgI;&yMr;Ig;%sYzX|S4XvmDc(G7KRPldwT$Ta=b=s?LXtv5m6BpLc}UpV zB(;7t=f|Q%`d*k21*V6E%h8fGu2Vb2@dAhSzE-tsY1iwwyM`r(|5+UccJB%ptmtlH z(o*AGXmz}H;u!Pdnug9DaZO(T3o|2Ap!KJz$hCO+ta9&b8MsVd)f*(dC{#3PMqGDS z*N%AM>e8C^(dtV^1_n+6TE@!%l~Xt*rwljOCwB%RUG9XI}=JN=)d}j&VCq;G<&Uuk#Fg${=dx|~i9(>{ z`pUv$p9q)8m|BC*AliQhrxO9)S7n=AQrEe2b2H+*cuR;76(9_y!tgGyJ)4erfo&02p0+FRC8iB8jwGZ78$_6_d|_jEpS+tN z6T8T6)3uCsQ5^74ph;4xeKU5F_s8Pgc7O6-V))YD<@Iysr!)V54l+##l!Sede%R1u zlAdwoBK~;40Q!ctOz7k?xzvByK5)J53dy&wj~6d=ULBm_tID9zGaH+p8qZq2b5Pqg zD1KP>U$l&Y&@$X^F1WB}z4N}%r3**!DFPQyICAO75A)gO!Mqv&wJ}N#8k*`WA5p8t z|D$vX;QE(o!$18J7Cw>C0>_}R8T=12kV4jl!nr^X?Cbe+VIwOm>+eyU?iYa%_nQW! znGGGhqMU{LA0KN3QYke^_z?Ub+Cl>^!>>-)WfH%8knW;bF~Oc_8(KHA9bG25j2+_^ z7JOLvI?67J4Vf$h^h6t$>9IdQUsUN}&f~iO<%_W?->0Sj3`L-Wq5R2?MN*L@s}g~8 z7hRR&8vsVOBOOgm0fY5koI{5*ZM8=FsrBix1zP_(=1br&0$&mC9j>p3x@?&UYtp@# z@xS6{taef7mJ!GX1N3AeY9p6PA%{WUiw9i*HYh>z*to%+~PtVxL z@|Mg0IYY7=IKwEpW2yiBU(}mBd7J=*kwm5Sw|C-1Pfm^o>U4$u7l@(72jl36Znj-vn3`(2cvQlh z;6`z0cLeoZCU-=Hf-ZXE9$*PU#MVWkz!r?VcA`^KwB-^%YhRoOp$Pfc)b!!yxxO51 zyZLVYt=Fffqy8k$coX-c05PUnfdN`i;*^V?A?({CnQ+6qV*gR|4WLrt#wR_AU%y0l z1e53Vc-Yywbxi1XNxt2@@}F4=8NgxgER_K-?>oEF6O0=}Jw%MO~eI1i`AZVM_Sjob6|5d$spn6le1S_Wc`kx1($_DgVImd@s;n_OCB0mYg?Al3!4r=sNT9r$(h;Ap>!-_hdMhskM!dQ!@j?TRuL z?2Ce21QY+RVLvAT@%+WZvI^Inb+kUbxM-d{(B+K1Jyi_WfEnj8IhAYwo-J7)lJ{Eo z!UB)o&hlYaq|+Ks^t*SXiT%-w7q*DNtpk!oIq1e|tF%e!mzCQ_SA6>6<;67zz=W{* z`giYkXUA$wJ097-j!8OU@g`HgcTqr1#0Xt{lIj6v%z`_)+c2A6?+Y7?9sZB=8B<7*Gjo@|}A&L}_O1Mcwd&m~n__T(ml; z+Q(dpQjZ;rw;)U-deD(gf6;O#F>yIC)4R@s8B6T8%ClewP08*<;6)KQLn2r#PD!EL zocinNnkB6a#7wTH2R#Zl&dZj$4)|2iqcC zyk839M+ycx{=HLV9xz+@&p*$fzna}%!nT`jx8f2O##LX*X8ZR*5T5}(!c0plGw0_m zv#=Ub5B5w-8aF4y4w$j{wSMX1Xi^}67L1~-4k7mnBl!eZ>J_Uq{30$j-}w)CK(GKG z=nMWLI=iCvsURNZ@D0-iMD)7>1n}DPAS?3Uz_ru!^yt6zXcXA`!dSsNtE@tPOtEo! zz|6=Qc9H0yJN`!rBOoCRRR6`U*>m(n(GrWeh@R_e!1C%nev}#g8^bIQA5&e>EF_AL z0l3;w7njZD?CeK&zo%?flFr@USZ{F9MWn#30tSP0>!ysf+qcb+iPlw@Pu7+yy|4oz z5Liy>y|>rQI8zvbPqqSRzg#XVt34w?CvisVB;Iot_965CM_;M{1^8a8XR76VM%zm@ zJNt4xjNEJTOR5T{q{VT^NCD z0(sR0d6c)6pKR4x8N6}Qf-Y=b4AQgIxFNMrJ^mFBXTpD*Hi}O=B-0?5J$Ham1Gg?Z z4ulCXeKDtT)fv)AWgq!;%nP&Y0KNSELGZhpk+XA)kZXz6Wpuapk&&@2@~MamLopD# z7||-zi0JdoMV?-1e2_g;$A$QaQ4Roz>DJ(?v!33kOeYy^T~1T{+idx@Yd%`moCk|Vy`nfxbF17U|ALDTtrqwo*>KI z>L@DL?V@T}Uh3J&9uYYo?&P`bu8ulx9v>{_uOvl9Mv7oL&sQF(sXRm)b|nfYEz37X zvezHk9v(kOzh-rk+du#8FB?}82b zdV3}Wdv@L8yB1$0kID{(Ei7+{Sll0^k_zZ4ajVO-tF9`;S|0FLtnR0GX}_#IRc??& z`*6DQ?7?%``(D;s5dVFCkP|GWNQz2M_^`X-GRg7rp>>+BSgh?tgU?D-rMS99NP|dL z3R?=c>9b4Bt6j08_Xc^Ge*P%qYRT(R2^_D=lq&mbcdn7ic0f@Qw9tOb0vFOFr-Bdk zZ2fM7kqqPYR08*efog_72`b->du zI3olmhnw>Gzn*!aS)4H6$wWvqklw-yz2%+S5N*{W@w?nBn-o$3BtJNO>$5J8{4<1p z^vR6BQn~mN(4}NWRKwQ;VNXZP+NgSL$P%s&Ti^-GrgdW#7k`J_Tg)d3>ueRjNdn2A zWB@W9lhVeEw-PJ`zR0(Dz&&s+pj8#o%3iuWr8@#irmR(W_PBP+Pu~a2Q?l0!#m(3w3D=adbJx;Yg1;qB4rE>yVd;r^#Q@0@5V!~oWlo?X7LQ1M) z^YtMk2TJq{u0#L5Y#@(MxE{UKSRE zBNc^YD}jBsSSZFM09jmob}Cv{K`6bNF}{DJ=Vat?~fq%8*a*yn%`7bSjT< zD2+tBchl+coPZC_oM|Sj?e6jwAm=PU6tPfgdz#>NS){n*@(4o*{Tn*xDUBBoDIsex z0)}GtebQ0AbA6qSOR)MqeO_h^bjwb#*xc=zwy2)zybgM+(odG(XcszT)MyZ>z6=!T zr^-Lqc=1J+trsbd>|5+*%gnBjASyV6#LR#GyBPKBE@&P*U`r`w0 z`R2#hJ?|$=_&7Ea$Q9%^1gd7}$4uc125LhvLj)=lN-3Qq*|)B?4NATIiib>QgE_*~ zu&V=&!zk|9AOt4AOOXJ)IwCURvzK2Rr;&Uk(dKeE3^NOWIP?TacoU4fF@8GWWML4O zg%babm=Mn9zE?;hLz5jz&FK+n{N868iRx&$M~Zrawl$`@uDrIgcl)!e=i8s{|fcvwNJLTmyI^T(Q{aovFcsO7_%w&KsLGQBrd+p-nEeh02}PXfsxj}_iLM?Y9@J-!n{{_&1i z(-%q%mAlBs9?|1Hn%Hmri4QY(Yklbr!XKsPn8Ly7LUO=_k6r!@@8zhG&vvJL&e8{A z?UNHl8aVE}4pJ>L4!e4C(RR1Y0@Vi>jgX_q*f(JMb8$NkmC$uG`ELT4g~r)j&^+~E zo}=K};ZNP&p)SAmM+-FHIBARf1AxfzPWXgugPCKzVRg)i3u92Y%@=rYlGrB}Yao{Z zd(dTbwnGxDRiJ0i55|yNu!)CV51q9X#9>OGR+CP{AP$!I0on>-cv8mxmN#119SW&A&9YOAAJ)NXO7IH?O*>Qvdgi_b5-?!Imo)wI zgbeC3WKi8L9kC`aX0GDwT$ekRhSEQGaZPyME%{tRPelgK(j-H>H-(2=ez&N2Bceul zXL6G+m?<9`cp6(eo@9Ki1xDrQ*l_jQntUy*4&>CQS(97Hybf2&-_A1hh(z$_Z|$?! z?cH2sD)0by9*E4z2wV|jI2cJe)q`G$PYECFhpDo$SVaFhELS~`emPm@2xwPB&VDVbo zPx-S{Vr)sg(M@mfd>CBXeT8%pSPFhO1w*WjCV@h=Kc>DmwkMQ8`~YP%1UzCs&_SHQ z4i??PFY6dHI4GQ5*7yn{gjQ(b2O?ZtPYF2+?`5wVgsWp)LHj}VP!;w(8UQqBHq8w0 z&i>2iPoU8gP*gSUKgy$fj^;(YXun7hX)Ev5*6jS>c2pN0K z2qE5zAoMZvAwY944T|z*fP0BANS*p0cNS#B^wYPR$GjJlgd6zX(}9{)>YFGP{>Z?b zMz9Io4=6riif(UQA)M*}=iqkA?yDsrV4iJ_h{)neX`VULn|* zz6_VK5P#&RH!=c_5wDWXXA07ay-+?p!R^G$@`?HY$Kfvf{d(=w%Id*G=zO;cx&xon z+xKx$XyH)Y(XIQlqqX^&)Du=4hWAMZOFpQ8(o;V3{_ahJq|NvBgf(q{q?$B|%gughxpqoJw9#VGI17Mbnj=Q#vLGwlITEAhLvzA+=SInnrBVfI$fI=N~fMzKOR4-CVA zJ-H!}zTp@|J=L|(499K_`(3TE#P@`vD`^mtD!G#EDf<)_8ruE(Vy1Ei0hUK;T=7f?OCG{a5)%+AZwHU zz_M$1`){&rW_!uQ$Rf9ElT29{j?1W(Jb1e?_PxZy%)xgB=tgi&*ps^+<{>hZi&jeXy7>EJ_X^eilvQEQMM z5X-q8g6MIBIA3bWG?V}h4R2aqlV_k;ZI57Peu$PNJp42uz;Rzo19EN|7$)t1{v7U# zlDT>9t?O-e@Qq(r`X;l0?+8-AMEEAWoVk&@{l+YtaVlA9rof=!P#62b2G{Rk&79SXC=mb&|G_a`>eEPoQ&z8e3QN4S*A1Wo2Jp7VMv2j6wls2c&$41j5rFj@&#*mnAdpfE4d%BqDvwE|!l)DG z22X`vX)c!DnmGcL#UO(A{WKADP<=i7L*NB0Ga9U!n&K$XMF z$r!in!Ikc?Oy!q9%ZM)k{Y`O1fXeHA-T5L?Y8E7u*xFop_ptNzguY?>t%J!^Ks9^Jbv5h2ek+j zsOsOH0cK=F%{kuqn~07H3;SbaUsAp(m+66_qJyZbf@#o2tl5$Q7tTYdSRmo^47<9- zpYCNIyc`m?F;F4_yARvNWM{oD=V|fYA>S`FxJAff_AUnb_?MBXS1Yx9DZv#ZlS{o} z^qO)EBDZoyP9P}!TXUK0k^75M1}S~EAf03*hT_uz=iZv_Oc0D~?CO}GGwQ*Ox0~za zB-PdZ^S}Yp0B)d>xi^PtgJ}W(@TmemE?evEdy}=zxuw~G!i@O{z|bu(D;_9W_(y^5 zYQV_aKGHq6)Po_J8zBiOvZJz!<<_IOKY5hz`Mwm;JRP8euGN~gwr4#tREANEZGHfu zkFU%Jr4~tVp$!ttExR7=Jv(HEBml%hU=nG07g1}3j@kiq;|;I|d)Y^84DzzM(adV9 zH~r32mD`t7wlSR9k`aNvbO-vmMb_gYn}2r4;{Xe4+Kh!D6rATKe9DXA`Ued^fkW`G zZlFGXKcCX|?Vi`~N_MZ1xOViacuDc-fz=Db8UWi&ouOUXEP0(C8P*%6cOG1*BE`1% zqy<{<3b}01dU3JfgVBoSz%oi#j}3y)b7$v>MCZoYbsxoN1a0f{?#{~aYq>7%SW4(* zefTfg`SLBA0hokEsOMQ_@&NhV1@gfvsj4$DGwXX?Q$fMwb(W9*8R6?l1K2+Ox^h7? zPUB?TM<;Cwz>ZN+^U+FzVvFR)YFvu76%1nwj@Eh6MZslY14;E3{HQjyP5a$7Ta^Cg zOnJh_#)Ikd?;)6d_9Dcv8+#(e&d(%;MkVTL!Cmr$IFh>TlpRn)GZgk$n{1xftcQG6 z+dv??WifoS2SSr!D5)bg@luK=Zl$}vno zQ(XAw_BS2umIstd;&Rju+xMKGj8z*P0z;8Nh&-guA?FsGVmrO3Uf6+PngszLW7o!~ zYIxioqG0A3-w?;;ZW zvfgvTOVEg&XuOdbP#)%k;4Aaj2}cgj&QUQ5qsk+11_@w1#EP0Fvn+-8m`O~~E}cv8 z9!B#Cj%jDEb>03K6Lm%?g_V^GAb@Gd4AqkC6ude1%~5-oVLlIZjf}pS@K6wWaQ2a? z&^ra+**mRaB_n}%9^hgrX~5A{13Hxj9=}_eQ(SyjI(+r;`B~}kPoF6Tt5^dKYKGW& zorjxShOfurPRv^UNn+tIs%^YS5J6a^Pp+2(@of$uymGzvXd9*RwE=;U*YaV4ELq8# zc!XGR-#kqZYKlW!OBlVO=;33e_PaAlRAJF>yE>5=3OdCwnxo1@flm%cC6$=Th8ixq zeZaPGLY$@TQ0cuaSDR`v3~u0Fi=^PUrLA&}`dl`684LoCYG5Ai&n3+s|2e#`!N7!m zjq0^(kDg9guHPW2;f6zuNA?favfFtlN%T=EEJ2E(2Cw@uU2JhPvFgnNNDU!B!nnS( zq6MHSVP!H6E0U2WG~~1^&nRZDst}@5!$)*6pD=mM<1IqML3HPN2h5w?RtFw3^=cT9(!H=I z$7)NRx8OrU(DakexDd4VRsQ$`zbtnYREcvW?v831F1NN;2z{@M*>-tt`3o0>B=9D@ zZbfBm{!;(I_EQIh>kIA~*Y%dSKvh^hC}diEj4c-Q)&xb*Rsw{&QlhZiX+sC2Dv}`f zWM|lVSmv5JXge3B{w=z8myJP&BLvD=$X*|O3BNBH)sd%_gZJe~D6HOA z1<@^wIQD<1E5${(dfF?LmD&If)sZ0RRK|XtgRnHHRyGbd3+fd$+cwV5b2)9gDs||a zIIT1OR5SAc%)bt^`8geMq8tngiCcNGz37k^1!xVAmAl;5YE${FSPvvJKpk5u%Dd+1 zDXQT9(uA%;N%Q*Gw;SZJZK9XxGSOQf>%PKRPdmdndb)d~*q_`d)D)9!!!eJ>fk0qg z3KT{ZY9IPk$(}i_)JT8>XaeE%1~-ufv;_BgPeT+%PE@(ef?Qn1qfBz}985jPeS5P5 z=yYEQ4C)mRt7mF6uzUGIZ=)Y7@61bk>q@D)*Ib7-oIC}ClEUGZ`V7y7UAM9x64Re9 zECv?7R;ySjPyz0*V`cPe@|H@jKR3EhCmdMCY%@r2LO{Wad*bG@J|SkeI>MipA^?S_ z$+Ezk87`{XkN@rW`KetyWc=l8%u#8owp{TLMsxiUr?C_{3)NjP1#VWY_ifpd<$`0+ z4<=}oXmTPaN1H>#DBwkcgY*MY2>(ZDSo?RynwT*Ih5GJSPS(;ZqK7bk)piz+!+L ztUqRtMsylWVLWco7Lybs$V*N;6Fl-ASUjlr<6s?tB_m3m%~^bw?0r<^CKM{bZ0>D0ei;v`3w3M>qWrdT^*P7sp3BikJhe3WTTi@o15Z38uumUrB7Dg%DBDfj z?wS7cFXmiHA3O7C4(ELHw5D&*hAc?8V@^D)!XwFi_Qo}_yZ8YL$IAUC1NVb?2hJt& zScpH{8>r+NJjhjHCcgD9hsAcB%yz`xFK2qZy-}8vb^R1>CSbpl182E<#2_kXEWp90QzR5q5`m{88mg^0(EG4vI@Ol&}l_nM`CBs6suGxSc>HhmO$?Vbo zW&pd1juUCb8B!!8g-n{pr?DJw%iV3b1TK%t{x0Q*_4UbEeg`vi{r2-VF3MOra%TGE zTzoWHl|6mc!p;o-Q&E8Yt;xnxetj&T^_YaioVA^e_5**sb---{cePa#uyAnLV*B&? zQu$?}1}_9HDxZ4l>rj~}ws#u%O6W>zrx4SMHB#?2UgN%h+l*Q)tksbVTRfQ%Y$cwRyX4w@p*5tw-a4_zwNBgVQYp)~O(@*6Nz$gg@mpfV}G4n@efh)VaQi)tz zVdFe&QPmHeL{=AV^u6h-Qz%H^(3Zb+s`5-Xk=^MxDW$k@*Fk%6AbNsgIn(PmY;juU zs%b{%8~u%9k=H*CbK>50<1r2l_?7inY5dHTCC~PaJ3xpqY0?A7)&M2pPY4M%U zdq!$!H)eFWIKg$_L?*^pdq?8@{BVZ}E@L}qbXJDIm1Ur$8`Cu z6>=0*e;M1-dk}5SNn_bgaw9X(OYz^(yPRjry^+!2v`x!=X2E|!IJWQUStg3-9q2-V zk~8^6Fz$XypS_L7C^qe&NW7iGkG+3e!~_TsCf{QSy6&R*C;*4hG`Nw*`Ht9 zYoicusMKvWhz*lNn_`|SaJNyWUp?!~Ks@kq?)JO-9Z~&Gnntk#m?b8yd4F^8f5PvJATCMHLVIWy^LW)6V9066l8A5kT6pHv_%Lb?vmSggOi z>MMB91IqpIcu+ar42ePstC^*1b3DCd+;s)-nh*#t`fy)6tS?TtU)|jBPjb|)?N8z-Ebajn7xd={*$(V z5WWG}N=6)?HQDF~u-CCE3u?&Y0hR>Eh~4`^(hEmTg80&iAW!!2d0d)Rs+PYK^ZOZ4 zEvf#fAz6AC)`+A8C}jvJbrod$>1!EIm_*11L11uW4pPF*+~^47Ee|OPkweSE+>YaH!r8)od@@yxhlzhR^idp zrGlb5!O)uC$UZpt`@xmra?(t#(l;5x7zUu*miCea@4H~{$m^beG-a@NK{zvL5s`;j z7xR|V5mjG5?^nQZ$9?G~dB^LxW`F7xyNHla61XSm-2k(}6;EE*v-ZEz=JOXp%9DsP zRK>8Gzur1odUA3bQ0}WmtSV$@5(7O~HpPnQmoK+x$V9!i0{lYp2{^^}irboIT|x44 z=sl=Y7rZ{uzPwDew)numiD+-7e7qfm6;wPE&4C27(=B0>yaBOilJrKh!K}I^NavsdEEYC0F;Vj%Q;@ME*xT$9g$P>e3N>Zp^f0VPnNUu5sp^-%)e{?E_HxrIs?kU2NiSm_BnJrsKHjg*o8c z7}xg`-Sk+1dOnsUkXm@(B#>)#!M~l_KyJ8JSSr=cD>iBLhOL0uWRMlvJsr^2rGZ%? z7M3RYmMkw(91x8IC>(l{WjWWX(}WY zEG#T+*hk-&-UXvr4t@mjVlV2xj{(=HKgKA(FN?fhch+{-*Xe!Pm?oKDhTAEy^&O2Q zlp!x3MEAXZ++*!Jm<_HH#P^^S|Fm4j01!H|A&(^mCRK}iXr zaC%vd+is^wUYZtPbgG`HnRpE)rR7V88{SA(w5@%6P?=kqd;ym;bGhCZQef^L||>iC5Y#m&?k2h8^#WFk<_ViD^H2QKR~f%>>tfQ zRnva}Zs7f%mv`ancPns>9F+>Z>k7<2GoWFOTz#$Dr)U%rkj;opP4>oqUE=B)v8q5I z`w&-3{&uk#;ix1;5owdVbURE_Q@bv+^0j}Ce);?aRKx%}OFLN)1pjTe46bl!<%s$6^NB-9ET0G*%A5|(59-Q*uAfwv{YQT2*%R5ZoFhFt=& z;~7Ih%Sp$()JJ90AGHG3@4P&Ei42BAxt~NK7yMH7Bs5JQs1KzNVtJ!=c@k}BEI~_y zzPR{OoDV^fEK^S*KaVe+pPjE^aU~`rO)E~ZDGz@RIijaUfMK!HL9#?okUhwkVKGis zgK-g^9Qm-`CW3$5Q*Q}lkJbi+@$;Kv4g$}n{PO>q?PWC@4NZb%TkON5CIE4&LxmMY-2Vu&q{ol`zib?vB*H$9-(vZ(7Kt zD=d8R<+q0=8?FHu^4z*qYC?mIlp?2~3WATM+z}Wwz|_OJIu3Wl3ayC2x?1=a(wbe902yCI9xYOo@>|? zOaD;4e9Nxlk8B4X(AwR)fJ-?h(TTJ2zdXidgAQ>qK;NcRg@;;B?Avpa#M{-e5*$hP zkq9N&@>X&f5ul>>cblfoS+kv!QBbv?^{yAFezLTGJw#wqr$W+w18wc@pZrJMy(hmX z0uQtrIo+-jKIU-*P1O9D72>`;+zKRC0F@Lefr$DR+N8^yJ8qvhKC4yLa)0DPbz*!Y zf1gdesyQN|bKY4s049J#RN;28wZK5&w^&hPrxhX0 zRJ40BaNZivv@aO;(90YIbcw(G!K6C&&-o&3zG6e(CDx)NuJz$N=_~V0skhPXuU6e7 zz+rxn>c#SBsdc@Ws9P!m*n;yEsM^>sGcNi4`g*!~Tt!?DTU%SfG}+CV5HaHW;}2!v ze@WCBW{BaGc2u}(N|NV6%Y0j){Ozp_KZ4iat5S&te->swTLj$`FVsThlwOG=Ht#Rq z`TjdS1mV{1vvZE!Qmt`ED zvJtRXXN5?Ea`hcDtds-~P+98o3Wx(FQ`3rF*|i#yT*geJn^x8x_=wK3J^7E z>d3D@j(ysmYNJ)=ov`YLq#HvSBgy9=RHpNegCXPUe zwJ~}_OA^IL7T~)7G%5CeZ4Ne_!-r8!_yxaXz>s;`GIZ z+|R`og7&C_&tl~*B05`}<5G4_esA};WT@8m*uFjM4hUdDPS8$|rL8*Pb-UA_#)Ez1 ziJNm>+jj;C@}hq<$~a3SU;=}W90NZl-|jI-B+NeKiIbam z1&IL@7s;Y>NIAf1X9!|Q{)i=E1;IW7nKuIm$x_-4&)c#Jy8ul2J_4`%~e1&+5h zq#L?}Y+fNjJmyXh+#5}ZhC4}tBpe^`N~z}0VID*v$m~y)dctlPaay-P$Dw$sr1rx) zSna1+a-R?#Ryaqa4&@t^p#ji{_npxFr*SqbNJzeJs5)Nw`+os^wBn*@fL3`1TiqqE zMURQgyW_Uw2UB`$M%-d^~RBvH$6Ld!i$YCwx)axaN8Yzvu@D2=^Yi0=O z(_&6TW())9eLM4qWoohBKy6N$((0`|w&gpu-f@|&x0@CybB%Z7Z(G!RzjBI(giEA8(;m(Ac)HVG*Lk7+&3MEsdAzs8J zD%hpz%@US-@74I2g6JPYR+`+Lc=ue`AHf~l{uy+Whgn6ooFynbKnE!A6;!_J=?0%mP*P6ABGMAh zlFa_5>U$pZ7?VK+d?ZFi_yKAyI#B`bFzvV1wC_Gx6^+sXv+$unm1;)buh{t8vgfMBRtMDg1-6MLh5-(2DXsm@0o;6RANjE-nMTq9h&}Sg$>! zQ%hUjJnq?AZFJy!o!S>FNOLV{kF8r!`{1AvcK6Pe-fpmX$e}DI2YiVE^Mog#zKQ(* zN7Y;SRq?%D!*Dz(ARw)Xq`;v;I;26myHPr&`_L&!cXxMp2ugQ%N_QRFXZY&xen0PD zFtca&zG7W#tzB1Vf%=b5etMq)2C#2-$dE?Z-k=u6qXWSl`QxQH9_#Ih=cB%nkx`w~ z5PHfJB?f>pq<@q&N?+WR+5%C^BnVAtt7V^>8oL2b$PRSOU!;o%1d7;QiMQhtde+vF zw9zUYoX54*fLr153|D z#u@tQd-31qN}~83ut(mZgnIyM%pRu9q)xGp^-9x=-%EEoUKT08ega6_&H(UWd6>!M z*6+_!A&Q@~&GAGZ8)V*wZ|VsnU~U?2dIQEVWP z{H*|lX|`D2@{q7)D>yi|gCn#R3d@!%KQx*Bw}qoE>BviOB*b=CBI%jkzs6?tv=a6}01G@AzhAsz}xS5Pq`-CBM#IqwO^2Tu&NGhRB0@&#C8ATH% z5i(}E#J^-9KV8es+tso0<;Fa4hWq^W8M-yu6lm zOOm>5o^lbOMyNI(L3kNqsKDr)ycDTD{yhK3tDoh@(XTIPD#g zdX;`*!|t{IXd&CXU^((!zU_98CfiZ*8*7`FKZ)-c4Debh%IM|gUI^p54U zk@mq3wrOI-vuSbMnibJSB$WpQ>)Gsnjl?NutDI&!^^+;CJ~2yn5#A(4FNdj;j(!Is zlGO!ZqXcBim<2g+Z%h-cqm7s$~IkXx=oWAc>L-`q%1lqZ{MC&w*Q zuDo4Fzwb|bh~(jNr&=i4&ixLe55lnsMx2fo=N{h?nwzxCELZs_CFbI}PAq*;!Gt!%NB$*3PjH zJ-e{pfgyI%O@x(8qoMz%?#FfY- z(MA)oL<7kRLyTgzExvb4%BZIrLkwtT$%1i5N@M;HT#z0#jQTp$q>7W6L94sZR3}rB z)7YeCk;g1JFkTZ7DHFtzm-`|WJ1*hpqkCHW#l=Jh0G=lqw z`*LWps#ZDZ(R-ixS66u!ABesGLY-zx`c+bAyBw+ZQc_aF_%m8?Z_OnO!{9ojWbYIb zk${4INe8c+S4h_Yhiq)|jR8b0meK04yJc_Y+8xr*Cf{zG6;;A;b0D_$v-&?o0|Tpr zEgBH9Q~{Hzs8n)IWVwzZCOo`3OJH=1Sb^iAdULwbv(*<3ktbJ|m_2Tj(BPJF<_!Wm zPOi-95vwt30j|Pnv*$4<2r-sf9(Ae?mLZev$SI8CB{*|8aU&6_-<_X>xRDyLI-*Kz zqjAIEM`!^{vSrqh{{U=$gTJi!GPRcjmSNfwYO1=i^b&;ua1budhgpDtom&kogD+r7 zX(J)LUho(mL1x`9wV)l~c=U~T+f?ATpR1390-7;)3gh*Zf6$vau0 zj3RUoJ>&*;ioZB{+8$foYFy*SWaFMZqeoct2H5zeYNFz4Xw<+{N;QLR;0RvxkU;!3<;?fxZHtIRn&H0o>n zL)_Y%T%ye1%0P`TjajVUmAc(+lwx9nn_CN)PFHH_4EB}*C&1MKc!@8+EwGxtA!iW; zgeUss>gxIyQp8-#;RnF>YCP4e?S4MESM8{bTT)j?8;123wbcZdQXbbkU|9~m0@TkD z{6dC>R$djFIPi-a>Z%DFNstw30Eh($*xfUXCOFVxlVuK|sIdpo`y4l+IynsQ;9wlP z-~9l#{%>|hN=K8AM@z01=BDE|HD!m;VWA?D8lXlsr5?RES2v)BM-G-a zj3)*(7xw6#sNGWcHix`QRMl|;_O+sz4@G*C^(#;+;?8*hk{);DIwvsG2381+>eZil z|D}0OM`ipSKUGPM+c(Rg*efgh=lV?`-d?`te*N7{IUX*dY;;#5l`g46(VH}2Sq;M~ z8hJs661az;dJ4DT_#kp$D1;dZpLisX#q+VA0KNM#1=ZSQV~O z+9<`6k3^mbCy4|(Kf9UhuNbWW#RBTTWPk>AqqS7FpJ#ztJ4fKrg=9HXV$p#yTAAAs z-2ASxN(wt-!Y%YnfS8bFZ2Q$GBKK<~Ai^JkE3_KSa=RZ8?J0m&F+(;b=iB`@fCHa%%2<6whDo z=?}6F;b!SuF29SxI|W7-^Ub`C-}%aN$(Cpc&sh8-Eut->dc`50 zT!g=~Mo6|iZ&tfxpIXZm778y*iY_Q38E__|7DH7h`St!fV!f@k|L?R{4_fChl|{=W z+dgiD^D*(ZD{_pa<(FU@Y803(hY@*PXI4RMxO8ydRl$Q&V@!jDW4BGm;!WwG#hMRy zfSfG*YGHvCO*Hl5Xs#M^8!8vzk6N-*Cj;po3ge@bA7bhz3KMh+@(v3RdChQE|NGf1 zK9W(Tj@BIkM-@fVBjJqqPf_8+X-*ST3o!Bw2&jw0BP3ilG%|)wekXQtW1TCO`MA&M z{+=~zn?Y&XYl}{PtWR9Ie1|$ju$XgqI*wXrP4&6&tx_jCg6QJaykmZ=a$V5!vAWg7 zv`BFu(4imTEU9n?kqQxnSOrASmn+jJU_0&yS^G9{;TENw8m&BA1Zo>EURA5*7Ch*u zeLLaTl|aYxe{m7(Uz0t})b(#dNkJ#OA_b!+9+=B@qCJo0IxQ8tb-OQWt1@B17K9X% zyuM6-oP!h3_eQDJ)h#&WL!iQ@wUgAqhnlKZeERvI?w}-3;NS@nagZahB+fPKa=XAQ z`pnh;C@)Xs{%|=1u&Pt9l^!^)o@a-_8zupWEkH|7Hv9prnwI(K!~ZmMJ+yZ&nFawO zfMl#TE5k&SbyaCNNmGXZW&_BDZJXiWzt?&)g}XvBqE&|YvT4Dw)EIKCjr|#)=4#zs*{pqWX^^<)cQ_xJpOD7S;sVUVak5b@B)|au_rI?n9{y zy^NJV5k5p}-FY)59!4-7m;dLul1tHC;) z5}$Ikbcoc3sC<5esZyO4nXnc)qaYoJcHFXH4sztC`0!@DGI_@4^{XVM5BT&9+;y6= z@P^^ky<&0VJa_3TPEQ62zontkl?!?dznuDb%jDGbg} z-BgAwDkn+FL#F$wD^;^E4dqpLWBZTo z)7HQJ^`6Es&9C7$bRGtDlU5^^S&!32uU*@xYkRwg>&c#hE**F@vf3cfJq$PMQu4;Bjdy7n=WGeCw z0Y66lOZ6*z+rnt6bl;b3Vp$8$@{HrdGnvtz0L}HXUIxtq?x#$KS$gS)mNyn1K7m4q zz~Q%%c10Kom(^&FS-S3(^KV?hV-H)e2HvnVVdH$|N6Gx4;}b;f^#oC8pMf-tuAdZ= zskF@ZrcTXW1lRBH3&TfXl-0tJcxq({^K@Y3SH)b?Dih{lyQ?qXAs?+q-I1NXl!fJr zARdE(HQv{{5K!egEq)1b#~#YQjQm$9fNStF?0{D8!;V;IPlj%@3Ah{B+MP9;0re=#`x#6L&? zN(pi0%G6Knu||8zKB^pxt(}SvC@@h$yWQft$T;>Vr8WH&@~M}GDg%9(WPNor8j0o% zT%WMjUXr+pLU>WeZmcaD1juB-d<_7T!3N$bmMWm~rvsq&-2xt*)NBo0CV<#5fbt6U zkO@$K+-!0>vZ=@w&dg7CDcbElkM zzl~H2j(A`3RoA&J79Bs;lZU}JmyMqSR0zi{nC;=6e$yH11w<&nZsNRrr3vhl*$2_X zmp}~a8y!`s8LXi20N89x@px$o2|+R~;=c6PdQy$tsY;X;dgVo`YXec-f!=EFT%Rp) zD96BM{a;R?wP`Vd>Jbczx>V<)J<;6q0F3^YFn6PWrbGOrUcrXM9EAgoZG|06L3z!W zX!RRg(~J`*^| zAiOFpUviOjN2bkTwO`1#ytaK;haB^yhenRM=E#?r=Pg*@$7UH*R%5r$a->GjjO}nA z>{ZxGX!ffM7aIS@p|S`^Erj+B-I$2vshn=RUqTs+>EQiL$Ll1Utc{T&;^=ynQKX?Ip5gKP12i1N!aEk9 zmOM02Ka;$iTDqx${#0gMA$|%!Nm5YtP>D~|eTZ_*CWE2BX{x>b&m(tHJwCY7 zviDX+cewrjY+y&y^?rH=%dN5C>xMVhQ1r&eW`$J;|1vKatC}}#-jd-FuhWe9u*SKh z3}nTI>;1Ed5TT|S3wWzTvk#9oe z?}f!WxwHjl#6PQxKqk&=&wmsU@*+rJqmKo*`H&VBYmQhAVlP%4SrKO@Tkh5NtBlnh zTF!Yh*7FR3AVtNz&om9^8p;{YjA1^Sb_hr6C_ZW>tB>09#6w zZ=(MQ0Fvytdy36zPxfLdytEfvxXeQ-yi$`FG-*(s?u#i<&UbV2R0zfd^c|v9{WCdE z^@7U|Xw(!`_kZ2VcSM@mXxTLUeBiMBkRt~kx7K^KiG zcAW02-SE@jcef3tl{f89qfR!A(41`>*#Q&X{0u+YbpIn9gPTdqGEn^kmz5x4 zfZFEiP}|=7)izPVwgiQA!t7i_fJ{gwlnPb()S+$EV1?CT<{VhIdP+X|r)%yi*6i(` z+`APY^3yeTuEH6zCXJiCoh(=;h%D)=Q2pUICS7d%*=l2106pr1&OxrN;6yCtGmP^? zaiB+(nt}q~s`kqD70#1))U16KxSqRf$cy&)QTWz6lq?`~S>;LNP&8S=9=AS##}Q{~ zv7m8PUu512=qNe>KUMko^L%`B$Li{rnnCMS3a=@ouq_7pwQs^lfoiJU*3905hcxLv zAA#zW>u$y!)j$2p%~H zTYIw{Huofba4LmM+M0@Nepn*aaKlil(fhVn^ysBihL|xhe4|8EhrNA@CWwT9#`J&;2i>h#KUmf^Y|) zGSAz_lEILcWzD^3hUo_Wu}^h-A2L2(;Pitx7+Y7k7axB#x)WL(25b zskpwSgN~G^(4T2?^^KVkH7Qe>4`Uwc_OuLbjt0l^U<@~J*Ny-qHNdVF0cBmpJF+S; zuX|r<^0;bjJEAOXUcY;({#KlAub9+V^mI*QzTO9m*C4sKZ-}K(akP7=PTwT#P6l8% zNL_Fi9f-$rLFq?f|HnP>?Lhlm%eGJJgVa)MqyZ>})O~kxt%LIPGi;N%`{M38SX;dl z6M@FSG-L~IET_yR-OJoL5Cs4B8zw`4$|zr|*S2=}bsO|SJ6*D$OCC<-&$@^TavF9m zxWb1M`Kr;ba+X+gE)n$_;+=!EI#Gf zh*hNkCMrACo!>%fd^z8~oy4C-FaJFa`|03vAa$T7HKcz>W@BRMnQ>ygq!#LU@KDX? zH^ZAgV5SA0|M~KD?WLC9KfCLqkMJdBNqadm5JG)@{WO>uPjNoE-(j$aiI9yuVjQKA zKu_adR@P^Re(EtxLJ_FpGxDRW5Z*>7n09PBjqtkR{5lnJkA#U^`C}no4vLAa?;ttRrx!eLhiR4`k?1mh>p&T9`

    ; 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 + + + + + + + | Homepage for the Linebender organization + + + + + + + + + + + + + + + + + + + + + +

    +
    +
    + +

    Welcome to the homepage for the Linebender organization.

    +

    We are a friendly group of people who share an interest in 2D graphics and user interface design, with everything that entails. +Most of our projects are developed in the Rust programming language. +We hang out on the Linebender Zulip and always welcome new people.

    +

    Linebender projects

    +

    Below is a list of the main Linebender projects, and a short description of each project's purpose, as of 2024-07-23.

    +

    Crates (actively developed)

    +

    These crates are under active development.

    +
      +
    • +

      xilem - An experimental Rust architecture for reactive UI.

      +

      Xilem is a UI toolkit with a medium-grained reactive architecture strongly inspired by SwiftUI. +It is currently in a pre-alpha state, with several significant issues, but is improving rapidly.

      +
    • +
    • +

      masonry - A foundational framework for Rust GUI libraries.

      +

      Masonry is an evolution of Druid, designed to be driven by a higher-level UI toolkits. +It is currently used to power Xilem, but is designed to be usable by other libraries as well.

      +
    • +
    • +

      vello - An experimental GPU compute-centric 2D renderer.

      +

      Vello is an experimental 2D graphics rendering engine written in Rust, with a focus on GPU compute. +It can draw large 2D scenes with interactive or near-interactive performance, using wgpu for GPU access.

      +
    • +
    • +

      kurbo - A library for creating, manipulating and interrogating 2D curve shapes.

      +

      At its core, kurbo is a library for constructing paths and splines out of straight lines and Bézier curves up to order 3 (known as cubic Béziers). It turns out that a series of cubic Bézier curves can be used to approximate any smooth curve with a very high degree of accuracy, compared to the number of curves required. They are also relatively easy to work with, and form the basis of the approach to curve rendering used in vello. The key abstraction is kurbo::Shape, which provides the path_elements method. This method returns an iterator over Bézier curves that approximate the type implementing the Shape trait, which vello can then draw.

      +
    • +
    • +

      peniko - A library for non-geometric drawing primitives.

      +

      This crate provides a set of shared types for concepts that are important for drawing/stroking paths, but excluding the path geometry itself (which can be found in kurbo). It includes types for brush styles (including gradient) and color.

      +
    • +
    • +

      parley - A crate for rich text layouts. It is backed by swash.

      +
    • +
    • +

      fontique - A crate for font enumeration and fallback. Used by parley.

      +
    • +
    • +

      velato - A crate that converts Lottie animations to vello scenes for rendering.

      +
    • +
    • +

      vello_svg - A crate that converts SVG documents to vello scenes for rendering.

      +
    • +
    • +

      norad - A crate for reading, writing, and manipulating Unified Font Object files, a common font-design format.

      +
    • +
    +

    Crates (passively maintained)

    +
      +
    • +

      druid - A GUI framework for Rust.

      +

      druid is the original Linebender UI framework, and was the main focus of development until early 2023. There are many good things about druid, but the data model it uses (primarily Lenses) gets complicated in Rust, and doesn't compose as well as it would in a GC'd functional programming language. However, a lot of the things that work will be copied straight over to xilem, and today druid is a solid choice for a new UI app projected to have low to medium complexity. The #druid-help channel on Zulip is still monitored and you will likely get good answers to any questions you have.

      +
    • +
    • +

      piet - An abstraction layer over platform 2D rendering facilities.

      +

      The purpose of the piet library is to provide abstraction over the libraries used for 2D rendering on any particular platform (Direct2D on Windows, Core Graphics on Mac, and cairo/pango on Linux). The goal is for piet to be superseded by the vello crate, which will provide state-of-the-art 2D rendering on any platform supported by WebGPU.

      +
    • +
    • +

      druid-shell - The windowing library for druid.

      +

      It lives in the druid repository. When our focus moved over to vello/xilem, there was debate over whether to split this code into its own crate, or move over to winit. We decided to keep using our own windowing library for now, to give us the flexibility to add or change what we need to. Thus glazier was born as a fork of druid-shell.

      +
    • +
    • +

      druid-widget-nursery - A crate with widgets for druid.

      +

      This crate contains lots of druid widgets that may be useful to UI developers. It includes things like widgets for Material Icons, and a tree view (a way to draw data stored in a tree). It followed the very liberal optimistic merging strategy for handling PRs to minimize contributor friction, but the widgets contributed are all robust and high quality.

      +
    • +
    • +

      runebender - An experimental font editor.

      +

      This was the motivating application for druid development. It is not currently seeing active development, but this may be revisited in the future.

      +
    • +
    • +

      skribo - A library for text layout.

      +

      This library aims to perform the conversion from text and font attributes to glyph runs, similar to harfbuzz. It's not recommended to use this library as better alternatives exist, for example parley or cosmic-text.

      +
    • +
    +

    Non-code repos

    +
      +
    • +

      2d.graphics - A work-in-progress book explaining the current state of the art of different aspects of 2D graphics.

      +

      Currently the book mostly contains annotated reference lists, although some sections have written content. Pull requests welcome! The goal is to cover topics like color, shapes/curves, 2D GPU rendering, text, etc.

      +
    • +
    • +

      linebender.github.io - This website. If you see anything that looks incorrect, please submit a PR to the repo.

      +
    • +
    +

    Archived projects

    +
      +
    • +

      glazier - A windowing library.

      +

      Glazier was created due to limitations with winit, however we have since decided to work together with the winit team to resolve those issues. +We now recommend the use of winit over Glazier.

      +
    • +
    + + +
    +
    + + + diff --git a/linebender.svg b/linebender.svg new file mode 100644 index 0000000..cf68e13 --- /dev/null +++ b/linebender.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/main.css b/main.css new file mode 100644 index 0000000..112f95a --- /dev/null +++ b/main.css @@ -0,0 +1 @@ +body,h1,h2,h3,h4,h5,h6,p,blockquote,pre,hr,dl,dd,ol,ul,figure{margin:0;padding:0}body{font:400 16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";color:#111;background-color:#fdfdfd;-webkit-text-size-adjust:100%;-webkit-font-feature-settings:"kern" 1;-moz-font-feature-settings:"kern" 1;-o-font-feature-settings:"kern" 1;font-feature-settings:"kern" 1;font-kerning:normal;display:flex;min-height:100vh;flex-direction:column}h1,h2,h3,h4,h5,h6,p,blockquote,pre,ul,ol,dl,figure,.highlight{margin-bottom:15px}main{display:block}img{max-width:100%;vertical-align:middle}figure>img{display:block}figcaption{font-size:14px}ul,ol{margin-left:30px}li>ul,li>ol{margin-bottom:0}h1,h2,h3,h4,h5,h6{font-weight:400}a{color:#2a7ae2;text-decoration:none}a:visited{color:#1756a9}a:hover{color:#111;text-decoration:underline}.social-media-list a:hover{text-decoration:none}.social-media-list a:hover .username{text-decoration:underline}blockquote{color:#828282;border-left:4px solid #e8e8e8;padding-left:15px;font-size:18px;letter-spacing:-1px;font-style:italic}blockquote>:last-child{margin-bottom:0}.wrapper{max-width:-webkit-calc(800px - (30px * 2));max-width:740px;margin-right:auto;margin-left:auto;padding-right:30px;padding-left:30px}@media screen and (max-width: 800px){.wrapper{max-width:-webkit-calc(800px - (30px));max-width:770px;padding-right:15px;padding-left:15px}}.wrapper:after,.footer-col-wrapper:after{content:"";display:table;clear:both}.svg-icon{width:16px;height:16px;display:inline-block;fill:#828282;padding-right:5px;vertical-align:text-top}.social-media-list li+li{padding-top:5px}table{margin-bottom:30px;width:100%;text-align:left;color:#3f3f3f;border-collapse:collapse;border:1px solid #e8e8e8}table tr:nth-child(even){background-color:#f7f7f7}table th,table td{padding:10px 15px}table th{background-color:#f0f0f0;border:1px solid #dedede;border-bottom-color:#c9c9c9}table td{border:1px solid #e8e8e8}.site-header{border-top:5px solid #424242;border-bottom:1px solid #e8e8e8;min-height:55.95px;position:relative}.site-title{font-size:26px;font-weight:300;line-height:54px;letter-spacing:-1px;margin-bottom:0;float:left}.site-title,.site-title:visited{color:#424242}.site-nav{float:right;line-height:54px}.site-nav .nav-trigger{display:none}.site-nav .menu-icon{display:none}.site-nav .page-link{color:#111;line-height:1.5}.site-nav .page-link:not(:last-child){margin-right:20px}@media screen and (max-width: 600px){.site-nav{position:absolute;top:9px;right:15px;background-color:#fdfdfd;border:1px solid #e8e8e8;border-radius:5px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:10px;text-align:center}.site-nav .menu-icon>svg{fill:#424242}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{display:block;padding:5px 10px;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}.site-footer{border-top:1px solid #e8e8e8;padding:30px 0}.footer-heading{font-size:18px;margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-col-wrapper{font-size:15px;color:#828282;margin-left:-15px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-col-1{width:-webkit-calc(35% - (30px / 2));width:calc(35% - 15px)}.footer-col-2{width:-webkit-calc(20% - (30px / 2));width:calc(20% - 15px)}.footer-col-3{width:-webkit-calc(45% - (30px / 2));width:calc(45% - 15px)}@media screen and (max-width: 800px){.footer-col-1,.footer-col-2{width:-webkit-calc(50% - (30px / 2));width:calc(50% - 15px)}.footer-col-3{width:-webkit-calc(100% - (30px / 2));width:calc(100% - 15px)}}@media screen and (max-width: 600px){.footer-col{float:none;width:-webkit-calc(100% - (30px / 2));width:calc(100% - 15px)}}.page-content{padding:30px 0;flex:1}.page-heading{font-size:32px}.post-list-heading{font-size:28px}.post-list{margin-left:0;list-style:none}.post-list>li{margin-bottom:30px}.post-meta{font-size:14px;color:#828282}.post-link{display:block;font-size:24px}.post-header{margin-bottom:30px}.post-title{font-size:42px;letter-spacing:-1px;line-height:1}@media screen and (max-width: 800px){.post-title{font-size:36px}}.post-content{margin-bottom:30px}.post-content h2{font-size:32px}@media screen and (max-width: 800px){.post-content h2{font-size:28px}}.post-content h3{font-size:26px}@media screen and (max-width: 800px){.post-content h3{font-size:22px}}.post-content h4{font-size:20px}@media screen and (max-width: 800px){.post-content h4{font-size:18px}}.highlight{background:#fff}.highlighter-rouge .highlight{background:#eef}.highlight .c{color:#998;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .k{font-weight:bold}.highlight .o{font-weight:bold}.highlight .cm{color:#998;font-style:italic}.highlight .cp{color:#999;font-weight:bold}.highlight .c1{color:#998;font-style:italic}.highlight .cs{color:#999;font-weight:bold;font-style:italic}.highlight .gd{color:#000;background-color:#fdd}.highlight .gd .x{color:#000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#999}.highlight .gi{color:#000;background-color:#dfd}.highlight .gi .x{color:#000;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gs{font-weight:bold}.highlight .gu{color:#aaa}.highlight .gt{color:#a00}.highlight .kc{font-weight:bold}.highlight .kd{font-weight:bold}.highlight .kp{font-weight:bold}.highlight .kr{font-weight:bold}.highlight .kt{color:#458;font-weight:bold}.highlight .m{color:#099}.highlight .s{color:#d14}.highlight .na{color:teal}.highlight .nb{color:#0086b3}.highlight .nc{color:#458;font-weight:bold}.highlight .no{color:teal}.highlight .ni{color:purple}.highlight .ne{color:#900;font-weight:bold}.highlight .nf{color:#900;font-weight:bold}.highlight .nn{color:#555}.highlight .nt{color:navy}.highlight .nv{color:teal}.highlight .ow{font-weight:bold}.highlight .w{color:#bbb}.highlight .mf{color:#099}.highlight .mh{color:#099}.highlight .mi{color:#099}.highlight .mo{color:#099}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc{color:teal}.highlight .vg{color:teal}.highlight .vi{color:teal}.highlight .il{color:#099}.blog-list{list-style:none}.blog-list li{margin-bottom:1em}.list-post-date{color:#666}.list-post-title{font-size:120%} \ No newline at end of file diff --git a/minima-social-icons.svg b/minima-social-icons.svg new file mode 100644 index 0000000..f7c3b81 --- /dev/null +++ b/minima-social-icons.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..dbd50f7 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://linebender.org/sitemap.xml diff --git a/search_index.en.js b/search_index.en.js new file mode 100644 index 0000000..5d84732 --- /dev/null +++ b/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":2},"1":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3},"1":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}},"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}},"7":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}},"1":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":2.0}},"df":5,"0":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"2":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":1,"6":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":3,"5":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"m":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}},"g":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":5,".":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":4},"8":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1},"4":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1},"6":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"8":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":2},"9":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3},"1":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"2":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":2},"3":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2},"4":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":17}}},"3":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1},"4":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"6":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1},"\\":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"d":{"docs":{"https://linebender.org/":{"tf":3.1622776601683795},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":6,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"3":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":5,"(":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"0":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"g":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0}},"df":2,".":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"2":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"6":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"8":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"0":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"5":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}},"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.449489742783178},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5},"9":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"7":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"^":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":6}},"o":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":10}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.7416573867739413},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.6457513110645907}},"df":12,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":7}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":2.0}},"df":4}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":4}}}},"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}},"v":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":8}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}}}}},"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.449489742783178},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":14,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":9,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.8284271247461903},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":11,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":3}}}}},"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772}},"df":3}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":8},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":1}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":2.0}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1},"m":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.605551275463989}},"df":5}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":4},"w":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":9}},"u":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"g":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":4,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":8}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":6}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":6}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}}},"d":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3}}}},"p":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.6457513110645907},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1},"z":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.3166247903554},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.4641016151377544},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.23606797749979}},"df":14,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":5}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8}}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}},"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":6}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}},"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7},"p":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":7,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":3.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":11}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":4}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":3.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.23606797749979}},"df":7}}},"v":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772}},"df":3},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":3}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":4}}}}}}},"c":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.23606797749979},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5,"1":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":9}}}}}},"v":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":6}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":8},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951}},"df":3},"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}}},"g":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":9}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":3}},"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":7,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/curves/":{"tf":1.0}},"df":3}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"+":{"docs":{},"df":0,"b":{"docs":{},"df":0,")":{"docs":{},"df":0,"/":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"+":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"+":{"docs":{},"df":0,"e":{"docs":{},"df":0,")":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":4},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":5.196152422706632},"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}},"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":2}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":4}}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":12}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":8}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":4,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2}},"k":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://linebender.org/wiki/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":7,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.3166247903554}},"df":6}},"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}}}}}},"r":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":3}}}},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"}":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"}":{"docs":{},"df":0,"'":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"|":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{},"df":0,"}":{"docs":{},"df":0,"'":{"docs":{},"df":0,"|":{"docs":{},"df":0,"^":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":7},"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":14,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":9}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":6}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":4}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951}},"df":2}}}}}},"d":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":11}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":10}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":8}}}}},"v":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178}},"df":2}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":3,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.8284271247461903}},"df":7,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"z":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"b":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":1},"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://linebender.org/blog/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":11}},"u":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"r":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":3}}}}}},"m":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":4}},"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":9},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":3}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":3}}}}}},"x":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":6,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":2.23606797749979}},"df":4},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":10,"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2}}}},"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":5}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}},"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":3.1622776601683795},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":12,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5}}},"l":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}},"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":6}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}},"é":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.8284271247461903},"https://linebender.org/wiki/curve-families/":{"tf":4.242640687119285}},"df":4,"3":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"8":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"4":{"docs":{},"df":0,"?":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":3,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3}},"d":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":4}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":6}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":3},"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4,"l":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.4142135623730951}},"df":1}},"v":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"p":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":4}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2},"g":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":4.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":13},"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{"https://linebender.org/about/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3}}}}}}},"s":{"docs":{},"df":0,"à":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":4}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1},"g":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":15},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":4,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8}},"o":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":3}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":2}}}}}}}},"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":4,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.0}},"df":1}}},"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":3},"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1},"f":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.6457513110645907}},"df":1,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.4142135623730951}},"df":1},"y":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":2.449489742783178},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":6,"r":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":2}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":2.6457513110645907},"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.872983346207417},"https://linebender.org/contributor-guidelines/":{"tf":2.449489742783178},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":18,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0}},"df":3}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.23606797749979}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772}},"df":7}}},"p":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4}},"r":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2,"v":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":2.0}},"df":3,"t":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":8}},"u":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.605551275463989},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":10,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}},"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2},"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":3}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.4641016151377544},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":4},"x":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":7}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":3},"s":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":3.1622776601683795},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":11}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3,"u":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":2}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":6}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"t":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":1}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":6}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1,"3":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}}},"q":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":3}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":2,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":11}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2},"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951}},"df":5}},"x":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":2.449489742783178}},"df":10}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":10,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":6}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":3.605551275463989},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":2},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2},"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2},"s":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":4},"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":4}},"x":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":9},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":4,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}}}}}}}},"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":4}}},"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}},"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":6}}}},"p":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":4}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":3.605551275463989},"https://linebender.org/blog/doc-include/":{"tf":3.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.605551275463989},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":2.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":15,"'":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":17,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":5}},"v":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":7}}},"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178}},"df":3}},"u":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":3.3166247903554},"https://linebender.org/wiki/curve-families/":{"tf":2.449489742783178}},"df":3}}},"d":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.23606797749979},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":12}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://linebender.org/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":3.7416573867739413},"https://linebender.org/wiki/curve-families/":{"tf":7.416198487095663},"https://linebender.org/wiki/curve-offset/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":4.242640687119285},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.449489742783178},"https://linebender.org/wiki/curve-families/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.23606797749979}},"df":3}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":4.795831523312719}},"df":1},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5}}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":8,"'":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":5},"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}},"y":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5},"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":6}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":4}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.449489742783178},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":6,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":3}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":4}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":10}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":3.3166247903554}},"df":3}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5},"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":5.196152422706632},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":12}},"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}},"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":11}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.6457513110645907}},"df":2}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/":{"tf":2.6457513110645907},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":13}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"x":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"’":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":11,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":2.6457513110645907}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":10,"2":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":5}},"x":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.23606797749979}},"df":2}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":3}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}}},"v":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":4.358898943540674},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":3.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.23606797749979}},"df":18}}}},"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1},"y":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":4}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1,"e":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}}},"j":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":4.47213595499958}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":3.605551275463989},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.3166247903554},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.4641016151377544},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":14}}}}}},"d":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":6}},"’":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":4,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}},"e":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":7},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"’":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772}},"df":2}}},"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":3,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":5}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":7,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":5,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3},"r":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2},"w":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":3.7416573867739413},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.4641016151377544}},"df":5,"#":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":2}},"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3},"m":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":5}}},"x":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}}}}},"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}},"^":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":9}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":5},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}}}}},"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.1622776601683795}},"df":1,"h":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.7416573867739413},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":13,"'":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}}}}},"d":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":6}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}}}}},"g":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":2.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3,"u":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"/":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.8284271247461903}},"df":1,"2":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{},"df":0,"~":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}},"3":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{},"df":0,"*":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"~":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6,"/":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"/":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}}}}}},"m":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1,"b":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7},"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":6}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}},"n":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772}},"df":7}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":2.23606797749979},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951}},"df":7}}}}}},"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":12,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":2.23606797749979}},"df":2}}}}},"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":2}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":2}}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":2}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.8284271247461903},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":8},"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":1},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":3}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2},"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.0}},"df":3}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":10}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":7}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":3.1622776601683795},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":3.1622776601683795}},"df":5}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":6}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":9,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":6,"u":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":3}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":3}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":3.7416573867739413}},"df":2}},"v":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":2.6457513110645907},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":16}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5},"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":15}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":6}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":10}},"n":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.8284271247461903}},"df":9,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":9}}}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":6}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4},"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":6},"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":3}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5}},"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":3}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":4.47213595499958},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.605551275463989},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":13}}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":7}},"l":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979}},"df":2}},"w":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1},"l":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"f":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":2.8284271247461903}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":2}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":2.449489742783178},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":2.23606797749979}},"df":11,"'":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":6},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":9},"e":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":3},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0}},"df":2}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":14}}},"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curve-offset/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":3},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}},"x":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":7}},"l":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":4}}}}},"k":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.0}},"df":2}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}},"w":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}},"w":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":9,"s":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":2},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":16,"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-04/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":3.1622776601683795}},"df":14,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3},"m":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":7,"a":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.7320508075688772}},"df":4}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.23606797749979}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":12}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0}},"df":6}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/":{"tf":1.4142135623730951}},"df":1,"{":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"s":{"docs":{},"df":0,"}":{"docs":{},"df":0,"^":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}},"^":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}},"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"x":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"^":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":2,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.7416573867739413}},"df":9}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":2},"y":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":5}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":1}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":5,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":5}}},"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":5}}}}},"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":3,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":10,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}}}}}}},"z":{"docs":{},"df":0,"z":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1,"0":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2},"2":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"4":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}},"p":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":3.605551275463989},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":11}},"t":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.449489742783178}},"df":4}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":4}}}},"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":9}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":3,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":6}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":10,"n":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":6}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":8}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":8}}}},"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.3166247903554},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":2.0}},"df":8}},"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3},"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":11},"g":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/office-hours/":{"tf":1.4142135623730951}},"df":7,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.1622776601683795},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":17,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}}}}}}}},"'":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"#":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":3}},"p":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4,"?":{"docs":{},"df":0,"&":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":9}}}},"y":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3,"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"x":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":4}}}}}},"i":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.1622776601683795},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":4.358898943540674}},"df":9,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}},"y":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":12}},"g":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":4,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":2}},"’":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":5,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2}},"’":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3}}}}},"l":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":9}},"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":13,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"’":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}},"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.605551275463989},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.4641016151377544},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":14,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":5},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.6457513110645907},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":2}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}}}}},"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.23606797749979}},"df":1}}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.4142135623730951}},"df":5},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"é":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":7,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":4}}}}}}},"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/office-hours/":{"tf":1.7320508075688772}},"df":7}}},"p":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}},"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.23606797749979}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"4":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":2},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":2}},"m":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.7416573867739413},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0}},"df":6},"v":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":2}},".":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"/":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"x":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"^":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":7,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":5}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":7,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.1622776601683795},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.3166247903554},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":2.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":2.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.4641016151377544},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.7416573867739413},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":20}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.449489742783178},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-offset/":{"tf":1.0}},"df":11,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":4}}},"o":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-03/":{"tf":2.0},"https://linebender.org/blog/tmix-04/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":2.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":20}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":2.8284271247461903},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-2024/":{"tf":3.1622776601683795},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":21,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":2},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":5}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":3.0}},"df":2}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":12}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772}},"df":6}}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":3}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":11}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":10}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":8}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178}},"df":3}}}}},"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"^":{"docs":{},"df":0,"t":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":15}},"l":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5},"t":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":6}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":11}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":7}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.23606797749979}},"df":1},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2,"t":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":6}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":6}}}}},"o":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4}},"’":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.449489742783178},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.7416573867739413},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":3.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":13}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.872983346207417},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":11},"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.8284271247461903},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":9},"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":5}}}},"’":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.8284271247461903},"https://linebender.org/contributor-guidelines/":{"tf":2.23606797749979}},"df":3}},"’":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772}},"df":1},"v":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":4}},"v":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3},"h":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}},"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}},"y":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":5}},"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":2}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":6}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.23606797749979}},"df":7,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}}}}},"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}}}},"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":7}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":2,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}}}},"z":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"'":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951}},"df":3}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-03/":{"tf":2.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":8},"e":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1},"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"#":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":12}}}}},"p":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0}},"df":10,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":6}},"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":3.1622776601683795}},"df":9}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.872983346207417},"https://linebender.org/wiki/text/":{"tf":2.449489742783178}},"df":13}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}},"v":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.23606797749979}},"df":3}}},"s":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":2.0}},"df":1}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":6,"'":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0}},"df":11}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}}}}},"f":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951}},"df":2},"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":3.605551275463989},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":10}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/about/":{"tf":3.0},"https://linebender.org/blog/doc-include/":{"tf":2.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.8284271247461903},"https://linebender.org/wiki/formatting-scheme/":{"tf":2.0}},"df":5}}},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"k":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1}}}},"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.23606797749979}},"df":8}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":12,"0":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":2.23606797749979},"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":3.3166247903554},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":2.23606797749979},"https://linebender.org/wiki/canonical-lints/":{"tf":1.7320508075688772},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":20,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}}}},".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0}},"df":2}}}}}}}}}},"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"k":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":5.0990195135927845},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8},"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":2.6457513110645907}},"df":1},"u":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":2.23606797749979}},"df":6,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-offset/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":4}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":2.0}},"df":5},"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}},"d":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":3,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0}},"df":3}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":8,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":10},"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.23606797749979}},"df":2,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.7416573867739413},"https://linebender.org/wiki/canonical-lints/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":11,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"w":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0}},"df":1}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1},"k":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772}},"df":1}}}}},"m":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1,"1":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":2},"3":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2,"o":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":8}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":11,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":5}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":2}}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":2.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":7}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.3166247903554},"https://linebender.org/contributor-guidelines/":{"tf":2.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":19,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"’":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":12,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":2}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1},"o":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}},"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.449489742783178},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.4142135623730951}},"df":2}}}},"u":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.6457513110645907},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.872983346207417},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":2.0},"https://linebender.org/blog/tmix-05/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":3.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.1622776601683795},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":15},"y":{"docs":{},"df":0,"#":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}},"'":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":4}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}}},"h":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/wiki/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":7,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}}},"x":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}}}}},"y":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.8284271247461903},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}},"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":4}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":5}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":8}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":6}}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":7,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":4.58257569495584}},"df":1},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.6457513110645907},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":7}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":5}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2},"e":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":7,"a":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":4,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.449489742783178}},"df":2}}},"x":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":4}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":4},"r":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":5}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":2}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":2.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":12,"'":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.6457513110645907},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":3.3166247903554},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":4.242640687119285},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":2.8284271247461903},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":17},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":8}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5}},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772}},"df":11,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":10}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.449489742783178}},"df":2,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":3,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}}},"v":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"v":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":2.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":8}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}}}},"d":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.8284271247461903},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":5,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0}},"df":2}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.8284271247461903},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":12}},"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":18,"b":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":6}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4},"o":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":6}},"k":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178}},"df":2}},"n":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":12,"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5}},"t":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":14},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-10/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":17}},"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":13}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.449489742783178}},"df":1}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.23606797749979},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"'":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":4}}}}}}},"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"^":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"4":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"6":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":4}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/office-hours/":{"tf":1.7320508075688772}},"df":7,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-offset/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2}}}}},"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.605551275463989},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":8,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":5}}}}}}},"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.6457513110645907},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":13,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":3},"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":3.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":2.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":13,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}}},"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":4}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":4}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5}}}},"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8}}},"g":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":2.0}},"df":10}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":5.744562646538029},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":7}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":9,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":20,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":4}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":2.8284271247461903},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":12,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0}},"df":3}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"p":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1,"1":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":1},"3":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":1},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":2},"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":2.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":2.0}},"df":9}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":2}}},"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8,"'":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1},"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":2,"2":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":8}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":4.69041575982343},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":5,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":13,"#":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2}},"2":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"9":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}},"5":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2},"4":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2},"5":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2},"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":4}},"7":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":5}},"8":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}},"'":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.1622776601683795},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":11,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":10,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}}}}}}},"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.0}},"df":9,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}},"h":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":10,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8}}}}},"y":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":2,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":4.123105625617661},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.605551275463989},"https://linebender.org/contributor-guidelines/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":9,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":4,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.1622776601683795},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.0}},"df":15}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}},"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":5}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":5,"#":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"8":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.23606797749979}},"df":4}}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":8}},"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":10,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":12,"'":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}}}}},"y":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":5}}},"u":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1,"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":2},"m":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://linebender.org/wiki/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/cubic-robustness/":{"tf":4.123105625617661},"https://linebender.org/wiki/curve-families/":{"tf":3.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":13,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-offset/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}},"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.8284271247461903},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":10,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0}},"df":3}},"l":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":12}}}},"t":{"docs":{"https://linebender.org/blog/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":12,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":8}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}}}},"r":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.1622776601683795},"https://linebender.org/blog/tmix-02/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":2.6457513110645907},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.0}},"df":6,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":4}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"č":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":3,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":11}},"r":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3},"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5,"s":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":2}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":4}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.8284271247461903},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":7}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3}}}},"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":5.477225575051661},"https://linebender.org/blog/roadmap-may-2024/":{"tf":5.291502622129181},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":5,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2}}},"y":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":11}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":10,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":6}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":10}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.7416573867739413},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":3.1622776601683795},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":14}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.23606797749979},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":4.0},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-07/":{"tf":2.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":3.605551275463989},"https://linebender.org/blog/xilem-2024/":{"tf":3.3166247903554},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.1622776601683795},"https://linebender.org/contributor-guidelines/":{"tf":2.6457513110645907},"https://linebender.org/wiki/canonical-lints/":{"tf":2.449489742783178},"https://linebender.org/wiki/capitalization-scheme/":{"tf":2.6457513110645907},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":23,"'":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":4}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":6}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":6}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":10}},"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/wiki/":{"tf":1.0}},"df":5,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5}},"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":3}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":2.449489742783178},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":3,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772}},"df":9}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":3}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":5}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":1}}}},"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"x":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":2.449489742783178}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"g":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":3.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2},"k":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":10,"'":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":3.0}},"df":3},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.6457513110645907},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}}},"z":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"c":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4},"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":3.0}},"df":4}}}},"d":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5}},"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}}},"m":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":3.3166247903554},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":1}},"z":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.8284271247461903},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":5}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":4,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":12}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":3}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":6,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":3.3166247903554},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":13}},"v":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":6}},"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":5,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":1}}}}},"m":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"v":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":6}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":3.0},"https://linebender.org/blog/doc-include/":{"tf":2.449489742783178},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":16}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"o":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0}},"df":6,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":6}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":10}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":3.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":10,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.449489742783178},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":14}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":5}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}},"v":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":7}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":4}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":3}}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":4}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":3}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.23606797749979},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":7}}},"v":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":3.4641016151377544}},"df":1,"#":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":4}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":3}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":2.449489742783178},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7}},"s":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951}},"df":2}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178}},"df":7,"#":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"#":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1},"5":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1},"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":4},"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":4}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":6}},"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772}},"df":1},"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":4.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.23606797749979}},"df":10}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.23606797749979}},"df":9}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772}},"df":3},"l":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3},"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}}}},"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":14,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.449489742783178},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":4.69041575982343},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.8284271247461903},"https://linebender.org/blog/xilem-2024/":{"tf":4.47213595499958},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":4.358898943540674},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.4142135623730951}},"df":18,"'":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":3.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.6457513110645907},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7}},"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.0}},"df":4,"^":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"6":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"\\":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":10},"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5},"y":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772}},"df":1}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}},"n":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.0}},"df":4}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":7}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":4}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":8,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":6}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":3.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":8}}}}},"e":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":19,"k":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3},"m":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0}},"df":1},"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979}},"df":4}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.8284271247461903},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.23606797749979},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0}},"df":3},"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"v":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}}},"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":11,"t":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":3}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":9}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":5.916079783099616}},"df":9}},"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/text/":{"tf":2.0}},"df":6,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":9},"p":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2},"v":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}}},"w":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":11,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":3}}}},"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5,"?":{"docs":{},"df":0,"&":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":4,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":6,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":5}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":6}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1,"c":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"f":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":5}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"z":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.3166247903554},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":6}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.23606797749979}},"df":2},"m":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"p":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":2}}}},"w":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":4}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":4}}}}}},"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1,"j":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":8}},"v":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5},"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":3}},"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":5.656854249492381},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":14}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":5}},"n":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"c":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}}},"f":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":13,"i":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":3.1622776601683795},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":3.1622776601683795}},"df":5,"2":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"o":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1,"4":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"3":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1,"#":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":2.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":4}},"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.23606797749979},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":6}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"|":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,")":{"docs":{},"df":0,"|":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"{":{"docs":{},"df":0,"s":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"8":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}}}}}},"b":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/":{"tf":1.4142135623730951}},"df":1}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":2}},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":3}},"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":6}},"f":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":3.1622776601683795}},"df":3}},"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":18,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":4}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":13},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":5.291502622129181},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":4}},"y":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":6},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":11}}},"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":6}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951}},"df":1,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":7},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":11}},"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":6}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":2,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}},"f":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.0}},"df":8}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":3}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/gpu/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2},"s":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":2.0}},"df":3}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.605551275463989}},"df":2}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":4}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}},"h":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":10}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":6}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1,"s":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.449489742783178}},"df":1},"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":2.23606797749979}},"df":1}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":2.0},"https://linebender.org/blog/tmix-06/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-07/":{"tf":2.0},"https://linebender.org/blog/tmix-08/":{"tf":3.1622776601683795},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":18}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":4,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":4}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":6}}}},"p":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}}}}},"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":1}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":10,"7":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"t":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0}},"df":2}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":10,"n":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":9,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":2}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2},"p":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0}},"df":4,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.3166247903554},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":6,"'":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":8,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.8284271247461903},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.7416573867739413},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":9}},"x":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.23606797749979},"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.0},"https://linebender.org/blog/tmil-09/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":2.0},"https://linebender.org/blog/tmix-10/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-2024/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/text/":{"tf":3.0}},"df":14,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":5}},"t":{"docs":{},"df":0,"’":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":3},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"’":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951}},"df":2}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":3.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"'":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1,"g":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.605551275463989},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":11},"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":13}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":8,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.4142135623730951}},"df":8,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":7}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":9,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":7}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.1622776601683795},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":14},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":2.0}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}},"o":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":4,"m":{"docs":{},"df":0,"v":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":7}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951}},"df":2,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.6457513110645907},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":5,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979}},"df":5}}}}},"p":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-offset/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":6}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":7}}}},"y":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951}},"df":6},"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772}},"df":1},"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":5},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.23606797749979},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":7}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":2.23606797749979},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":4}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":11},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":1}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.23606797749979}},"df":1,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0}},"df":1},"n":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}}},"w":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.0},"https://linebender.org/wiki/curve-families/":{"tf":2.449489742783178},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":15}},"y":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":11,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/text/":{"tf":2.0}},"df":1}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1},"i":{"docs":{"https://linebender.org/":{"tf":2.449489742783178},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":5.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":12},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}}}}}}},"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":3}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.3166247903554},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":4}}}},"v":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":7}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":5,"i":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"#":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}}}},"k":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":7}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.8284271247461903},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907},"https://linebender.org/contributor-guidelines/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":14,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":3.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":12}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":3}}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{"https://linebender.org/":{"tf":3.3166247903554},"https://linebender.org/blog/doc-include/":{"tf":3.605551275463989},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.7416573867739413},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-06/":{"tf":3.0},"https://linebender.org/blog/tmix-07/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-08/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-10/":{"tf":3.872983346207417},"https://linebender.org/blog/xilem-2024/":{"tf":3.3166247903554},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":3.872983346207417},"https://linebender.org/contributor-guidelines/":{"tf":2.449489742783178},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":2.23606797749979},"https://linebender.org/wiki/curve-families/":{"tf":2.6457513110645907},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":3.4641016151377544},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":23,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}},"g":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951}},"df":3}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.4142135623730951},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":13}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":6}}},"v":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{},"df":0,"f":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":3}},"u":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772}},"df":5,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5}},"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":8}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":8}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951}},"df":2}}},"l":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/":{"tf":2.6457513110645907},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":2.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":2.0},"https://linebender.org/blog/tmix-10/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.7320508075688772}},"df":19,"#":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":1},"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":2}}},"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"9":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1},"9":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":2}}},"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1},"6":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2},"7":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1},"8":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2},"5":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2}},"3":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2}},"4":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2},"3":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1},"7":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1},"9":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"4":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1},"5":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"4":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}}},"'":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":3},"/":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"v":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.6457513110645907},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.8284271247461903},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":16},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":9}}},"u":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":3.1622776601683795}},"df":1,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":2}}},"b":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":13,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":3}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2}}}}}},"m":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}}}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":3}}}}},"s":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.7320508075688772}},"df":2},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.23606797749979}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.872983346207417},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":5.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.7320508075688772},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":10}},"r":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3},"p":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":3.1622776601683795}},"df":1}},"s":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772}},"df":1},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/contributor-guidelines/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":12,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":3},"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":4}},"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":6},"v":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772}},"df":3}},"a":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":3}},"b":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.23606797749979},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.449489742783178},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":12,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":2.8284271247461903}},"df":5}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/about/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1,"t":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":1.7320508075688772},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":2.0},"https://linebender.org/wiki/":{"tf":1.0}},"df":7}}},"l":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.7320508075688772},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.7320508075688772},"https://linebender.org/blog/xilem-2024/":{"tf":3.4641016151377544},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.7320508075688772}},"df":12}},"n":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}},"’":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":4.242640687119285}},"df":2},"v":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":10,"#":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"’":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951}},"df":8}}}},"w":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":2.0}},"df":3,"r":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":2}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.449489742783178},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmil-09/":{"tf":2.8284271247461903},"https://linebender.org/blog/tmix-01/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-10/":{"tf":2.0},"https://linebender.org/blog/xilem-2024/":{"tf":3.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":4.69041575982343},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":14,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"'":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":5}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":6,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":3.605551275463989},"https://linebender.org/blog/tmix-01/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":2.23606797749979}},"df":10,"#":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}},"'":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951}},"df":5}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":2.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.23606797749979},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":9}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5},"k":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/doc-include/":{"tf":2.23606797749979},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":4.58257569495584},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":2.23606797749979},"https://linebender.org/blog/tmil-09/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-01/":{"tf":2.0},"https://linebender.org/blog/tmix-02/":{"tf":2.0},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-05/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-06/":{"tf":2.0},"https://linebender.org/blog/tmix-07/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-08/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-10/":{"tf":3.7416573867739413},"https://linebender.org/blog/xilem-2024/":{"tf":4.58257569495584},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":4.69041575982343},"https://linebender.org/contributor-guidelines/":{"tf":2.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.4142135623730951},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":24,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":2}}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":2.449489742783178},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951},"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":2}},"s":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":5,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/":{"tf":1.0},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":2.449489742783178},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.8284271247461903},"https://linebender.org/contributor-guidelines/":{"tf":1.7320508075688772},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":11,"u":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/text/":{"tf":1.0}},"df":7}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.7320508075688772},"https://linebender.org/wiki/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3,"'":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"×":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.7320508075688772}},"df":1}},"(":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1},"^":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/":{"tf":2.0},"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":3.605551275463989},"https://linebender.org/blog/roadmap-may-2024/":{"tf":3.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":3.0},"https://linebender.org/blog/tmix-02/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-04/":{"tf":2.449489742783178},"https://linebender.org/blog/tmix-05/":{"tf":2.23606797749979},"https://linebender.org/blog/tmix-06/":{"tf":3.4641016151377544},"https://linebender.org/blog/tmix-07/":{"tf":3.3166247903554},"https://linebender.org/blog/tmix-08/":{"tf":2.8284271247461903},"https://linebender.org/blog/tmix-10/":{"tf":2.6457513110645907},"https://linebender.org/blog/xilem-2024/":{"tf":4.123105625617661},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":5.0990195135927845},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":18,"#":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"6":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2},"5":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1},"4":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"7":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2},"9":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":3}},"1":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":4},"2":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":2}},"2":{"docs":{},"df":0,"9":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":2}},"4":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2},"8":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"9":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"2":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1},"4":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2},"6":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":3}}},"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":2},"3":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2},"8":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2}},"2":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1},"1":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2},"3":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2},"8":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2}},"3":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1},"8":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"7":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":2}},"7":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2},"4":{"docs":{"https://linebender.org/blog/tmix-07/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"8":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2},"5":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"7":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1},"7":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"2":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.7320508075688772}},"df":1},"5":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"9":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"8":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"9":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":2},"7":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"2":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"3":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1},"5":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.4142135623730951}},"df":1},"5":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1},"7":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1},"6":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"5":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":2}},"3":{"docs":{},"df":0,"2":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"9":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"1":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"8":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}},"'":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.6457513110645907}},"df":3},"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":4}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":4}}}}}}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.4142135623730951},"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"k":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.7320508075688772},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":2.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":2.8284271247461903},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.4142135623730951}},"df":7}},"v":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/tmix-05/":{"tf":1.0}},"df":1}}},"’":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1},"r":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0},"https://linebender.org/wiki/curve-families/":{"tf":1.7320508075688772},"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":4}}},"o":{"docs":{},"df":0,"o":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/":{"tf":1.4142135623730951},"https://linebender.org/about/":{"tf":1.7320508075688772},"https://linebender.org/blog/doc-include/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.4142135623730951},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.4142135623730951},"https://linebender.org/blog/xilem-2024/":{"tf":1.7320508075688772},"https://linebender.org/contributor-guidelines/":{"tf":2.449489742783178},"https://linebender.org/wiki/curve-families/":{"tf":1.4142135623730951},"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0},"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":13}}}}}}},"title":{"root":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":13}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/tmix-04/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/":{"tf":1.0}},"df":1}}},"é":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"v":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0},"https://linebender.org/wiki/curve-offset/":{"tf":1.0},"https://linebender.org/wiki/curves/":{"tf":1.0}},"df":3}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/curve-families/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-02/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-offset/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://linebender.org/wiki/gpu/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/contributor-guidelines/":{"tf":1.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}},"n":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/blog/tmix-06/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-10/":{"tf":1.0},"https://linebender.org/contributor-guidelines/":{"tf":1.0},"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":8}}}}},"k":{"docs":{"https://linebender.org/blog/doc-include/":{"tf":1.0}},"df":1},"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmix-03/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0},"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0}},"df":9}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/office-hours/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/curve-offset/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://linebender.org/blog/xilem-2024/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0},"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":3}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://linebender.org/wiki/gpu/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"g":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/roadmap-may-2024-retro/":{"tf":1.0},"https://linebender.org/blog/roadmap-may-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0},"https://linebender.org/wiki/long-term-roadmap/":{"tf":1.0}},"df":4}}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/cubic-robustness/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://linebender.org/wiki/capitalization-scheme/":{"tf":1.0},"https://linebender.org/wiki/formatting-scheme/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://linebender.org/blog/tmil-09/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://linebender.org/wiki/canonical-lints/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/wiki/gpu/mesh-shaders/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/gpu/sorting/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://linebender.org/blog/tmix-10/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://linebender.org/wiki/text/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://linebender.org/blog/rustnl-2024-unconference/":{"tf":1.0}},"df":1}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://linebender.org/wiki/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://linebender.org/blog/tmix-01/":{"tf":1.0},"https://linebender.org/blog/tmix-02/":{"tf":1.0},"https://linebender.org/blog/tmix-03/":{"tf":1.0},"https://linebender.org/blog/tmix-04/":{"tf":1.0},"https://linebender.org/blog/tmix-05/":{"tf":1.0},"https://linebender.org/blog/tmix-06/":{"tf":1.0},"https://linebender.org/blog/tmix-07/":{"tf":1.0},"https://linebender.org/blog/tmix-08/":{"tf":1.0},"https://linebender.org/blog/xilem-2024/":{"tf":1.0},"https://linebender.org/blog/xilem-backend-roadmap/":{"tf":1.0}},"df":10}}}}}}}},"documentStore":{"save":true,"docs":{"https://linebender.org/":{"body":"Welcome to the homepage for the Linebender organization.\nWe are a friendly group of people who share an interest in 2D graphics and user interface design, with everything that entails.\nMost of our projects are developed in the Rust programming language.\nWe hang out on the Linebender Zulip and always welcome new people.\nLinebender projects\nBelow is a list of the main Linebender projects, and a short description of each project's purpose, as of 2024-07-23.\nCrates (actively developed)\nThese crates are under active development.\n\n\nxilem - An experimental Rust architecture for reactive UI.\nXilem is a UI toolkit with a medium-grained reactive architecture strongly inspired by SwiftUI.\nIt is currently in a pre-alpha state, with several significant issues, but is improving rapidly.\n\n\nmasonry - A foundational framework for Rust GUI libraries.\nMasonry is an evolution of Druid, designed to be driven by a higher-level UI toolkits.\nIt is currently used to power Xilem, but is designed to be usable by other libraries as well.\n\n\nvello - An experimental GPU compute-centric 2D renderer.\nVello is an experimental 2D graphics rendering engine written in Rust, with a focus on GPU compute.\nIt can draw large 2D scenes with interactive or near-interactive performance, using wgpu for GPU access.\n\n\nkurbo - A library for creating, manipulating and interrogating 2D curve shapes.\nAt its core, kurbo is a library for constructing paths and splines out of straight lines and Bézier curves up to order 3 (known as cubic Béziers). It turns out that a series of cubic Bézier curves can be used to approximate any smooth curve with a very high degree of accuracy, compared to the number of curves required. They are also relatively easy to work with, and form the basis of the approach to curve rendering used in vello. The key abstraction is kurbo::Shape, which provides the path_elements method. This method returns an iterator over Bézier curves that approximate the type implementing the Shape trait, which vello can then draw.\n\n\npeniko - A library for non-geometric drawing primitives.\nThis crate provides a set of shared types for concepts that are important for drawing/stroking paths, but excluding the path geometry itself (which can be found in kurbo). It includes types for brush styles (including gradient) and color.\n\n\nparley - A crate for rich text layouts. It is backed by swash.\n\n\nfontique - A crate for font enumeration and fallback. Used by parley.\n\n\nvelato - A crate that converts Lottie animations to vello scenes for rendering.\n\n\nvello_svg - A crate that converts SVG documents to vello scenes for rendering.\n\n\nnorad - A crate for reading, writing, and manipulating Unified Font Object files, a common font-design format.\n\n\nCrates (passively maintained)\n\n\ndruid - A GUI framework for Rust.\ndruid is the original Linebender UI framework, and was the main focus of development until early 2023. There are many good things about druid, but the data model it uses (primarily Lenses) gets complicated in Rust, and doesn't compose as well as it would in a GC'd functional programming language. However, a lot of the things that work will be copied straight over to xilem, and today druid is a solid choice for a new UI app projected to have low to medium complexity. The #druid-help channel on Zulip is still monitored and you will likely get good answers to any questions you have.\n\n\npiet - An abstraction layer over platform 2D rendering facilities.\nThe purpose of the piet library is to provide abstraction over the libraries used for 2D rendering on any particular platform (Direct2D on Windows, Core Graphics on Mac, and cairo/pango on Linux). The goal is for piet to be superseded by the vello crate, which will provide state-of-the-art 2D rendering on any platform supported by WebGPU.\n\n\ndruid-shell - The windowing library for druid.\nIt lives in the druid repository. When our focus moved over to vello/xilem, there was debate over whether to split this code into its own crate, or move over to winit. We decided to keep using our own windowing library for now, to give us the flexibility to add or change what we need to. Thus glazier was born as a fork of druid-shell.\n\n\ndruid-widget-nursery - A crate with widgets for druid.\nThis crate contains lots of druid widgets that may be useful to UI developers. It includes things like widgets for Material Icons, and a tree view (a way to draw data stored in a tree). It followed the very liberal optimistic merging strategy for handling PRs to minimize contributor friction, but the widgets contributed are all robust and high quality.\n\n\nrunebender - An experimental font editor.\nThis was the motivating application for druid development. It is not currently seeing active development, but this may be revisited in the future.\n\n\nskribo - A library for text layout.\nThis library aims to perform the conversion from text and font attributes to glyph runs, similar to harfbuzz. It's not recommended to use this library as better alternatives exist, for example parley or cosmic-text.\n\n\nNon-code repos\n\n\n2d.graphics - A work-in-progress book explaining the current state of the art of different aspects of 2D graphics.\nCurrently the book mostly contains annotated reference lists, although some sections have written content. Pull requests welcome! The goal is to cover topics like color, shapes/curves, 2D GPU rendering, text, etc.\n\n\nlinebender.github.io - This website. If you see anything that looks incorrect, please submit a PR to the repo.\n\n\nArchived projects\n\n\nglazier - A windowing library.\nGlazier was created due to limitations with winit, however we have since decided to work together with the winit team to resolve those issues.\nWe now recommend the use of winit over Glazier.\n\n\n","id":"https://linebender.org/","title":"Homepage"},"https://linebender.org/about/":{"body":"This is the website for the Linebender organization on GitHub. The Linebender organization contains a collection of repositories, which provide the tools and utilities to create graphical user interfaces for applications in the Rust programming language.\nIt is also a group of volunteers and enthusiasts who hang out on our Zulip, and who collaborate on designing and coding the different parts of the stack required for UI. We are a friendly bunch, and always welcome newcomers, whether they have any experience with 2D graphics and user interfaces or not.\nAll the work of the Linebender is done in the open, and the full history of all conversations is available on Zulip. In fact, we recommend searching the chat history for any topic that you are interested in, as there have been many discussions in the past with novel and valuable ideas. All code is dual-licensed under the MIT and Apache-2.0 licenses (where possible) and we aim to license non-code material under the CC-BY Creative Commons license. In fact, the non-code portion of this website is licensed under CC-BY, while all code, including any JavaScript written by the authors, is available under the Apache-2.0 license. A copy of the Apache-2.0 license is available in this website's repository. We reuse some code from the 'minima' Jekyll theme under the MIT license. The aim is to make any of the code on this website reusable, so if the licensing is causing friction please contact us on Zulip and we'll work together to solve the problem.\nA separate page describes our contributor guidelines.\nThe organization was started by Raph Levien, and he informally leads and drives the work forward.\n","id":"https://linebender.org/about/","title":"About"},"https://linebender.org/blog/":{"body":"Blog posts\n","id":"https://linebender.org/blog/","title":"Blog"},"https://linebender.org/blog/doc-include/":{"body":"Creating crate level documentation by including your README can lower maintenance burden, as you do not need to manually keep the crate level docs synchronised.\nHowever, when writing this documentation, you will also want to link directly to some mentioned items.\nThese links need to work in all the places that the README is rendered, such as on your package's https://crates.io homepage, in addition to in rustdoc output.\nTo achieve this, you can link to the online documentation for the items:\n\nThis would however mean that users of cargo doc will be redirected to your crate's online docs (as opposed to their local docs) when clicking on that link.\nIt is however possible to make links in included markdown files behave as intra-doc links, by adding a second link reference definition in the documentation comment.\nThis must be placed before the doc = include_str!() line, for example:\n\nThis means that the link has the expected link target on https://crates.io and in rustdoc (including on https://docs.rs).\nThis trick works because when there are duplicate markdown link reference definitions, \"the first one takes precedence\".\nrustdoc sees the intra-doc link before the link to the online docs, and so uses the intra-doc link.\nHowever, when the README is rendered standalone, only the link reference definition for the online docs is present, and so that target is used.\nExample\nFor an example of both of these techniques in action, see the Android Trace crate (android_trace).\nIn particular, the text of interest is: \"the main entry point to the library is AndroidTrace\".\nYou can observe that this link goes to version 0.1.1 on the docs page, but version 0.1.0 elsewhere.\n\nGitHub rendered readme\ncrates.io page\ndocs.rs page\n\nAnd the corresponding source code:\n\nREADME.md\nlib.rs\n\nThe links have since been updated to use latest, but the direct link being to version 0.1.0 shows how this pattern works.\nGetting external documentation links\nrust-analyzer has an \"Open External Docs\" command when you have an item selected.\nThis will open the online documentation for the selected item, generally on https://docs.rs.\nThis works even if the item is yet to be published, in which case it will open the URL where the item would be.\nYou may wish to replace the resolved version number in the URL with latest, e.g. https://docs.rs/foobar/latest/foobar/\nLimitations\n#![doc = include_str!(\"../README.md\")] has two main relevant limitations which you may need to work around.\nThe first of these is in code blocks.\nNormal rustdoc examples can include hidden setup lines, starting with a # character.\nThese will not be rendered by rustdoc.\n\nHowever, other markdown renderers do not support this extension, so the example above will be rendered as something like:\n\nUnfortunately, I am not aware of a workaround for this; my current best suggestion is to avoid using these hidden lines in your README.\nDoctests in included markdown files do also have some diagnostics issues, as reported in rust-lang/rust#81070.\nThe second limitation is with file links, such as a link to your license file of the form [LICENSE-MIT](LICENSE-MIT) (as recommended in C-PERMISSIVE).\nThis is because rustdoc does not support relative file links in Markdown.\nThis can be solved by using the \"opposite\" of this trick - you can use a web link in your lib.rs, and a file link in the README.\nA second trick\nREADMEs contain some content which are not expected to be present in a crate's documentation.\nFor example, a top-level title, which would duplicate the crate foobar header added by rustdoc.\nThis can be resolved by using css in your documentation to hide these items; rustdoc allows embedding CSS in your documentation.\nHowever, this should only be included in your lib.rs, so that the header is shown in other contexts.\n\nAny text in the README which should be excluded from your docs page can then be surrounded by a div with the rustdoc-hidden class, for example:\n\nAs far as I'm aware, this does not have any accessibility considerations, as browsers will not make display: none items available in their accessibility tree.\nTracing Android Trace (see above) also uses this trick to hide the license section from the crate docs.\nThe license information is already present in the crate's info box.\nConclusion\nUsing #![doc = include_str!(\"../README.md\")] can integrate nicely with intra-doc links, if you use some tricks.\nI believe that this pattern reduces the quality gap between bespoke documentation in lib.rs enough that using README includes becomes the right pattern for most crates.\nThis avoids the maintenance burden of needing to ensure that text in the crate level docs and the README do not become out-of-sync.\nI intend to evaluate this technique by applying it across Linebender crates.\nIt may still be better to have bespoke documentation for each location, for projects which can afford the maintenance costs of that solution.\nBut for other projects, this can provide an easy way to improve their crate level documentation.\nThese patterns can also be applied when including non-README markdown documents.\nI suggest linking to this post when using these patterns, to allow future readers of your code to understand the technique being used.\nDiscuss on the Linebender Zulip.\n","id":"https://linebender.org/blog/doc-include/","title":"#![doc = include_str!()] with intra-doc links"},"https://linebender.org/blog/roadmap-may-2024-retro/":{"body":"Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.\nAt the start of May, we created a roadmap for the following three months.\nWe recently went through a process of analysing how well our progress was guided by the roadmap; this report summarises those results.\nVello (original)\nRobust dynamic memory (original)\n\nPriority: Highest.\nStatus: Experimental PR (vello#606), but hasn’t landed.\nWork required on the CPU side API, but the GPU operations are well-understood.\nThis PR could not be released in its current form.\n\nReliable snapshot tests (original)\n\nPriority: High.\nStatus: This was implemented in vello#610.\nThis has already been extremely useful in our review process, as it allows changes to be validated in the files changed view.\nWe also implemented an experiment to use Git LFS, which has been working really well to avoid increasing repository size.\n\nSparse strips (original)\n\nPriority: High.\nStatus: We are continuing this work, but there is no code currently available.\nSee #gpu > Sparse strip path rendering for details.\n\nAdd tests (original)\n\nPriority: Medium\nStatus: This item had already been completed at the time the roadmap was written.\nThis was also expanded upon in.\nDuring our retrospective meeting, we did determine some potential future expansions to testing, namely:\n\nRunning individual stages in isolation, to enable property testing (TODO: Make Vello issue).\nTesting for additional platforms, such as DirectX on Windows and Android (TODO: Make Vello issue).\n\n\n\nProgress beyond roadmap\nWe have also landed several important features which were not part of our planned roadmap.\nThese include:\n\nBlending which uses more than four deep layers (vello#657).\nPreliminary support for embedding pre-existing wgpu textures (vello#636).\nThis was driven by user needs.\nFurther work in this direction is tracked in vello#664.\nSupport for Emoji (COLRv1 in vello#615, bitmap in vello#641).\n\nThe stroke expansion paper documents a key part of Vello's pipeline.\nThis was presented at ACM High Performance Graphics (HPG) 2024, placing 3rd Place in the Best Paper Award.\nMasonry (original)\nComplete text input (original)\n\nPriority: Highest\nStatus: Not that much progress.\nThis work is being continued, and indeed there has been significant progress as of the time of writing.\nThis is tracked in parley#52.\n\nBetter tracing for debugging (original)\n\nPriority: High\nStatus: xilem#384 implements most of this, the rest is deferred.\nThere are known issues with the size of the log files created by default in very large apps.\n\nFix glaring documentation problems (original)\n\nPriority: High\nStatus: The issues mentioned in this item were addressed in xilem#329 and xilem#503.\n\nFinish repository port (original)\n\nPriority: High\nStatus: This was completed.\nWe moved all Masonry issues into the Xilem repository, and updated all references in code to use full links.\nThis move was coordinated in #linebender > Moving Masonry into Xilem.\n\nWrite “widgets in arena” RFC (original)\n\nPriority: High\nStatus: The RFC was rfcs#6, which was mostly implemented in xilem#396.\n\nWrite “pass order” RFC (original)\n\nPrioriy: High\nStatus: rfcs#7 is in draft, and several important parts of the RFC have been completed.\n\nRewrite documentation (original)\n\nPriority: Medium\nStatus: This work has been deferred until the \"pass order\" refactor is complete, as we expect Masonry's core to be quite stable at that point.\n\nImprove focus handling (original)\n\nPriority: Medium\nStatus: Not done.\n\nImprove pointer status handling (original)\n\nPriority: Medium\nStatus: Basic translation of touch events was added in (xilem#313).\nThis unblocked using Masonry on devices where pointer input is not expected (primarily on Android).\nWe have split the remainder of this task into two tasks, with a priority placed on completing the parts which unblock other work (such as scrolling on Android).\n\nProgress beyond roadmap\nMasonry is in a state of flux, however is starting to see a few exploratory users.\nTo unblock these users, some additional important features were added outside of the roadmap, such as:\n\nSupport for embedding Masonry inside a pre-existing event loop (xilem#417).\nSupport for a gap property in the flexbox (xilem#437).\nFixes on iOS, including xilem#418 and xilem#421.\nxilem#233 allowed our tests to be run on CI in a consistent manner.\n\nParley (original)\nCreate abstractions for text selection and editing (original) ?\n\nPriority: Highest\nStatus: There have been useful discussions in parley#52.\nWork has started on this in parley#106 in response to this retrospective.\n\nInline block layout (original)\n\nPriority: High\nStatus: A first cut of this feature was added by Nico Burns in (parley#67).\nparley#76 expands upon this, and has been approved in principle, but is awaiting thorough review.\n\nWrite adequate documentation (original)\n\nPriority: High\nStatus: Some work was done towards this in parley#26, which unfortunately could not be merged.\nparley#97 added some documentation to Fontique.\nFurther documentation work from Nico is currently blocked on the tree-like styles PR parley#76 being merged (to avoid conflicts).\n\nSoftware renderer (original)\n\nPriority: Low\nStatus: This was not completed in the form envisioned.\nHowever, Nico contributed two examples, showing how to use Parley with Swash (parley#54) and tiny-skia (parley#55).\nWe have decided not to carry this forward into the next roadmap.\n\nProgress beyond roadmap\nparley#56 added support for Emoji, which is used with the Vello PRs.\nRecently the harfruzz project, a fork of rustybuzz to be integrated fully with fontations, has emerged as an extremely promising direction for text shaping for the Rust ecosystem. We plan to use it as the basis for text layout.\nXilem (original)\nAndroid bringup (original)\n\nPriority: Highest\nStatus: Android is supported in several of our examples, with the primary work required for support completed in xilem#309.\nNo non-boilerplate code changes are required to get a Xilem application running on Android.\nSome compromises were made, in particular cargo gives an un-silencable warning for each example which supports Android and cross-platform backends.\nWe did reach out to the Cargo team about this use case, but did not get a positive response.\n\nUpdate repository layout (original)\n\nPriority: High\nStatus: This was completed in xilem#302.\nKaur applied the same change to Vello in vello#590.\n\nRework xilem_core to be compatible with Masonry backend (original)\n\nPriority: High\nStatus: This was completed in xilem#310.\nPhilipp then applied this to Xilem Web in xilem#403.\n\nWrite documentation (original)\n\nPriority: High\nStatus: This was not completed.\nThe work in xilem#310 did document some of the core, but there is very little user-facing documentation of the Xilem level.\n\nRe-implement async integration (original)\n\nPriority: Medium\nStatus: The core of this task was completed in xilem#423 was the main implementation.\nTwo-way communication with the async tasks is not yet implemented\n\nAdd unit tests (original)\n\nPriority: Low\nStatus: This was not prioritised.\nWe have raised the priority of this item in our next roadmap.\n\nAdd basic benchmarks (original)\n\nPriority: Low\nStatus: There has been no progress on this item.\nThis will be a \"highest\" priority item in the next roadmap.\n\nProgress beyond roadmap\nXilem has also seen some very useful changes not tracked above, including many community contributions.\nSome highlights of these contributions are:\n\nPhilipp Mildenberger contributed heavily to Xilem's core design, such as by restoring the ability to return ViewSequences by returning to a previous workaround for Rust's overly-cautious trait solver (xilem#472).\nHe also extended the Xilem API by restoring OneOf (xilem#394), and implementing various Adapt nodes (xilem#401).\nAdditionally, he picked up the work to expand Flex to use the new Xilem Core in xilem#428.\nJared O'Connell contributed two new examples, a calculator (xilem#467), and a stopwatch (xilem#492).\n\nThere has also been lots of really good progress on Xilem Web, but we do not roadmap Xilem Web and so we do not cover that progress here.\nAccessKit (original)\nMatt Campbell's work on AccessKit has begun, and a proof-of-concept Android adapter is in progress.\n\nAt the time of writing there is not a permanent link to this work, but it can be seen in the android-basics branch.\nAndroid specific work (original)\nSubclassing View/Application/Activity (original)\n\nPriority: Highest\nStatus: This work is in progress, and unfortunately has required more research than expected.\nWe spent some time investigating DEX injection, which Matt has got implemented.\nHowever, it’s now looking like a custom Activity and View is the way forward, which requires close collaboration with upstream tools.\nWe are continuing to prioritise this highly.\n\nHandling IME (original)\n\nPriority: Highest\nStatus: This work is ongoing.\nwinit#3787 allows opening a virtual keyboard, however this does not integrate with full IME (so for example, it is incompatible with autocorrect).\nReal IME requires the Activity to support it directly and therefore involves content view subclassing.\n\nGesture recognition (original)\n\nPriority: Low\nStatus: xilem#313 added emulated mouse press and move from touches.\nThis unblocked use of Xilem on Android, but is not the intended final state.\nThe priority of detecting a scrolling gesture has been increased slightly.\n\nConclusions\nOverall, the roadmap provided a useful guide of what to work on, and we have implemented many of the most important features from it.\nOne clear recurring issue is documentation - even where we have chosen to roadmap this, we have made little progress.\nSimilar concerns are clear for testing in Xilem, although we have laid some important groundwork there.\nWe firmly recognise the role of documentation as an aid to onboarding, which is becoming more important as we work towards alpha releases.\nI believe that we can make good progress in this area before the end of 2024.\n","id":"https://linebender.org/blog/roadmap-may-2024-retro/","title":"Retrospective on the May-July roadmap"},"https://linebender.org/blog/roadmap-may-2024/":{"body":"On May 7 and 8, 2024, folks from the Linebender team went to the RustNL conference for two days, followed by two days of Unconference.\nBy that point, we all felt fairly exhausted, but because Raph is a cruel taskmaster since we wanted to use the opportunity we had, we came together in our hotel's conference room to discuss the Linebender project, and what we wanted from it.\nWe'd initially thought that this day would be an informal day of unstructured chatting about the ecosystem, but it fairly quickly turned into a semi-formal planning exercise, where we tried to figure out a roadmap for the next few months.\nWhat follows is a comprehensive summary of what exactly we're planning to do.\nWe've tried to focus on blockers, where a missing feature in one project is stalling progress on other projects, because those are the hardest barriers to coordination, and we wanted to take advantage of being in the same room together to knock them down.\nThis is a snapshot of the project status at the time we're writing this.\nIt includes some work we already finished since RustNL, but will not be updated when further work finishes.\nVello\nRobust dynamic memory\n\nPriority: Highest.\nAssigned: Daniel McNab.\nDescription: Allocating dynamic memory in a robust way is essential to display large scenes without graphical artifacts. We have several possible solutions, we need to implement one.\nIssue: vello#366\n\nReliable snapshot tests\n\nPriority: High.\nAssigned: Daniel McNab.\nDescription: Snapshot tests are essential to test regressions in graphic software. Masonry's test suite heavily depends on them. But it's flaky right now because even when the fonts and inputs are exactly the same, renderers can have subtle differences that make the snapshots slightly different. We either need to create a fully deterministic renderer or add testing infrastructure that can tolerate small differences. nv-flip might have what we want.\nIssue: vello#608\n\nSparse strips\n\nPriority: High.\nAssigned: Raph Levien.\nDescription: Sparse strips are a new research direction that might significantly improve our rendering pipeline and our memory footprint. We want to write a prototype implementation so we can confirm the performance benefits.\nZulip thread: Sparse strip path rendering\n\nAdd tests\n\nPriority: Medium.\nAssigned: Olivier Faure.\nDescription: Adding tests is often a \"we'll do it later\" item, but it has short-term benefits as well. Adding tests would help Vello contributors check that their modifications don't add regressions to the crate, and help us catch hidden bugs. As a first step, we'd want to at least add some extremely basic tests, such as checking that Vello doesn't crash when we run a sample image through the CPU shaders.\nPR: vello#439\n\nMasonry\nComplete text input\n\nPriority: Highest.\nAssigned: Olivier Faure, Aaron Muir Hamilton.\nDescription: We'd like to bring up Masonry's textbox widget to be best-in-class among Rust frameworks. We want to support native-feeling interactions out of the box, such as cursor movement (go to next word, go to beginning of line), selection (select to end of text) and editing (IME, deleting an entire word, etc). This is something other framework developers have expressed interest in, so we want to implement it in a composable way.\nIssue: xilem#388\n\nBetter tracing for debugging\n\nPriority: High.\nAssigned: Olivier Faure.\nDescription: Masonry currently uses the tracing crate to produce logs usable for debugging. These logs could be improved, so that a user finding a bug can quickly narrow in on information relevant to the bug, without having to restart the app with changed log levels. The bulk of the improvement would be to implement a new subscriber with multiple layers.\nIssue: xilem#250\n\nFix glaring documentation problems\n\nPriority: High.\nAssigned: Olivier Faure.\nDescription: Masonry's documentation hasn't been updated since the port to Winit. While a lot of the code is still in flux, and thus hard to document, we should at least do a quick rewrite pass to remove references to Piet, Glazier, etc.\nPR: xilem#329\n\nFinish repository port\n\nPriority: High.\nAssigned: Daniel McNab.\nDescription: We've ported the masonry-rs repository to the linebender organization, but that repository isn't where the crate's code lives anymore. We should update the README to reflect that information, port the issues to linebender/xilem, and archive linebender/masonry.\nZulip thread: Finishing the Masonry repository transition\n\nWrite \"Widgets in Arena\" RFC\n\nPriority: High.\nAssigned: Olivier Faure.\nDescription: This was something alluded to in the January blog posts. We want to move Masonry from storing widgets in WidgetPod to storing them in a slotmap-like arena. This is a large enough change to write an RFC about it.\nPR: rfcs#6\n\nWrite \"Pass order\" RFC\n\nPriority: High.\nAssigned: Olivier Faure.\nDescription: Right now widgets can use context methods in their different passes to request that other passes be run. What passes can run what other passes isn't clearly documented, especially around edge cases. We should write an RFC to nail down the passes, how they can communicate, and the rationale around them.\nPR: TBD.\n\nRewrite documentation\n\nPriority: Medium.\nAssigned: Olivier Faure.\nDescription: Masonry's documentation hasn't been updated since the port to Winit. Once other major changes are implemented, the documentation should be brought up to date. We should avoid procrastinating on documentation too much just because the architecture is still in progress.\nIssue: xilem#389\n\nImprove focus handling\n\nPriority: Medium.\nAssigned: Olivier Faure.\nDescription: We should improve tab focus in Masonry. Right now tab focus has some bugs, doesn't cover buttons, isn't updated by clicks, and uses architecture inherited from Druid that could be strongly simplified once other architectural changes are completed.\nIssue: xilem#390\n\nImprove pointer status handling\n\nPriority: Medium.\nAssigned: Olivier Faure.\nDescription: We should centralize and improve how Masonry handles pointers. In particular, we should add an explicit \"pointer capture\" API that makes other widgets not get events from that pointer until the pointer is released or lost.\nIssue: xilem#312\n\nParley\nCreate abstractions for text selection and editing\n\nPriority: Highest.\nAssigned: Chad Brokaw, Aaron Muir Hamilton.\nDescription: We want Parley to implement types and methods that Masonry and other editors will be able to use to create a text-editing widget, or to handle selection in non-editable text. The initial implementation may be located in Masonry.\nIssue: parley#52\n\nInline block layout\n\nPriority: High.\nAssigned: Chad Brokaw.\nDescription: Parley should support laying out inline content the way web browsers do, where blocks are spliced into your text and will be laid out according to available inline space the same way words are.\nIssue: parley#25\nPRs: parley#67, parley#76\n\nWrite adequate documentation\n\nPriority: High.\nAssigned: Nico Burns.\nDescription: Parley currently has virtually no documentation. If we want it to become a foundational crate, we need to tell people how to use it.\nPR: parley#26\n\nSoftware renderer\n\nPriority: Low.\nAssigned: Chad Brokaw.\nDescription: Create a software renderer for the glyphs created by Parley, so that users can easily import Parley in their library without depending on a graphics API like Vello. The software renderer should be black-and-white for simplicity. We'll call for volunteers to implement COLRv1 and other advanced features.\nPRs: parley#54, parley#55\n\nXilem\nAndroid bringup\n\nPriority: Highest.\nAssigned: Daniel McNab.\nDescription: We want Xilem to reliably work on Android. Running your Xilem app should require a small number of steps. Ideally, it should be as simple as running cargo some-command in your project.\nPR: xilem#309\n\nUpdate repository layout.\n\nPriority: High.\nAssigned: Olivier Faure.\nDescription: We've agreed on a layout for Linebender repositories. We should move projects in the Xilem repo to match that layout.\nPRs: xilem#302, vello#590\n\nRework xilem_core to be compatible with Masonry backend\n\nPriority: High.\nAssigned: Daniel McNab.\nDescription: The version of Xilem that was ported to Masonry used a different View trait that is incompatible with the current xilem_core crate. We need to rework xilem_core to get traits that can be used by both Masonry and xilem_web. Doing so while keeping readable code is non-trivial.\nPR: xilem#235, xilem#310\n\nWrite Documentation\n\nPriority: High.\nAssigned: Olivier Faure.\nDescription: Xilem's lack of documentation is one of the problems new users complain about the most often. We need to avoid staying in that state for too long.\nIssue: xilem#392\n\nRe-implement async integration\n\nPriority: Medium.\nAssigned: Daniel McNab.\nDescription: One of Xilem's selling points is the ability to handle virtual lists and async sources of data. That ability was temporarily removed for the Masonry port, but we'd like to add it back. We don't want Masonry to be aware of async stuff, but the AppDriver trait should at least provide a method which lets Xilem access Masonry internals on its own.\nIssue: xilem#340\n\nAdd unit tests\n\nPriority: Low.\nAssigned: Olivier Faure.\nDescription: We need to figure out an architecture for doing unit tests in Xilem. Tests can then be added by volunteer contributors. At some point we should hopefully switch to a \"new test for every new feature\" workflow.\nIssue: xilem#393\n\nAdd basic benchmarks\n\nPriority: Low.\nAssigned: Olivier Faure.\nDescription: Right now we're mostly working off vibes to know whether or not any of our work improved performance or introduced regressions.\nWe should write at least one benchmark that would test a basic Xilem use-case, so we get a general idea of how our performance is progressing.\nIssue: xilem#362\n\nAccessKit\nMatt Campbell's contract with Google hasn't started yet.\nWhen it does, the top priority will likely be the Android backend.\nThe plan is to study existing Android accessibility implementations for non-Java toolkits, including Flutter, Chromium, and Gio, to get a better understanding of what's required to implement Android accessibility from scratch.\nBeyond Android support, we've only had cursory discussions of what work Matt will do for the rest of the year.\nPossible themes include scrollable containers, virtualized lists, richer text support (e.g. exposing font and style attributes) across platforms, and better integration into Xilem/Masonry.\nAndroid-specific work\nGetting the Android port right involves a lot of small changes and making things feel non-broken.\nSome notable sub-goals:\nSubclassing View/Application/Activity\n\nPriority: Highest.\nAssigned: Aaron Muir Hamilton, Raph Levien.\nDescription: The Java classes of an Android application are where the rubber meets the road. We're investigating what we want our boilerplate to look like.\n\nHandling IME\n\nPriority: Highest.\nAssigned: Aaron Muir Hamilton, Raph Levien.\nDescription: We need to extend Winit to be compatible with Android IME interfaces. An Android application without support for the virtual keyboard and other input methods is a non-starter. Our design choices here will have some influence on accessibility as well.\n\nGesture recognition\n\nPriority: Low.\nAssigned: Aaron Muir Hamilton.\nDescription: When the user swipes on the screen, we want to send some kind of scrolling event instead of a normal pointer event. Ideally there should be first-class support for that event to handle momentum scrolling, but a dumber solution would just emulate mouse wheel ticks.\n\nConclusion\nWhew! We have our work cut out for us there.\nOverall, I'm feeling very optimistic about the coming months.\nIn the weeks since we first drafted this roadmap, we've already made a lot of progress on our respective tasks (for instance Daniel is now running on what async experts call a \"work-stealing\" algorithm), so it does look like we'll meet our deadlines.\nWhat comes after that is a bit hazier.\nOur three areas of focus are likely to be Android support, accessibility, and developer experience.\nAs we fill out gaps in our feature set, Xilem is moving towards its faraway goal: becoming a stable, mature framework for GUI applications.\nWe're not GUI yet, but we certainly hope to be one day.\nIn the meantime, stay tuned!\n","id":"https://linebender.org/blog/roadmap-may-2024/","title":"May-July roadmap for Linebender"},"https://linebender.org/blog/rustnl-2024-unconference/":{"body":"On May 7 and 8, 2024, folks from the Linebender team went to the RustNL conference in Delft.\nWe listened to some Rust-related talks, Raph gave one on Xilem, Rik Arends did the \"hot-reload my entire editor live\" thing that makes every other Rust GUI developer jealous, it was an all-around great time.\nAfter RustNL, though, another less-documented event called The Unconference.\nIt was from roughly the same organizers and took place in the same city, but the format was fairly different.\nThe Unconference wasn't livestreamed, and I haven't found any public discussion of it, so I thought I'd take the time to describe a bit of what was going on.\nThe format\nThe \"Unconference\" was two days of loosely structured chats between members of various Rust project teams where people talked about ecosystem collaboration, complained to lang team members that their favorite feature wasn't implemented yet, went to pester everyone else about variadic generics, and other good fun.\nAttendees were split into three teams:\n\nThe Rust project.\nGUI and Applications.\nEmbedded development.\n\nDiscussions inside these teams were mostly self-organized, with cross-team discussions mostly taking place during lunch and recess.\nOn the tyranny of structurelessness\nNote: This section is very much my personal opinion and doesn't represent the Linebender project as a whole.\nI'm not sure the self-organized format worked well.\nFrom what I saw, the Embedded team took well to it, and the Rust team was kept productive thanks to Alice Cecile's efforts in marshaling everyone.\nIn the case of the GUI team, people were spread in a very large room, which should have been conducive to small side discussions and people splitting up to talk about the problems that interested them.\nInstead, there was an unspoken accord to progress through agenda items one by one, with a few people dominating the discussions on these items.\nBecause those people we spread around a large room, they had to talk loudly to address each other, which left little room for side-discussions.\nBecause the people talking were naturally the most confident and extroverted, more introverted people ended up taking a passive role in the discussion.\nTo me, this feels like a strategic mistake.\nIt was a setup that encouraged bikeshedding and long back-and-forths and discouraged plurality of opinions.\nIt's no coincidence that the most interesting conversations of the Unconference happened at lunch: lunch was the point of the Unconference where people were most mixed, had the most spontaneous conversations, and were least constrained by having to follow what someone else was saying.\nOur discussions were still productive, I just feel like the format could have been improved.\nThe GUI team\nAs a member of the Linebender project, I was mostly exposed to the GUI team's proceedings.\nThe main topics of interest were:\n\nBuild tooling (especially for Android and other non-desktop platforms).\nText layout and editing.\nWinit adoption.\nAccessibility.\nPotential for further collaboration.\nRequests for new Rust features.\n\nNote that I'm skipping a lot of topics from the agenda and other side discussions.\nThe topics above were the most prominent during those two days.\nThere was also a fair amount of informal chatter around LogLog Games' strongly critical Leaving Rust gamedev after 3 years article.\nI think those discussions mostly reflected the Bevy community's consensus, that the article had some flaws but overall pointed at very clear weaknesses in the Rust GUI / game engine ecosystem.\nBuild tooling\nEveryone agreed that a better solution was needed to ship non-TUI Rust apps.\nThere was discussion about various platforms and build systems, and the difficulty of having to e.g. write Java code for an Android port, and whether anyone wanted to take responsibility for maintaining that glue layer for the rest of the ecosystem.\nNo actionable decisions were made, but the consensus seems to be that although integrated build tools are desirable, external build tooling for complex platforms (primarily Apple and Android) is likely to remain necessary.\nNobody seems to have stepped up to work on multi-target builds in Cargo, and since external build tools are required as it is, most people are okay with building everything several times when they release a multi-target package.\nMost users are comfortable invoking platform-specific tools for bundling, signing, and manifest generation, so there is not much urgency for integrated tooling for these.\nText layout and editing\nThere was some widespread interest in the Linebender ecosystem's text-handling crates.\nFrom what I remember, Rik Arends and others had concerns about whether e.g. Parley and Swash depend on our Vello renderer (they don't).\nSome people also wanted Parley to be decoupled from Swash.\nPeople were especially interested in the idea of having access to a common text-editing widget, or at least infrastructure for creating one.\nThat widget would handle IME, text selection, accessibility actions, etc, in a way that would feel native to different platforms with their own text-editing quirks (mobile, macOS, Linux with vim mode, etc).\nWinit\nBy now all of the Rust ecosystem has firmly converged on winit as the windowing platform-abstraction solution of choice.\n(Well, not all! One small project with indomitable maintainers still holds out against the invaders.)\nThe consensus during this discussion seemed to be that Winit was there to stay.\nTAO users present were generally interested in being able to use upstream Winit in the future, if its API adopts or supersedes the improvements made in TAO.\nMost were happy to see Winit becoming more trait-oriented, and to see the dpi crate spun off from Winit.\nGlazier is still shelved and we're planning to port its features to Winit until it reaches feature parity.\nA discussion that came up was the idea of splitting more \"vocabulary types\" from Winit into standalone crates.\nVocabulary crates, e.g. crates that only define types and very little code, have a very low cost in memory and build times, while allowing projects to interop with e.g. Winit without actually adding a dependency on Winit.\nThis was connected with the discussions about text editing: having a vocabulary crate that would list Winit's events and also Parley's cursor movements would allow for a very low-dependency text editing widget.\nAccessibility\nNote: This section is also my personal opinion and doesn't represent the Linebender project either.\nThe subject of Accessibility came up informally, but I'll claim it was underexplored.\nWhile the subject was on the agenda, by the time we reached it the Unconference had been running long enough that everyone was tired and ready to leave or get to the catering.\nThis is an unfortunate pattern that I think is worth pointing out: if projects don't make a deliberate effort to prioritize discussions of accessibility, the subject will be left out.\nMatt Campbell, the maintainer of AccessKit, could not attend the Unconference.\nI'm concerned that, in his absence, other maintainers might have felt a dilution of responsibility: since the accessibility guy wasn't there, nobody felt empowered to bring up accessibility.\n(This might sound like it contradicts my section about structurelessness above.\nIt doesn't.\nI'm not saying organizers should have pushed harder for accessibility - they did try - I'm saying that we should strive for a culture where framework developers think about accessibility without waiting for someone to tell them to.)\nOne point did come up during the discussion which I'd like to hammer in: the Rust ecosystem should adopt a holistic view of accessibility.\nAccessibility isn't just about screen readers, and making a framework accessible doesn't stop at adding AccessKit as a dependency, though doing so is a great first step.\nRik asked if there was a minimal set of ARIA attributes that people could start using in their UI, as the set of available attributes is gigantic.\nThe AccessKit framework is rich, and it's not obvious at first glance how much is needed versus nice-to-have.\nThe current reference in the Rust ecosystem is the AccessKit implementation in egui.\nRequests for Rust features\nJon Kelley, the creator of Dioxus, had a laundry list of features he wanted from the Rust language.\nThat list was later filed in the Project Goals repository.\nThe requests were well-documented, with motivating examples in existing Dioxus code that would clearly be improved by the features.\nMost of them felt both self-contained and like they would tremendously both beginners and veteran Rust developers; though Jon made the point that the papercuts he wanted to remove were especially punishing for new developers trying to become familiar with Rust.\nOverall people were very enthusiastic about them, and the lang team members in the room seemed pretty optimistic that those features could be added.\nMy favorite proposals were:\n\nCapture trait for auto-cloning reference-counted types in closures.\nAutomatic partial borrows.\nOptional struct attributes.\n\nJon also wanted support for a remote cache of pre-built crates, so that users wouldn't suffer from having to rebuild dozens of crates every time you download your crate's dependencies.\nThe consensus from Rust maintainers was that such a cache would be essentially impossible with Rust's current architecture.\nNiko Matsakis recently released The borrow checker within, which feels like a follow-up to some of these discussions.\nCollaboration in the Rust GUI ecosystem\nOver the last two years I've joked a few times that everybody in the Rust GUI ecosystem wants the ecosystem to standardize on common crates, as long as it's their crates.\nAfter RustNL, I'm pleased to report this joke isn't accurate anymore.\nA vibe that permeated all discussions was people wanting work to be pooled.\nIt felt like people didn't strongly care whose crate we adopted, as long as we all agreed the crate made sense:\nwe're slowly crawling out of the xkcd 927 dilemma.\nThe main ecosystem crates that people are enthusiastic about sharing are:\n\nwinit for creating windows.\nAccessKit for plugging into accessibility APIs.\nwgpu for using modern GPU features.\n\nJon Kelley also said he would be interested in using Masonry as the native backend for Dioxus, though we haven't hashed out details yet.\nCorporate funding\nFor open-source projects, \"Who funds this\" is a difficult question: in any healthy project, there is a large scale of contributions, with individual non-corporate contributors at one end, and companies paying cash to the project's treasury at the other.\nIn-between are self-employed people like me contracted to work on an open-source project, and corporate employees who contribute to the project as part of their 9-to-5 job.\nSome monetary contributions can also come from individual non-corporate donors: Servo has about fifty of them, for instance.\nWith that in mind, some notable sponsors for projects represented at the Unconference were:\n\nGoogle Fonts: Linebender projects.\nFuturewei: Dioxus, Makepad, Robius and Servo.\nEmbark: Bevy, winit and rust-gpu.\nForesight Spatial Labs: Bevy.\nRerun.io: egui.\n\nNot present at RustNL but relevant to the ecosystem are System76 (funding COSMIC-Text and contributing to iced), Kraken (funding iced), and Slint who are self-funding as a startup targeting embedded UIs and couldn't attend due to time constraints.\nOverall the number of different backers feels like a symptom of a healthy ecosystem: while some large corporate sponsors bring much more resources than others (Google and Futurewei especially), the ecosystem isn't in a state where any specific backer pulling out would completely collapse progress.\nConclusion\nBefore anything else, I'd like to express a big thanks to the volunteers who helped organize RustNL.\nMost of the attendees were absolutely exhausted after two days of talks and two more days of Unconference, but these folks had to run the darn thing.\nI think everyone who attended was impressed with them.\nOverall RustNL and the Unconference felt like getting a year of coordination done in a week.\nIt was a thoroughly productive time, and I couldn't be happier I attended.\nEveryone I asked about it shared the same opinion.\nAnd the discussions we had during the event showed there was a great appetite to push the ecosystem towards more cooperation, both between GUI projects and with Rust maintainers!\nI'm feeling more hopeful about the future of Rust GUI than ever.\nNow it's time to get back to work.\n","id":"https://linebender.org/blog/rustnl-2024-unconference/","title":"Report on the RustNL 2024 Unconference"},"https://linebender.org/blog/tmil-09/":{"body":"Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.\n\nXilem\nXilem is our flagship GUI project, inspired by SwiftUI.\nIt lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.\n\nHTTP cats example (xilem#571).\nlens, a shorthand for a common component pattern (xilem#587).\nWe added Views for some existing and new widgets:\n\nGrid layout (xilem#570).\nImages (xilem#571).\n\n\n\n\n\n\n\nThe HTTP cats example.\n\n\nMasonry\nMasonry is the widget system used by Xilem.\nIt provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.\nOur ongoing pass specification project has been largely implemented.\nThat work is now in a wrapping-up stage, which has allowed Olivier to work on improving the codebase's quality in general.\nSome highlights of work from September:\n\nxilem#515: Removes unimplemented functionality from our text handling code.\nxilem#570: An implementation of a grid layout, by Jared O'Connell.\nxilem#550: Restores scroll requests, as used by text inputs.\nxilem#565: Allows widgets to implement more efficient pointer position dispatching, by new Linebender member Tom Churchman.\nxilem#580: Adds screen reader support for the textbox widget.\n\n\nSome ongoing work includes:\n\nxilem#615: Detailed accessibility information for text input and prose widgets.\nxilem#606: Custom client side decorations for Wayland, by Marco Melorio.\nxilem#605: Greater flexibility in the layout of the Image widget, by failingprovince.\nxilem#591: An SVG-like widget for absolute positioning, by Muhammad Ragib Hasin.\n\nVello\nVello is our GPU vector renderer.\nIt can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.\nThe month of september included a lot of progress towards the 0.3.0 release.\n\nWe no longer consider Vello to be experimental (vello#691). Please note that Vello is still an alpha, and has several known issues.\nAn implementation of the single pass scan described last month is being created by Thomas Smith in vello#685.\n\nParley\nParley is a text layout library.\nIt handles text layout, mostly at the level of line breaking and resolving glyph positions.\n\nNico Burns contributed a new way to assign layout properties in parley#76.\n\nOthers\n\nDaniel and Olivier's \"office hours\" appointments can still be booked by anyone for open-ended discussion of the ecosystem.\n\nSee Daniel's schedule here.\nSee Olivier's schedule here.\n\n\n\n","id":"https://linebender.org/blog/tmil-09/","title":"This Month in Linebender, September 2024"},"https://linebender.org/blog/tmix-01/":{"body":"Welcome to the first in the “this month in Xilem” series, bringing updates on the Xilem UI toolkit.\nThere were two blog posts on the new Linebender blog.\nThe first, Xilem 2024 plans, sets out the goals for the project for the year.\nThe second, Roadmap for the Xilem backend in 2024, by Olivier Faure, presents a roadmap for the Xilem native widget set.\nA major feature of the roadmap is a clean boundary between the Xilem reactive framework and the lower level widget set.\nWe hope that enables experimentation with other reactive frameworks and possibly integration with other projects, rather than requiring everybody to buy into the Xilem stack.\nOn the planning front, a major decision was whether to continue work on our own window creation library, Glazier, or whether to join forces with winit.\nAmong other things, since Android is a primary target for our work, and winit already has a working Android back-end, it offers an appealing path to getting that up quickly.\nWe have decided to try joining forces with winit, and look forward to future collaboration.\nOver the next few weeks, that will entail porting Xilem over to winit (xilem#163) and also trying to land working Android IME (soft keyboard) support in winit (winit#2993).\nIn Vello, a major advance was porting the low level font handling code from the experimental swash crate to the production-quality skrifa (vello#423).\nSkrifa is being developed by Google Fonts as a memory safe library for loading font files, and is integrated into Chromium builds.\nOver the coming weeks, a goal is to release Vello (and supporting crates) on crates.io.\n","id":"https://linebender.org/blog/tmix-01/","title":"This Month in Xilem, January 2024"},"https://linebender.org/blog/tmix-02/":{"body":"Early this year, we made a decision to use the winit crate for window creation, as opposed to rolling our own.\nThat work has now landed in main (xilem#176 was the main PR, with a number of followups).\nA major motivation was to enable more platforms, with Android being a major goal.\nThat work is in progress; a major subtask is enumerating the system fonts.\nAs expected, this move has uncovered rough edges in winit and some regressions in behavior.\nWe plan to address those, with the improvements hopefully benefiting the entire Rust UI ecosystem.\nThe Vello crate has been published as version 0.1, with significant documentation improvements and a friendly example.\nWe consider this an alpha-quality release, as there are known issues.\nEven so, we want to get a release out to facilitate integrations and shake out problems.\nAnother major area of work on Vello is investigation of startup time, which can take multiple seconds when the platform's GPU drivers are slow at compiling the compute shaders.\nA number of techniques mitigate that.\nOne is to compile shaders in parallel, using multiple cores, and that has landed (vello#455).\nAn even bigger improvement will be caching compiled shaders.\nDaniel McNab has made an encouraging prototype (vello#459), and the ultimate goal is to land that in wgpu so projects across the ecosystem can benefit from it (wgpu#5292).\nThe work to compute strokes on the GPU using Euler spirals continues, but has not yet landed.\nThe current state is a draft PR that implements the logic in Rust code, which now needs to be translated to WGSL for GPU evaluation (vello#496, draft PR).\nThere has been progress at higher levels of Xilem.\nAmong other things, Nico Burns landed a scroll view implementation (xilem#155), and Philipp Mildenberger has been steadily refining xilem_core and xilem_web, including fine grained tree structure tracking and minimal/efficient DOM-tree-updates (xilem#160).\n","id":"https://linebender.org/blog/tmix-02/","title":"This Month in Xilem, February 2024"},"https://linebender.org/blog/tmix-03/":{"body":"Since the last update, there have been three newly released projects from Linebender:\n\n\nVelato: A parser and driver for Lottie animation files in applications using Vello\n\nVello SVG: Allows displaying (some) SVG documents in Vello applications\n\nAndroid Trace: Resilient bindings to NDK Tracing and an integration with tracing\n\nIf you have a WebGPU capable browser you can check out the web demo of Velato.\nImplementation work for rfcs#1 has started. Masonry is being ported to Vello in masonry#56, with the next step being a move to Winit.\nThis work can be followed in the #masonry stream on Zulip.\nWe have landed some important improvements to Vello.\nEuler spiral based stroke expansion (vello#496) enables GPU stroking by default, significantly improving performance in scenes which make heavy use of strokes.\nAdditionally, we now support scenes with more than 64k draw objects (vello#526).\nWe have also been making progress on vello#366, by evaluating different strategies for memory allocation.\nThe first part of this has landed in vello#537, which avoids undefined behaviour in more out-of-memory cases.\nAdditionally, we have been able to continue taking advantage of improvements in the foundational font crates from Google Fonts.\nThis has enabled support for font fallback in xilem#196.\nHinting has been unblocked by vello#544, although the implementation has not yet landed in Xilem.\nrfcs#5 has been approved, which will improve the robustness of our continuous integration.\nKaur Kuut, the author of the RFC, has also landed these changes in vello#523.\nA focus for the next month is preparing for the RustNL conference at the beginning of May.\nWe are hoping to present a compelling demo there.\n","id":"https://linebender.org/blog/tmix-03/","title":"This Month in Xilem, March 2024"},"https://linebender.org/blog/tmix-04/":{"body":"Again, last month saw a substantial amount of infrastructure work in the development of Xilem.\nThe biggest change is landing Masonry as a crate within the Xilem repo (xilem#203) and adding a new xilem_masonry front-end.\nThe existing xilem widget tree remains in the tree during a transitional period, but the focus of development is now on Masonry.\nMasonry is a principled abstraction layer within the stack.\nWhile it is designed to work well with the Xilem reactive architecture, it is not dependent on it.\nWe'd love to see experimentation with alternative reactive frameworks, and also language bindings.\nA lot more detail about the motivation and design of Masonry is in Olivier's roadmap blog.\nTwo major infrastructural crates have been published.\nParley is our text layout crate, supporting variable fonts and other advanced features.\nSupporting Parley is fontique, a crate for enumerating the system fonts and making them available for itemization (choosing the right font to support a particular script).\nIn GPU rendering land, we have written a paper on GPU stroke expansion (arXiv, repo) and submitted it to a conference.\nThis paper explains quite a bit of the math behind Vello's path rendering, and explains how we adapted it for high performance on the GPU.\nIt's also a good time to note the wgpu 0.20 release, which contains some work to improve on suboptimal zero initialization that will dramatically improve startup time on many platforms, including Android (wgpu#5508).\nIt also has support for subgroups, which will unblock further performance improvements in Vello.\nWe're very much looking forward to participating in RustNL 2024, where Raph will present a talk on Xilem.\nIt looks like it will be a great opportunity to meet with other Rust UI ecosystem projects to find common ground and possibilities to collaborate.\n","id":"https://linebender.org/blog/tmix-04/","title":"This Month in Xilem, April 2024"},"https://linebender.org/blog/tmix-05/":{"body":"Several members of Linebender attended RustNL at the start of May.\nRaph gave a talk titled Xilem: Let's Build High Performance Rust UI (YouTube).\nThe conference also provided a great opportunity to meet with developers from other Rust user interface projects;\nOlivier has produced a report on the unconference, which will be published here shortly.\nIn addition, those in attendance met after the conference and worked on a roadmap for Linebender, which we are also planning to share here.\nWe have taken several important steps on Xilem.\nAt the start of the month, we released Xilem 0.1.0 and Masonry 0.2.0.\nThis is the first published release of Xilem, and includes text input (xilem#241), AccessKit integration (xilem#244) and a TodoMVC inspired example (xilem#257).\nWork through the rest of the month included explorations of a generic View trait (xilem#310), and an Android port (xilem#309, xilem#313).\nrfcs#6 is designed to reduce boilerplate when using Masonry, which should help those creating custom Masonry widgets.\nOther Linebender projects have seen steady improvements.\nvello#575 significantly reduced shader compilation time at startup for projects using Vello, and vello#516 enabled clearer error handling.\nNico Burns has started an exciting project for inline box layout (parley#67), which will enable Parley to be used in projects which must implement Web layout.\n","id":"https://linebender.org/blog/tmix-05/","title":"This Month in Xilem, May 2024"},"https://linebender.org/blog/tmix-06/":{"body":"We released Vello 0.2.0 at the start of the month, which included some key improvements discussed in previous months' updates.\nWe also merged initial handling of Emoji (vello#615), which supports glyphs which use the COLR specification (Apple's system emoji font does not use this format and so currently will not render).\nIn-flight work includes an enhanced testing setup (vello#610), GPU memory allocation robustness (vello#606), and improved correctness for some unusual strokes (vello#607).\nThe GPU-Friendly Stroke Expansion paper has been accepted to High Performance Graphics 2024, and will be presented in Denver on July 26.\nA revised draft of the paper is published on arXiv.\n\n\n\nA toy Emoji viewer example (xilem#420) running on Android.\nThis example uses system fonts, so has limited platform support because of the caveat mentioned above.\n\n\nxilem#310 brought in some new ideas about how Xilem Core can be structured, which enables support for specialised kinds of View, such as for window properties.\nAdapt views built on this were used to create an Elm-inspired example in xilem#401, showing the flexibility of the Xilem architecture.\nPhilipp Mildenberger has been prolific in his work on Xilem, as a co-author of the new Xilem Core, and in adapting Xilem Web to use it.\nHe also worked to bring support for OneOf views to Xilem Core in xilem#394 - these were previously only supported in Xilem Web.\nMasonry's observability support has also been improved, with automatic tracing to a temporary file in debug builds added in xilem#384.\nxilem#396 implements rfcs#6, changing the architecture of Masonry to make it easier to write new features and tests.\nThere was also some excellent community engagement with Xilem in June.\nVeniamin Ilmer has created an open source Minesweeper game using Xilem.\nThe discussion on Zulip (in #xilem > Minesweeper converted from Iced to Xilem) has been very useful in guiding areas for improvement.\n\n\n\nScreenshot by Veniamin Ilmer of their Minesweeper game, used under the Apache 2.0 license.\n\n\nFollowing on from May, Olivier wrote and published a report on our experience of the RustNL unconference.\nThis led to some useful discussion online - see the zulip thread corresponding with that post for links.\nWe are now in the final month of the May-July 2024 roadmap.\nIn the intervening time much of the work has been started or completed, although there have been some changes of priorities.\nI expect that we will soon be looking at prioritising items on our long-term roadmap.\n","id":"https://linebender.org/blog/tmix-06/","title":"This Month in Xilem, June 2024"},"https://linebender.org/blog/tmix-07/":{"body":"Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.\nThis month saw a lot of community contributions to Linebender projects.\nPhilipp Mildenberger especially is a major driver for progress on Xilem and especially the xilem_web crate.\nBruce Mitchener has been very active reviewing pull requests, which is an under-appreciated but essential task for any open-source project.\nXilem\nXilem is our flagship GUI project, inspired by SwiftUI.\n\nxilem#423 integrates Tokio into Xilem, showing how the Xilem model can interact with async work.\nxilem#428 by Philipp adds explicit support for Flex parameters.\nPhilipp ported the async work to Xilem Web, and experimented with some extensions:\n\nxilem#440 is an experiment into async event handling.\nxilem#448 added the MemoizedAwait view, which runs a task whenever the input data has a new value.\n\n\nxilem#467 by Jared O'Connell adds a calculator example.\nThis example can also be run on Android (xilem#474).\n\n\n\n\nThe new calc example for Xilem.\n\n\nMasonry\nMasonry is the widget system used by Xilem.\nThe most impactful change was the implementation of the \"Widgets in arenas\" RFC in xilem#396.\nWidgets are now stored in a global arena, which has little impact on the public APIs but make future changes a lot easier to implement.\n\nxilem#417 exposes an unstable API for embedding Masonry and Xilem into an existing Winit application.\nxilem#418, xilem#421 improved our unofficial support for iOS.\nrfcs#7 specifies a clearer architecture for passes, including simplifications necessary for compositor use.\nActually integrating with the compositor is still out of scope for reasons Raph has laid out before, but the new pass specification gives us a starting point when we get there.\n\nVello\nVello is our GPU vector renderer.\n\nThe GPU-friendly Stroke Expansion paper has been released.\nFollow the link for the outline, the full paper, demos, and a talk at the HPG 2024 conference.\nNote that the interactive demo is built with xilem_web.\nVello 0.2.1 has been released.\nThis patch version resolves a longstanding crash around empty scenes.\nvello#643, vello#647 switch to Git LFS for storing snapshot test files.\nGit LFS is an open-source Git extension supported by Github, that lets users commit large files to a repository without permanently bloating it.\nUsing it has trade-offs around bandwidth usage in CI, but otherwise matches our use-case perfectly.\n\n\n\n\nThe demo for the stroke expansion paper, which was created using Xilem Web.\nAn interactive version can be found on the paper's website.\n\n\nParley\nParley is a text layout library.\nNico Burns contributed quite a few improvements to Parley this month:\n\nparley#67 implements inline box layout, which lets us mix textual and non-textual content and have the non-textual content laid out in flow with the text.\nparley#76, parley#84 gets style types closer to CSS engines.\n\nOthers\n\nThe Glazier repository has been archived.\nThis is in continuity with our direction so far, as we've dropped support for it and committed to building our crates on top of Winit.\nWe are at the end of our documented May-July 2024 roadmap.\nWe expect to do a full retrospective on it soon, including the items we shipped and those that slipped.\nDaniel and Olivier are now accepting \"office hours\" style appointments, for open-ended discussion of the ecosystem.\n\nSee Daniel's schedule here.\nSee Olivier's schedule here.\n\n\n\n","id":"https://linebender.org/blog/tmix-07/","title":"This Month in Xilem, July 2024"},"https://linebender.org/blog/tmix-08/":{"body":"Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.\n\n\n\nLinebender has a new logo, which was contributed by Markus Siglreithmaier.\nWe're seeking feedback on Zulip in #linebender>logo.\n\n\nXilem\nXilem is our flagship GUI project, inspired by SwiftUI.\n\nWe integrated basic animated variable font rendering (xilem#507).\nPhilipp Mildenberger moved us back to using ViewMarker in xilem#472.\nThis restores the ability to return ViewSequences, by making a tradeoff to work around Rust's faulty trait ambiguity rules.\nWe added Views for some existing and new widgets:\n\nspinners, useful for showing indetermine progress (xilem#497);\nprogress bars (xilem#513); and\nthe Portal widget, which brings support for scroll areas to Xilem (xilem#561).\n\n\n\nXilem Web is a community managed experimental DOM implementation of the Xilem pattern.\nThis month, the updates include:\n\nSupport for returning multiple views from the main logic (xilem#482).\nSupport for DOM templating, for efficient repeated creation of similar views (xilem#495).\n\n\n\n\nJared O'Connell additionally contributed a stopwatch example in xilem#492.\n\n\nMasonry\nMasonry is the widget system used by Xilem.\nThis month has been dominated by Olivier's implementation of pass specification (rfcs#7):\n\nxilem#512: The new compose pass, which is used to minimise redraw when scrolling.\nxilem#510: Adds the mutate pass, which allows later passes to assume the tree structure is stable by limiting when tree mutation can occur.\nxilem#522: Implements paint and accessibility as passes, with follow-up by Tom Churchman in xilem#557.\nxilem#488 and xilem#540: updated event and pointer handling, and disabled handling respectively.\nIn progress work includes layout in xilem#529, focus in xilem#538, animation in xilem#539 and scroll requests in xilem#550.\n\nWe also had some great community contributions, such as:\n\nRichard Dodd added a new progress Bar widget (xilem#513).\nFixes for Portal scrolling, by Tom Churchman (xilem#563).\n\n\n\n\nThe progress bar widget was contributed by Richard Dodd in xilem#513.\n\n\nWe continue to make progress on other key features.\n\nSnapshot tests now are cross-platform and run in CI (xilem#233).\nPan/flick gestures are being developed in xilem#562.\nProgress continues on text input for Android. This involves creating our own Activity, with support for both text input and accessibility.\nThis new Activity will use SurfaceView like other modern native code based activities (GameActivity, MakepadActivity, etc.), and our aim is that it won't require a Java toolchain to build a simple application.\nProgress continues on the Accessibility integration for Android. You can try this in xilem#575, or see it in the below video.\n\n\n\n\nThe Xilem to_do_mvc example running with TalkBack integration.\nVideo provided by Matt Campbell.\n\n\nVello\nVello is our GPU vector renderer.\nWe have made some really great progress in August.\n\nWe now support blurred rounded rectangles, contributed by Markus Siglreithmaier (vello#665)\nBlend stack spilling was implemented, which allows blends more than four layers deep (vello#661).\nFixes for some visual artifacts in vello#651, vello#659 and vello#673.\nEmbedding existing wgpu textures is now supported (vello#636).\nWe now support bitmap glyphs (i.e. emoji), in addition to our previous COLR support (vello#641).\nWork has begun on sparse strips, which is tracked in vello#670.\nFrame pacing for Android is being investigated and developed in vello#674.\nThomas Smith has been doing some deep-dives into parallel scan, which is the core operation in Vello.\nThis work can be found in #gpu>Progress for GPU's Without Forward Progress Guarantees.\n\n\n\n\nVello now supports blurred rounded rectangles, based on the maths from Raph's blog.\nLeft: Vello's blurred rounded rectangles test scene.\nRight: Blitz's servo example which renders box shadows using this feature.\n\n\nParley\nParley is a text layout library.\n\nPrimitives required for robust text editing were added in parley#106.\n\nOthers\n\nBruce Mitchener has started work on Interpoli, an animation support library.\nWe have performed a retrospective on our last roadmap.\nDaniel and Olivier's \"office hours\" appointments can still be booked by anyone for open-ended time-limited discussion of the ecosystem.\n\nSee Daniel's schedule here.\nSee Olivier's schedule here.\n\n\n\n","id":"https://linebender.org/blog/tmix-08/","title":"This Month in Xilem, August 2024"},"https://linebender.org/blog/tmix-10/":{"body":"Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.\nThis month's update is very significant, featuring several crate releases and the adoption of resvg.\nResvg, Tiny-Skia, and Related Projects\nWe would like to thank Yevhenii Reizner (RazrFalcon) for all his work on resvg, tiny-skia, and related projects.\nDue to some changes in his personal circumstances, he has to give up working on his collection of excellent crates and he has been seeking new homes for them to help keep the lights on.\nThe following projects are now part of Linebender:\n\nresvg - an SVG rendering library, including usvg;\ntiny-skia - a skia subset ported to Rust.\n\nThese crates are widely used within the ecosystem and play an important role in many software projects, and not just in Rust!\nGiven that Linebender has a mission to provide high quality libraries for GUI and we have established processes for managing those libraries, we feel well positioned to step in and help out.\nSeveral associated repositories and projects are also now part of Linebender.\nThese are simplecss, svgtypes, and resvg-test-suite.\nWe do not expect this change to significantly impact current users of resvg, usvg, or tiny-skia.\nOur role is a stewardship role, to allow updates to continue as needed by the community.\nIf things work for you now, they will continue to work for you going forward.\nOur plans for the near future are:\n\nIntegrate with existing Linebender practices for CI, testing, and releases.\nReview and respond to incoming pull requests and issues.\nRe-license the resvg repository (including both resvg and usvg) from the MPL-2.0 license to a dual Apache 2.0 / MIT license as is common within the Rust world and the standard for Linebender projects.\nProvide new releases as needed, working with the community to bring additional maintainers.\n\nIn the longer term, we will look at how the ecosystem is evolving and what’s needed or useful.\nThe Linebender team has deep expertise in 2D rendering, including vector graphics, color and text layout, shaping, and rendering.\nWe look forward to seeing how we can apply this to these projects.\nRelicensing\nWe’ve already begun the process of re-licensing the resvg repository and are nearly done.\nThe change of license will be present in the next release, which will also be our first release under the Linebender umbrella.\nThis will allow us to share code between the Linebender crates more easily.\nThis process can be followed at resvg#838.\nHelp Wanted\nWe welcome pull requests and issues.\nAlso, with RazrFalcon becoming less involved, we’re losing a key source of knowledge about the code itself as well as the philosophy behind it.\nWe look forward to hearing from people who use the various crates to understand how you use it, what you use it for, and what you’d like to see.\nFor further discussion, please use the resvg channel on the Zulip.\n\n\nAlongside the work on resvg, we have been continuing work on our existing projects.\nXilem\nXilem is our flagship GUI project, inspired by SwiftUI.\nIt lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.\n\nxilem#681: View::rebuild was updated to reflect the ability to use reborrowing.\nxilem#669: The font weight for labels was exposed, by Marco Melorio.\n\nWork on Xilem Web continues.\nMasonry\nMasonry is the widget system used by Xilem.\nIt provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.\n\nxilem#632: Starts a Masonry book, including a guide on creating a To-Do List app.\nrfcs#7: The pass specification RFC has been fully implemented, and the RFC has been merged.\nxilem#705: Moved methods for mutating widgets to free functions.\n\nThis decreases ergonomics in favour of increasing uniformity between Masonry and crates which create their own widgets.\nThis change is intended to improve rustdoc output, and the ergonomics should be restored once Rust has Arbitrary Self Types V2.\n\n\nxilem#615: Our accessibility for text has been greatly improved, allowing by-character and by-word movement through accessibility tools.\nxilem#660: request_paint has been removed in favour of a new request_render, so that accessibility updates are less likely to be missed.\nxilem#718, xilem#720: restored the ability to embed Masonry in external projects by re-exporting required items.\nxilem#612: A built-in feature-gated integration with Tracy.\n\nDaniel also provided a talk to GOSIM China 2024 about Masonry.\nThe recording of this presentation is not yet available.\n\n\n\nMasonry now has built-in support for tracing using Tracy, using the tracing-tracy crate.\n\n\nVello\nVello is our GPU vector renderer.\nIt can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.\nThe main update is the release of version 0.3.0.\nThis release includes previously discussed support for emoji and blurred rounded rectangles.\nWe also now no longer consider Vello to be experimental, and so would encourage you to try Vello for your projects.\nRaph has been working on Sparse Strip Path rendering; progress can be followed in the Zulip thread.\nWe do still have several known issues, but are not aware of any issues which would block wider adoption.\n\n\n\nVello is now supported as a renderer for the external Floem project, developed for the Lapce editor.\nNote that Lapce does not currently itself use Vello.\n\n\nParley\nParley is a text layout library.\nIt handles text layout, mostly at the level of line breaking and resolving glyph positions.\nWe released Parley 0.2.0.\nThis includes:\n\nparley#126: A new abstraction for text editing operations.\nparley#129: Ergonomics improvements for style properties.\nparley#76: A tree-style layout builder, useful for building up a text section (e.g. between elements).\n\nWe have also done some follow up work, including:\n\nparley#143: Support for shortcutting drawing work if rendering has not changed.\nparley#152 (in progress): An example showing cursor blinking, by tannal.\n\nPiet\nPiet is a 2d graphics library which abstracts over platform-native graphics APIs.\nLinebender is focused on Vello rather than Piet for performance reasons, but some users may find Piet useful, as it relies on more mature renderers and is more compatible with older platforms.\nDuring October, we released Piet 0.7.0.\nSome key updates from October included in this release are:\n\npiet#572: Use of Arc over Rc for stroke dashing, by anesthetice.\npiet#585: An update to the Rust 2018 edition, from Bruce Mitchener.\npiet#578: Improved robustness of copy_raw_pixels on Direct2D by Kaur Kuut.\nMany dependency updates.\n\nDruid\nDruid is a GUI library which was a predecessor to Xilem, and an ancestor of Masonry.\nWe are in the process of relicensing Druid from its current license of Apache 2.0 only to the Rust ecosystem standard Apache 2.0 OR MIT dual license.\nIf you have previously contributed to Druid, please read and respond to druid#2414.\nThis will greatly improve cross-compatibility with the rest of the Rust ecosystem, particularly for adapting code from Druid into newer toolkits.\nWe plan to archive the Druid repo after one more release, as we are not actively developing it; we are working to bring Xilem to parity in capability.\nWe will also apply this license change to Xilem and Masonry, as well as Glazier, which is currently archived.\nOthers\n\nDaniel and Olivier's \"office hours\" appointments can still be booked by anyone for open-ended discussion of the ecosystem.\n\nSee Daniel's schedule here.\nSee Olivier's schedule here.\n\n\n\n","id":"https://linebender.org/blog/tmix-10/","title":"Linebender in October 2024: resvg stewardship"},"https://linebender.org/blog/xilem-2024/":{"body":"2024 promises to be an exciting year for Xilem. The big news is that Google Fonts is funding the work of four open source contributors to the project: Aaron Muir Hamilton, Daniel McNab, Matt Campbell, and Olivier Faure.\nAaron will be working on text layout, building on parley, text input including IME, and Android platform integration. Daniel will be working on GPU infrastructure and performance, with much of the work upstreamed to wgpu. Matt will be working on accessibility, and Olivier will be building the core widget tree, with a focus on developer experience.\nXilem is an ambitious project to explore the limits of UI performance, as described in my High Performance Rust UI talk. The goals include gathering knowledge about the viability of Rust for UI, and what patterns work well. While there is a research focus, we plan to gather this information by building a real toolkit, solving many of the hard problems. The current state of the project is a fairly rough, though promising, prototype, so there is much work to be done. It’s exciting to have the bandwidth and experience of these people working toward that goal, but perhaps the most exciting prospect is bringing together more of the community, people passionate about building high quality UI. Our goal as an open source community is to facilitate that, and to coordinate the work efficiently. What we have now is not a production-ready product, but we wish to move in that direction, including quality documentation - some of the consistent feedback we’re getting about the current state.\nAnother goal is to bake in accessibility from the start. Too often, it’s an afterthought, tacked on at the end. We’re excited to have Matt, primary author of AccessKit, on board.\nXilem is designed in layers, with a reactivity layer on top, a widget tree adapted from Druid, and with Vello as the 2D rendering engine. These layers are designed to work well together, but the individual pieces may be useful in other contexts. The funded work will focus on Android as a target, but is intended to work well on desktop platforms as well; this is one of the core strengths of the Rust ecosystem. We don’t have iOS as an immediate priority, but attention from the open source community could change that, and the foundations should support it.\nThe status of the web backend for the Xilem widget set is more complex. Simply put, it is not a priority for us right now. We have done some explorations into generating DOM nodes from Xilem, but doing it well would increase scope and complexity beyond what we’re comfortable with. For applications deployed primarily on the web, xilem_web (which generates DOM nodes) should be a viable choice, with the possibility of Tauri or Electron for desktop deployment. To enable online demos of native applications, it is most likely that we will implement a version which draws to a canvas element. This has limitations in accessibility and native look and feel - for example, text input and scrolling may behave contrary to user expectations. Until more work is done refining the web backend, we would not recommend this approach for production applications using Xilem.\n2023 retrospective\nLooking back at 2023, there was a great deal of foundational work. Much of the effort was on Vello, the 2D rendering engine that serves as the graphical foundation of the project. A particular strength is high performance path rendering on GPU, which enables fully dynamic text effects including animation of variable font parameters. Though we had a reasonably good implementation of path rendering in place, much of the second half of the year was taken up by “stroke rework” which computes all stroke styles on the GPU, and also improves the performance and accuracy of antialiasing for all paths. To this end, we invented new computational geometry algorithms for computing parallel curves, the newest based on Euler spirals, with some elegant math tuned for GPU evaluation. A writeup explaining the details is in the pipeline.\nThere was slow and steady work on the higher levels of the stack as well, including factoring out the reactive layer into a generic xilem_core module, and validating that with generation of DOM nodes for browser deployment. The widget tree saw some development as well, including integration with the Taffy layout engine.\nGovernance and community\nThough we now are funded to work on the project, the open source nature of the projects continues unchanged. We’ve been building up infrastructure for open source community, including a Zulip instance, weekly office hours, wiki, and, as of this post, a shared blog. Our contributor guidelines explain a bit about our processes. Almost all decision making is by consensus. Only very rarely do I need to step in and tie-break. As we scale up, we’re going to be more systematic, starting to use RFC documents for major changes.\nWe’re intentionally designing our community to foster learning and collaboration. For example, discussions are on Zulip rather than Discord because it’s searchable, meaning that the same questions are less likely to come up over and over. Its grouping into topics lets participants quickly skim activity as opposed to getting drowned in chatter. It’s working well for us. We also invite others in the Rust UI ecosystem to use our Zulip and wiki. As the Kurzgesagt video The Internet is Worse Than Ever – Now What? observes, large social spaces are degrading, and the video recommends seeking out smaller, more focused communities. I hope ours is one such.\nIn any case, we are happy to share bits of infrastructure with other Rust UI efforts, and are always eager to learn from them. I see many of us working toward common goals rather than competing, even if there are different approaches and priorities.\nThoughts on the Rust UI ecosystem\nI’ve been thinking about doing UI in Rust for about 8 years now, and have explored many, many approaches. I’m not alone in this, there have been well over two dozen projects started.\nAs mentioned in a previous blog, any given application will have a set of requirements. Is Web one of the main deployment targets? Will there be embedded video? Is there a need to integrate with some other subsystems, such as a game engine? Each of these has profound implications. Some problem spaces (compilers are an example) are “smooth,” in that continual refinement will lead to fairly similar outcomes no matter the starting point, but over time I’ve come to the conclusion that UI is especially lumpy. I believe this contributes to the continuing pattern of new UI toolkits coming out every couple months or so; the author surveys what’s available, finds none that match the specific set of requirements, and creates a new one.\nIn some ways, Xilem is in the same pattern, but there are some things we’re doing differently. For one, it’s explicitly a research project, with knowledge about how to build UI in Rust an outcome possibly as important as the codebase. We’re trying to be systematic about finding the best ways to do things, which ideally will make some solutions more general. And, increasingly, we’re designing things as modular layers that can be swapped out. With luck, even if people don’t end up adopting the entire stack, there will be some useful components for the ecosystem.\nA good overview of the opportunities and challenges in Rust UI, particularly for making mobile apps, is parallel futures in mobile application development by Andy Wingo. The linked blog posts in that series also go into considerable detail about JavaScript and TypeScript based approaches, which have important lessons as well.\nDeclarative UI patterns\nThe trend in UI programming has been overwhelmingly away from a soup of mutable objects with interlinked references and toward various declarative or reactive patterns. That’s a good thing for Rust UI, because the former is very un-ergonomic in Rust.\nIn the JavaScript world, there is a Cambrian explosion of reactive techniques. React is by far the most popular, but there is a strong sentiment it’s possible to be better, particularly on performance, but also robustness, as the logic for deciding when to re-render is fickle, and can miss re-renders. Elm deserves special mention, as its avoidance of global shared mutability makes it particularly easy to adapt to Rust, so it serves as the reactive core of the iced, relm, and vizia UI toolkits, as well as yew on the WASM side. But there is also Ember Octane (based on Adapton), a number of fine-grained reactivity approaches such as SolidJS, and many, many more (not to mention the incredible diversity of solutions for state management).\nWe’re seeing much of that diversity mirrored into the Rust world. On the WASM side, we see Dioxus as a fairly faithful adaptation of React, leptos (also sycamore and tachys) adhering fairly closely to SolidJS, yew as an adaption of elm, and more.\nA reactive layer such as Dioxus or leptos can be compiled to WASM and run in a browser to generate DOM nodes. More recently, we’re seeing that it can be decoupled from that environment, and a reactive core can drive a widget tree. Examples include Freya which uses Dioxus, and floem which implements fine-grained reactivity inspired by leptos.\nXilem doesn’t directly correspond to any JavaScript framework; it relies on static typing and is actually closer to SwiftUI than anything web based.\nOne of the central questions in Rust UI going forward is: which approach to declarative UI is best? It’s possible a clear winner will emerge, or perhaps there will be a different answer depending on the use case, or it might just come down to a matter of personal style, with a number of viable contenders (arguably that’s where JavaScript is). We’re taking a two pronged approach. First, we’re moving forward with Xilem. There’s a specific reason - Xilem is designed to support multithreaded rendering easily, while many of the other frameworks rely on thread local storage for access to a store of observables, an approach with high impedance mismatch to multithreading. Since performance is a goal, we didn’t want to give that up by adopting another framework. I also think Xilem is pretty good, but that remains to be seen.\nAnother way to gather more evidence on the Xilem declarative layer is to use it to generate DOM nodes in a browser, in other words decouple it from the widget set. As described in the Xilem Vector Graphics talk, we have been experimenting with that a bit, and a major development in the last year was to factor out the core declarative logic into xilem_core, and also develop a xilem_web layer for creation of DOM nodes. Early indications suggest that this may be a viable alternative to frameworks such as Dioxus and leptos, and we're eager to learn more from those explorations.\nXilem is untested, though promising, and it may be that some other approach is better. If so, we’re prepared to pivot. We’ll be designing the widget set so that it doesn’t have a hard-coded dependency on the Xilem declarative layer, and could, at least in theory, be driven from other frameworks. Olivier is author of the masonry crate, where being agnostic to the declarative layer was an explicit goal. He’ll be adapting many of the ideas from that.\nMaking a widget set agnostic has other potential benefits. While writing app logic in Rust is very promising, there are still compelling reasons to use other languages. A widget tree implemented in Rust with fast graphics and smooth interactivity, scripted in some other language, is compelling. I made a prototype in Python, which, though rough, shows promise.\nInfrastructure\nA UI toolkit depends on a great deal of infrastructure. We’re making careful choices around that, and also looking for opportunities to collaborate with the rest of the ecosystem. One choice I’m particularly excited about is investing in wgpu. I think WebGPU will move modern GPU usage forward considerably, especially compute shaders, which are heavily used in Vello. This technology will make truly portable applications requiring high compute throughput possible for the first time, and we’re shooting for smooth UI integration with the GPU usage in these applications.\nWhether to use winit or build our own platform integration has long been a subject of discussion. We’re reopening that discussion with the winit maintainers as of this writing, but it’s still too early to say whether we’ll join forces, or decide that the goals of the project support having a separate codebase.\nA huge part of any UI effort is text, and that’s also a long-standing interest of mine. I’m impressed with cosmic-text but ultimately we decided to move forward with parley, in part so we can test out ideas with variable fonts. The lower levels of the text stack will be rebased on the fontations work of the Google Fonts team, which is rapidly becoming a production-quality implementation.\nBuilding common infrastructure for accessibility also benefits the entire ecosystem, and we're thrilled to see the increasing adoption of AccessKit. Indeed, on all these topics, we’re happy to share what we’re doing with other projects, as most of the infrastructure described above is general in application, rather than specific to our projects.\nConclusion\nThe potential for Rust UI is huge. The Rust language enables top-notch performance and reliability and is also expressive for high-level application logic. We plan to prove that out, based on encouraging existing research and explorations, as well as new research to discover the patterns for Rust UI that work best at scale. This involves work at all levels of the stack, including infrastructure we are happy to share with other Rust UI efforts.\nXilem is still an early prototype. For those who desire a “batteries included” toolkit for building UI, we ask your patience. For those who are interested, you are invited to come build this future with us.\n","id":"https://linebender.org/blog/xilem-2024/","title":"Xilem 2024 plans"},"https://linebender.org/blog/xilem-backend-roadmap/":{"body":"As you may have heard by now, Google Fonts is funding me this year to work on Xilem.\nI'm not alone in that: Aaron Muir Hamilton, Daniel McNab and Matt Campbell were funded as well to work on various parts of the ecosystem. I believe this is Matt's third year getting funding from Google Fonts.\nNow, what I was hired to do might be unclear to you. The scope we agreed on was fairly broad and was stated as \"contributing to Xilem's view tree and developer experience\", but that could mean a lot of things.\nThe first thing I want to do is communicate a clearer picture. I have a a lot of plans for Xilem, and they involve major changes from the current architectures, changes that might be worrying to the community at large or even to Raph Levien. I certainly don't want to give the impression that I'm wresting the project away from the Linebender community for Google's interest, and that means being transparent early and often about the things I want to rework.\nWhat I want for Xilem\nXilem is a research-and-development project, the latest in a series (Xi-Core, Druid, Crochet, Lasagna, Idiopath), that aims to explore how UI development can be made compatible with Rust.\nThis might feel a little banal now, because Rust GUI frameworks are popping up everywhere and starting to settle on similar patterns, but those patterns weren't obvious in 2019! Xilem is very different from Druid, and getting to its current architecture has been a process.\nXilem has been perma-experimental since May 2022. Once it got started, the main Druid maintainers stopped contributing almost entirely with the expectation that Xilem would replace Druid once it was ready. Unfortunately, it still hasn't made enough progress to be on parity with Druid, yet Druid still lies abandoned, which isn't great when people had started relying on it.\nIt's debatable how much this could have been avoided. As I've pointed out before, the Rust GUI ecosystem is subject to massive yak-shaving: many of us came here because we wanted to build a text editor, and now we're all learning about text rendering, text editing, compositing1, accessibility trees, using monoids to implement stuff on the GPU, ECS, and some concepts that I'm absolutely certain Raph made up like Bézier paths and C++.\nAnd to a certain extent, yak-shaving is good! \"I'm going to do better than X without learning how X works\" is a child's attitude. It's the attitude we all start with, and it fills us with courage, but that courage is naive. True improvement comes from keeping that courage after spending years learning how immense the problem space is, and keeping faith that it's possible to do better. The Rust community is one that values not just doing things from scratch, but also learning from the past to get them right.\nThis is good, but the \"get them right\" part takes a lot of time, and in the meantime, I'd argue that we've neglected end users a bit. We've abandoned Druid before Xilem was ready as an alternative, and then we worked on foundational and experimental projects that would make Xilem stronger and sounder in the long term, but left the project in an awkward state in the meantime (except for the web backend, which made a lot of progress).\nIn the ECS-backed GUI framework article I linked, Bevy maintainers have this to say:\n\nNot to be too harsh, but a lot of the existing Rust GUI solutions... just aren't very good. There's a lot of passable options, but they all have non-trivial drawbacks. No one has really risen to the top as a clear winner. [...] Deep down, we all know that we can do better, and we should.\n\nMy ambition is to makes this paragraph obsolete before the end of the year. I want Xilem to get back to being suggested to newbies in the same breath as Iced and SlintUI. In the next few years, I want the entire ecosystem to get to a point where people talk about Rust GUI like they talk about ripgrep or rustls.\nTo give one specific example: my personal goal is to implement seamless hot reloading for Xilem before the end of 2024. I believe it's feasible, and I believe doing it will radically change the way people think about Rust GUI, along with other improvements I hope to unlock over time.\nIn the shorter term, my plan is to focus on basic features, widgets and styling options so people can experiment with Xilem, building on Raph's work on Vello over the past year. John Skottis's Xilem UX Notes give a good picture of the kinds of things I'll be working on.\nThe other big short-term priority is going to be documentation. We've seen a lot of people complain that the Linebender project were poorly documented and hard to get into; it was the most popular reaction to our 2024 announcement, but it echoed sentiments we'd seen before. We're aware of the problem, and we intend to work on it.\nIn the medium term, I also plan to work on the performance aspect of Xilem. People from Google Fonts have expressed interest in seeing how much performance we can get from Rust UI. While my mission isn't limited to performance work, it will be an ongoing focus, especially since it's an area where the Rust language brings unique opportunities. I'll go into more details on Rust performance and power efficiency in a later article.\nMajor changes I want to implement soon\nThese are the big changes I want to work on soon. Realistically, \"soon\" is going to be relative, because some of these changes are going to be controversial, and part of the work is going to be convincing people of their value.\nSwitching to Masonry as a backend\nOkay, this one makes me blush a little.\nI'm the only maintainer of Masonry, a GUI crate with barely over 300 stars on Github and little outside interest. Can I really justify taking the money Google pays me to improve Xilem and spending my time on Masonry instead?\nThat choice isn't random, mind you: Masonry was forked from Druid, Xilem's ancestor, and in fact Xilem and Masonry share a lot of code right now.\nIn fact, I'd argue that Masonry's codebase is of better quality than Xilem's current native backend. This isn't meant to be a put-down of the work of Xilem maintainers; rather, it's the outcome of a difference in priorities. Nobody was very interested in Xilem's native backend (though Raph was aware of its importance, hence me getting paid to write this), and lots of people were very interested in the frontend and the web backends, therefore the frontend and web backends saw the most work.\nFrom our RFC#0001:\n\nAs a result, Xilem's native backend is in a poor state:\n\nThere is code commented out.\nThere are entire modules commented out.\nThere is documentation referring to items from Druid that no longer exist.\nThere are TODOs without an associated issue.\n\n\nMasonry's backend codebase is a healthier starting point. Masonry also comes with some built-in perks, like powerful unit tests and a structured widget graph.\nIt's not clear whether we want to import the Masonry codebase, the crate, or the entire repository, and it's not clear what the ultimate branding should be. The RFC lays out the different possibilities, and discussion is still ongoing, so the community can reach a consensus before doing more work (including possibly not using Masonry at all).\nIf we do move forward with this, then Masonry will need some porting work:\n\nUsing Vello and Parley instead of Piet.\nUsing Glazier instead of druid-shell.\nIntegrating AccessKit.\nRemoving the dependency on GTK.\n\nAccessKit support in particular is table stakes, by now. The Rust ecosystem is converging on the idea that accessibility (or at least, screen reader support) should be integrated early on in the design of GUI frameworks, not tacked on at the end.\nThere are other things Xilem added over Druid (notably virtual lists and async support), but I believe Masonry doesn't need to implement them right away for parity. Both will be very important for eventual performance work.\nAvoiding custom Widgets\nI'm told by Raph this is a \"molotov cocktail\" which, uh, fair.\nWe should write Xilem's backend under the assumption that end users of the library (including the Xilem frontend) will very rarely create their own widgets. Instead, they will usually compose the primitives given to them the same way they compose DOM elements in the browser. There will be escape hatches, from a fixed-size canvas surface where end-users can use arbitrary paint primitives to full-on custom widget code, but we should design the framework under the assumption people will almost never need those hatches.\nClearly, this is a radical move. There will be a prototyping phase before we choose whether we commit to it, and RFCs to lay out the details. I'm confident it will pay off.\nDevelopers of hobby GUI frameworks tend to provide a severely anemic set of primitives, under the assumption that if anyone wants other features in their widgets, they can implement them themselves. Both Druid and Xilem suffer from this.\nOn the other end of the spectrum, the web has shown that you can implement complex custom UIs given a rigid but rich set of primitives.\nMore importantly, the web is moving towards a powerful paradigm: declarative UI. As time goes on, people are realizing you can get better performance and composition by describing what things should look like and composing them than by imperatively making them do things.\nPart of this is that native code is more performant than JS, but part of it just that declarative code is easier to work around than imperative code: its bounds are better defined, it lets you commit to limitations that make the engine's job easier, and it's easier to analyze.\nA set of proposals called CSS Houdini came out that went in the exact opposite direction: pushing the layout engine towards more customization and JavaScript code. The proposal hasn't seen much movement since 2021, and I don't think it's a coincidence that the part that would have given the most power to imperative code, the Layout API, hasn't been stabilized in any browser.\nThe bottom line is that, while implementing custom widgets will always be possible, I want to encourage developers to go as far as they can composing declarative elements instead, and see how far it's possible to go using those building blocks.\nMore opinionated layout\nOne major customization point I want to restrict in Xilem is layout.\nToday all Rust GUI frameworks ship their own layout algorithm, but none of them are competing on their layout algorithm. Often the layout algorithm is just a means to an end; developers that do want to work on a state-of-the-art layout engine will provide it in a modular crate like Morphorm and Taffy.\nAnd here's the thing: realistically, most layout engines aren't that creative. Every Rust framework and every major GUI framework I'm aware of uses layout that boils down to \"FlexBox with small variations\". The number of meaningfully different ways to do GUI layout can be counted on, generously, two hands.\nI'd argue we only need CSS Flow, FlexBox, CSS Grid, and maybe Morphorm to cover most people's needs. Conveniently, this is what Taffy aims to provide. There's already an experimental Taffy integration in Xilem, and I want to make it deeper.\nThat being said, there won't be a hard-coded set of layout algorithms. Rather, layout will rely on a web-inspired protocol between widgets (in other words, trait methods), and that protocol will be strongly opinionated to make implementation of these layout algorithms easier.\nMore on this in a latter blog post.\nNo boxing\nHaving a semi-fixed set of widgets means you can avoid using Box<dyn Widget>, which has some interesting performance implications.\nIt means you can add a lot of methods to the Widget trait without worrying about bloating the vtable. And you can write methods under the assumption that they'll be inlined, which opens up interesting DX improvements.\nUsing ECS, maybe, sort of\nIn current Xilem code, if you want your FlexWidget to have children, it must have a Vec<Pod<ChildWidget>> member. Each Pod directly owns a Widget.\nI think this is an interesting quirk of Rust GUI, tying directly to Rust's ownership semantics. Non-Rust frameworks often use pointers to child widgets, true, but they're often shared with the framework, with an understanding that the framework is charged with keeping track of how many widgets there are and which is a child of which. In Qt, for instance, it's preferred (but not mandatory) for parents to call delete_later() on their children instead of delete, because it plays better with event handling.\nXilem's approach of \"you own your children\" is a little bespoke. It means the framework has a hard time iterating over the entire widget tree (say, as part of a DOM inspector) unless each Widget specifically implements the iterating method. And it means if you want to target an event at a specific widget (say, the one with keyboard focus), you need to go through the entire ownership chain, using some heuristics to avoid visiting too many widgets.\nI believe Widgets should be owned by the library. If your container has children, then the only thing the container will actually own is keys into a structure (probably a slotmap) where the widget is stored. This makes a lot of things easier, like serialization and debugging, but it has an impact on the entire backend. It's an infrastructure investment.\nLately, I've seen more and more discussion of implementing GUI through an ECS. A lot of that discussion comes from Bevy, which is natural, since the bevy community is made up of ruthless cultists striving to feed ever more sacrifices to the ECS god until it consumes the Earth is intimately familiar with the ECS pattern and has reached a phase where UI work is getting a lot of attention2. But I've seen discussions about it in the Linebender community too.\nWhether we actually want to use ECS is something we still need to research.\nThe way I understand it, the big draw of ECS is the \"S\" part, the Systems: it's about handling lots of similar data at once in arbitrary order. Which is why eg archetypes in bevy are useful: you're grouping together entities with the same components, so that you can say \"execute this code for all entities with component X and component Y\" and have this code be executed on arrays of values with minimal indirection or branching. And the \"arbitrary order\" part makes them work really well with slotmaps: since you can just read from the beginning of the slotmap, you don't pay the double-indirection penalty.\nIn other words, the ideal use case for ECS is code of the type for (entity in entities) entity.position += entity.speed.\nGUI is pretty far from that ideal use-case: updates are sparse and should only run on a small number of changed widgets. Order often matters. And I'm not sure archetypes would work in a framework with a large variety of widgets and different attributes.\nI think there are two things you really want from a Rust ECS library for GUI: slotmaps, and efficient ways to add and remove components from an entity.\nImplementing those is going to be a major undertaking, which we'll have to divide into small experiments, but one I expect to pay many times over.\nCommunity involvement and more to come\nI want to really put emphasis on something: none of the above is set in stone.\nPart of what Raph wants to achieve this year is to make Xilem more of a community project, and that means running more decisions by the community.\nI've created an RFC repository for this, and each of the sections above will get its own RFC, where I'll expand on my rationale in more detail.\nThis isn't a rubber-stamping process either: I want to implement those ideas, but if the community3 decides that they are bad, then we'll go another direction.\nThere's other ideas I haven't discussed yet that I want to come back to:\n\nDeclarative styling: Giving Widgets attributes similar to CSS properties, with modifiers for animations, pseudo-classes, media queries and container queries. While inspired by CSS, it wouldn't involve any CSS parsing, selector resolution, specificity resolution, etc.\nCompositing: Xilem is heading towards a \"do everything in the GPU\" approach. This is good for performance, but Firefox engineers who have gone down this road before us have warned us of the many perils they faced, especially regarding battery life. In general, after layout and painting, you really want a composite() phase to deal with scrolling and some simple animations without touching the GPU at all if possible. This is a complex subject, and it would be nice if we could hide most of that complexity from app developers while still giving them good performance.\nResource loading: This is another area where we might want to crib from game engines. At the very least, we want to be able to ask \"Load me this texture/shader/font/etc\" without having to write disk I/O in user code. Then we can start thinking about progressive loading, fallbacks, sharing, etc.\n\nThese ideas are likely to be the subject of further articles and/or RFCs in the near future.\nRelations with other projects\nPresenting the current state of the Rust GUI ecosystem would probably take its own article.\nThings are moving quickly, and anything I write now might not be up to date in two weeks. The projects we're most interested in right now are Winit and Bevy, and there's some potential for cooperation with Servo. The COSMIC ecosystem looks pretty cool, but so far it looks like we have less to share with them.\nPeople from parallel projects are communicating and exchanging much, much more than they were in 2022. Between Vello, Parley, wgpu, Taffy, COSMIC-Text and others, projects are converging and maintainers are making more effort to reach out and integrate other people's code.\nStay tuned for more!\nHey, this is really cool!\nSomething that came up in discussions I've had with Raph is that it's easy to miss the forest for the trees. In the middle of all the paperwork, blog-writing, RFC-writing, we can end up focusing on the process so much that we forget how excited we are.\nSo, I'm taking the moment to remind myself: this is really freaking exciting!\nFor all my criticisms and caveats and realistic assessments of the problems we need to overcome, I'm still feeling absolutely great about this!\nI'm super thankful to Raph for getting us this far, to Google Fonts for sponsoring us, and to everyone else who contributed to the Linebender ecosystem. I think we can do something amazing and I'm honestly a little startled to be in this position at all.\nTo reiterate what I said: in the next few years, I want the entire ecosystem to get to a point where people talk about Rust GUI like they talk about ripgrep or rustls.\nI legitimately think Rust has the potential to get best-in-class GUI frameworks, and now the time has come to prove it.\n1\nBy the way, I love this style of writing where we start humanizing a software process and complaining about how much it wants to kill us. The articles I cited are very high-quality too.\n\n2\nI'm told the Bevy community found that joke funny, but I was too afraid for my sanity to check on their Discord server.\n\n3\n\"The community\" is a nebulous concept here. For obvious reason, we'll give more weight to the opinions of people who have already put work into the Linebender ecosystem, but the general hope is to get a consensus from everyone involved. And you're welcome to weigh in even if you haven't contributed before.\n\n","id":"https://linebender.org/blog/xilem-backend-roadmap/","title":"Roadmap for the Xilem backend in 2024"},"https://linebender.org/contributor-guidelines/":{"body":"About the projects\nThe Linebender organization is an umbrella for a diverse and ambitious set of project, with the goal of creating high performance, accessible, high quality UI in Rust. An explicit goal is to push the boundary and fill in gaps in our understanding of UI infrastructure, as opposed to implementing existing cookbook techniques.\nDiscussions and community\nWe use a Zulip instance as the primary place for discussions. All are welcome, and everyone with a GitHub account can sign up. Additional discussion happens in issues in the individual repos, and we also have tracking issues. We don’t use GitHub discussions, preferring the Zulip.\nWe also hold weekly office hours. This is a chance to give status updates, make decisions, and discuss architectural directions. It is open to all, and there are public notes.\nWe have recently re-started a wiki, and eagerly encourage gardening. While the Zulip does have archives, they are not indexed by search engines (though search is available within Zulip), so the wiki represents the definitive place for the results of discussions and resources.\nTo propose a nontrivial change, it is better to file an issue first rather than sending a PR. Depending on the scope and disruption of the change, it might make sense to bring it up on Zulip. Especially if a clear consensus doesn’t emerge in a reasonable time, discuss it in office hours.\nWhile the main focus of the Linebender community infrastructure is to develop Xilem, Vello, and related modules, we also want to help move the entire ecosystem forward. People from other Rust UI efforts are welcome, and discussions about how to join forces and share infrastructure especially so.\nWe use the Rust Code of Conduct and hold people to a much higher standard of conduct than is usual on the Internet. Don’t worry if you’re interacting in good faith, though, the moderators will work with you to try to resolve issues.\nCode reviews\nHere are our policies around code review:\n\nEvery PR must be approved by someone with write access before committing.\nThe wiki is an exception; there we optimistically merge without review\nUsually we wait for the original author of the PR to commit if they have write access.\nBoth merge and squash commits are fine, it’s up to the committer.\nWe give write access to everyone with a good faith intent to improve the code. Usually this is shortly after the first commit.\nThere are currently five owners: @raphlinus, @dfrg, @DJMcNab, @xStrom, and @cmyr. They approve new committers and can make changes to the organization.\n\nWe struggle with getting PRs approved and landed quickly. To try to improve that, here are some suggestions.\nFirst, we encourage everybody to review PRs. It’s a good way for newcomers to get up to speed on the project, and contribute in a meaningful way. There are two goals of the code review process: to improve the quality of the code that lands, and for people to learn something; it’s worthwhile if some knowledge flows in either direction or ideally both.\nIf a PR goes unreviewed too long, it’s absolutely a good idea to ping it on Zulip. It’s also fine to ask for reviewers during office hours, especially if there’s a deeper issue to be discussed.\nResponsibility\nLinebender is a collection of open source projects, with a research flavor. We make no guarantees of any of them being suitable for production. We welcome contributions from anybody. Participating should be done out of joy and should not feel like a burden.\nSometimes PRs stall out, or people have an intent to work on an issue and don’t get to it. In those cases, we encourage others to take them over. We try to discourage “cookie licking” as much as possible.\nFiling an issue does not come with a guarantee it will be worked on. We really value high quality issue reports, but they can be closed if there’s no clear action to be taken, and we encourage everybody in the project to feel empowered to do so, or otherwise garden such as asking for more details.\nOver time, we hope that some of the projects will mature so that they are useful in production (this is already the case for pulldown-cmark, which is not officially part of the Linebender org). We very much welcome collaboration toward that goal, and use of the crates in all kinds of contexts including commercial projects. For such commercial use, we encourage a collaborative approach, where the organization dedicates sufficient staff time and energy to take responsibility for issues and feature requests, working collaboratively with the open source organization.\n","id":"https://linebender.org/contributor-guidelines/","title":"Linebender contributor guidelines"},"https://linebender.org/wiki/":{"body":"Changes to this Wiki are welcome; send a pull request to the linebender.github.io repo, which will be merged without\ndetailed review.\nNote that math is supported between two dollar signs $$ thanks to MathJax.\nFor example, $$x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}$$ outputs $$x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}$$\nWiki pages available:\n","id":"https://linebender.org/wiki/","title":"Wiki"},"https://linebender.org/wiki/canonical-lints/":{"body":"All Linebender projects should include the following set of lints in their Cargo.toml:\n\nAnd in their lib.rs:\n\nThis is a curated list: Clippy has a lot of lints, and most of them are not included above.\nYou may occasionally want to run cargo clippy with clippy::pedantic on your codebase, which will cast a very wide nets and catch a lot of very minor issues.\nThe lint set above focuses on problems that either impact correctness or tend to snowball over time.\nThe list above should be considered canonical.\nIf you think a new lint should be added to Linebender projects, add it to this file in alphabetical order, then copy-paste the list across projects.\nTo keep this process simple, avoid modifying this list in individual projects.\nIf you want to add other per-project lints, add them above the list.\nIf you want to remove a lint, #![allow] or #![expect] it at the crate root.\n","id":"https://linebender.org/wiki/canonical-lints/","title":"Canonical lint set for Linebender projects"},"https://linebender.org/wiki/capitalization-scheme/":{"body":"All Linebender projects should follow this capitalization scheme:\n\nThe project's name should start with an uppercase letter when referring to the project itself, eg Vello.\nThe name should be all-lowercase where referring to the project as a Rust crate (for instance, in relation to crates.io).\nIn that case, it's encouraged to use backticks to put the project name in a codeblock, eg vello.\nThe name should be all-lowercase where referring to the project as a Github repository.\nIn that case, it's encouraged to either use backticks or make it a link, eg vello#1.\n\nFeel free to correct any documentation you see to follow this scheme, unless the project is explicitly discontinued or in maintenance mode (eg Xi-Editor, Piet).\n","id":"https://linebender.org/wiki/capitalization-scheme/","title":"Capitalization scheme for Linebender projects"},"https://linebender.org/wiki/cubic-robustness/":{"body":"Cubic Béziers have a clean and simple definition as a parametric curve (the coordinates are a cubic polynomial in the parameter), but they can also exhibit cusps and other degenerate behavior, which makes numerically robust algorithms challenging in some cases, especially stroking. Cusps and near-cusps also reduce the accuracy of numerical integration techniques for computing arc lengths.\nAt heart, the robustness problems are caused by the derivative of the curve becoming or nearing zero. In the latter case, the curve is not regular, which among other things means it may not be G1 continuous, even though the curve segment itself is C∞. Freya Holmér's Continuity of Splines video does an excellent job explaining that distinction.\nThis page will discuss techniques for detecting and mitigating these robustness issues.\nThree cases\nIt's useful to consider three different cases, as they have different consequences for mitigation. Roughly in order from easiest to hardest, they are coincident control points, simple cusp, and colinear.\nCoincident control points\nThis case has a control point coincident (or nearly so) with an endpoint. It is extremely easy to detect.\nThe tangent vector is well defined at the endpoint, thanks to L'Hopital's rule; it is equal to the vector from the control point to the other control point.\nA good mitigation is to displace the control point slightly in the direction of the other control point. This has a minimal impact on the shape,\n\nSimple cusp\nThe simple cusp is in some ways a generalization of the coincident control point case, but with the cusp in the interior of the curve rather than at the endpoint.\nThe classic simple cusp is a semicubical parabola, which can be represented as y = x^1.5, as well as a parametric cubic curve. All cusp cases in a cubic Bézier can be represented as as affine transformations of this curve. There is always a single cusp.\nDetection is in two parts. First, this case can only occur when the control polygon is self-intersecting, which can be readily computed as alternating signs of cross-products. This is rare in non-adversarial inputs. Then, either a curve classification or hodograph technique can be used to detect the near-cusp, see below.\nA reasonable mitigation is to displace the control points along the tangent lines, either making the loop bigger or the inflection points farther apart, in either cases reducing the curvature.\n\nColinear\nLike the previous two cases, the colinear case is characterized by a (nearly) vanishing derivative, but is different in a number of important respects. Detection is reasonably straightforward, as the control points are close to colinear (which can be evaluated numerically as very small cross products relative to the magnitude of dot products).\nFrom a classification perspective, the colinear case can either an S-shaped or loop curve, subject to an extreme nonuniform scale, squashing the gentle curve into a nearly flattened form, with high curvature. Unlike the simple cusp case, there are generally two cusps.\nA few more observations. The line is not necessarily (nearly) parallel with the chord, as the chord may be very short.\nMitigating this case may require a different approach than for the other cusp cases. Moving the control points along the tangent (preserving G1 continuity) may not resolve the cusp. For stroking, it is possibly best to divide the cubic at the (near) cusps and stroke each as a line, using round end caps.\n\nBézier classification\nOne approach to detecting the simple cusp is Bézier classification. There's a classic paper on this, Wang 1981, which is cited by a number of later references (see relevant Stack Overflow thread).\nThe core element of the classification is x''×x', which is a quadratic polynomial. This is the numerator of the equation for curvature. A \"loop\" shape has no inflection points, and no real solutions of this polynomial. Thus, the discriminant (b² - 4ac) is a valid classifier. That said, choosing an epsilon value for near-cusp instances is tricky. This discriminant scales as the square of area under affine transformation, which is not particularly helpful in choosing an epsilon. For one, as the line case shows, extreme affine transformation can strongly affect the sharpness of the cusp.\nEven so, the sign is useful for determining the mitigation; if it's a loop, then the control points should be moved farther from the endpoints to make the loop bigger (and lower in curvature), and conversely closer if it's two closely spaced inflection points.\nHodograph\nAnother approach is the hodograph, or analysis of the derivative of the cubic curve, which is a quadratic Bézier.\nDetermining the minimum absolute value of the derivative is equivalent to the \"nearest\" method, finding the point on the hodograph nearest the origin. This is a cubic solve, and exists in kurbo. That may not be the exact curvature maximum (given that the numerator also varies), but is close enough for robustness work, and calibrated in more useful units.\nThe loop/double inflection classification as stated above can also be geometrically interpreted in terms of the hodograph: whether the origin is inside or outside the concave part of the parabola, respectively. The math turns out equivalent.\n\nArc lengths\nNote: this section could move to another page on arc length, with more detail. Here are just observations on cusp behavior.\nIt's been noted that Gauss-Legendre quadrature has excellent accuracy for smooth curves, scaling impressively with the degree of quadrature, but that accuracy suffers in (near) cusp conditions, or that it provokes numerical stability issues in analytical techniques. Henkel 2014 contains some experimental results, and it was also noted in the How long is that Bézier? blog post and followup. The current implementation in kurbo employs an error metric and subdivides; note from the illustrations that the near-cusp conditions (near the bottom edge of the graph) require many more subdivisions. It might be worth investigating whether explicit cusp detection, splitting at the point of maximum curvature, might require fewer subdivisions for the same accuracy, and thus be faster.\nReferences\n\nConverting stroked primitives to filled primitives, Diego Nehab, 2020\nShape classification of the parametric cubic curve and parametric B-spline cubic curve, C. Y. Wang, 1981\nCalculating the Cubic Bézier Arc Length by Elliptic Integrals, Hartmut Henkel, 2014\n\n","id":"https://linebender.org/wiki/cubic-robustness/","title":"Cubic Bézier robustness"},"https://linebender.org/wiki/curve-families/":{"body":"CurveParamsSubdivAffineInflectionsSuperellipse\nLine0yesyes00.5\nArc1yesno00.785\nParabola2yesyes00.833\nEuler spiral2yesno10.785\nRectangular elastica2yesno1~0.8\nElastica3yesno1*0.5..~0.85\nBalanced Bézier3nono20.5..0.95\nEuler spiral PC3yesno10.785\nConic3yesyes00.5..1\nCubic Bézier4yesyes20.5..0.95\nSpiro4yesno3TODO\nHyperbezier4yesno10.5..1\nQuintic Bézier8yesyes4?0.8..0.996\n\nRelationship graph\n\nThis graph has an arrow when one curve family fully includes the parameter space of another. A dotted line represents an approximation which is better than can be expected from scaling based on the number of parameters.\nProperties\nNumber of parameters\nWe use the same parameter counting policy as Raph's thesis (section 2.8). The endpoints are considered to be fixed, so to use in an actual application, there is an additional transform consisting of translation, rotation, and scaling. This additional transformation is the same for all curves.\nThe number of parameters is a tradeoff. To represent an arbitrary curve, with a small number of parameters more subdivisions are needed. Increasing the number of parameters has a cost, for representing the parameter values, presenting them in a UI for humans to manipulate, and for doing computations. Generally, higher degrees of continuity requires more parameters.\nIn general, the accuracy of curve fitting scales with an exponent equal to the number of parameters plus 2. For example, fitting with a quadratic Bézier or Euler spiral has O(n^4) scaling, meaning that subdivision in half improves accuracy by a factor of 16. That said, actually achieving optimal curve fitting may be challenging; I'm\nClosure under subdivision\nIf a curve is subdivided at an arbitrary point, will the two subdivisions also be members of the curve family?\nTwo-parameter curve families closed under subdivision are all derived by taking a segment of a fixed generating curve (section 4.1 of Raph's thesis). Thus, such families can be characterized entirely by the generating curve (parabola, Euler spiral, rectangular elastica). More or less any generating curve can work, and the properties of the generating curve (monotone curvature, periodicity, presence of an inflection point) map to the properties of the curve family. Section 4.8 of Raph's thesis explores this space somewhat.\nClosure under affine transformation\nWhen an arbitrary affine transformation is applied to a curve, is that a member of the curve family?\nAs a general pattern, Bézier curves are closed under affine, including the rational variants, but spirals and curves defined variationally are not. However, it is certainly possible to mix the two. The affine closure of Euler spirals is a potentially interesting curve family.\nInflections\nAn S-shaped curve has an inflection point. Some curve families only contain convex curves, while others can represent inflections. Arguably, having too many inflection points is a drawback, as it is not intuitive to control the curve.\nSuperellipses\nSuperellipse-like shapes are very important in graphic design. The ability of a curve family to approximate a superellipse varies widely. As a general principle, curves defined variationally do not easily form superellipses, those with a rational polynomial at their core can represent the entire range, and Béziers are in the middle (they're reasonably good at representing arbitrary curves, but have a limit, beyond which the curve develops unwanted additional inflections).\nTo quantify this more precisely, we define the superellipticity range of a curve family as follows. Set both endpoint tangents to π/4 (45°), so the curve covers a quarter-circle of arc. Use the curve to define one quadrant of a superellipse shape, with an extent of 1 on both x and y axes. Compute the area of the resulting quadrant. For a circle, it is π/4 (≈0.785), and for a square it is 1. As the remaining parameters are varied, what is the range of areas that can result? The range is further constrained by the curve having no inflection points (though curvature is allowed to reach zero at the endpoints) and being symmetrical, as these are visually important features of a real superellipse.\nNote that a two parameter curve family has a single value, as there are no additional parameters to vary after the endpoint tangents are set.\nThe curves\nHere we mostly point to a reference for the curve family. Each section could be expanded greatly, perhaps by giving the curve family its own page.\nLine segment\nA line segment has zero curvature. A polyline has G0 continuity only.\nCircular arc\nA circle has constant curvature. A circular arc is a segment of a circle.\nIn general, circular arcs can only achieve G0 continuity, though there are techniques to achieve G1 by applying additional constraints, notably biarcs.\nThey are popular in CAD, partly because they are the only widely implemented curve family in G-code.\nQuadratic Bézier (parabola)\nA quadratic Bézier is a segment of a parabola.\nQuadratic Béziers are in widespread use as the curve family of TrueType fonts (and thus TrueType-flavored OpenType).\nEuler spiral\nAn Euler spiral has curvature linear with arc length. It is extensively discussed in section 4.6 of Raph's thesis. It is an especially good choice for making a G2 continuous interpolating spline (for reasons discussed in the thesis), but a weakness is representing curves with significant curvature variation.\nAnother benefit of the Euler spiral is that its parallel curve is mathematically tractable to compute. See Cleaner parallel curves with Euler spirals.\nRectangular elastica\nThe minimum energy curve (MEC) is the curve minimizing the total bending energy when constrained to pass through the given control points, so is a mathematical idealization of a physical spline made out of a thin strip of flexible material. Each segment is a segment of the \"rectangular elastica\", which is a particular solution of the general elastica. It is extensively discussed in section 4.2 of Raph's thesis.\nElastica\nThe general elastica has an additional parameter, which corresponds to tension, resulting in a three-parameter curve. It has a narrow superelliptical range. In addition, it is symmetrical around the inflection point, which means it cannot model an asymmetrical S-shape. More precisely, when the endpoint tangents are anti-symmetrical, the area is zero for all values of the tension parameter. It is rarely used directly, but because of its physical importance, it is worth evaluating other curve families in their ability to accurately approximate an elastica.\nProbably worth noting here, the SI-MEC is a two parameter curve family which is not closed under subdivision. It is analyzed in section 3.11 of Raph's thesis, with the conclusion being that the Euler spiral is superior in most cases.\nA definitive treatment of the elastica is in chapter 3 of Raph's thesis.\nBalanced Bézier\nA \"balanced Bézier\" is work in progress to restrict the parameter space of cubic Béziers to those with a smooth parametrization. See the Sweet Béziers Zulip thread for more information.\nIt approximates circular arcs with O(n^6) accuracy.\nRational quadratic Bézier\nA rational quadratic Bézier is a segment of a conic section. It is fairly widely used in CAD, less so in graphic design applications. It cannot represent an inflection point, but does have the full range of superellipticity.\nAn additional superpower is that it is closed under perspective transformation.\nCubic Bézier\nA cubic Bézier is by far the most common curve representation. It can accurately represent an extremely wide range of curves, and also has a control scheme suitable for direct manipulation in a UI. See A Primer on Bézier Curves for more information.\nCurve-fitting is challenging; no good general technique was known until Raph's [Bézier curve fitting] blog posts. In general, it requires solution of a quartic equation, and the process is discontinuous; there exist input curves extremely close to each other with very different best fits.\nSpiro\nThe Spiro curve family was an attempt to create a tool more suitable for interactive curve editing. It is defined as the curvature being a cubic function of arc length. It is the basis of a practical G4-continuous interpolating spline, and is an excellent choice when high degrees of continuity are required. One weakness is the limited superellipticity range. It is discussed in section 7.3 of Raph's thesis, and has had some limited implementation success.\nHyperbezier\nThe hyperbezier is defined as $$\\kappa(s) = (as+b)/(cs^2+ds+e)^2$$. There are four parameters as multiplying all five coefficients by a constant does not change the result.\nDevelopment of this curve family is work in progress. Two Zulip threads are Hyperbezier progress and Hyperbezier parameter mapping.\nAn earlier draft is presented in The hyperbezier pen tool and is implemented in the spline library. That draft had some weaknesses (not closed under subdivision, limited superellipticity range), so will be superseded by the new version.\nQuintic Bézier\nThe quintic Bézier pushes the number of parameters into unmanageable territory. It is not clear that there is any practical way to achieve the theoretical O(n^10) curve fitting accuracy; from experience with cubics it is clear that it is a highly nonlinear optimization problem with many local minima. That said, it does have some uses.\n","id":"https://linebender.org/wiki/curve-families/","title":"Curve families"},"https://linebender.org/wiki/curve-offset/":{"body":"Curve offsetting and fitting is an important foundational topic that necessary for stroking paths, in addition to\nmany other places. For now, I'm just posting relevant literature here. Hopefully over time, it will become a review\nof the literature on this topic.\n\nPolar Stroking: New Theory and Methods for Stroking Paths\n\n","id":"https://linebender.org/wiki/curve-offset/","title":"Curve offsetting and fitting"},"https://linebender.org/wiki/curves/":{"body":"Articles about curves:\n","id":"https://linebender.org/wiki/curves/","title":"Curves"},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"body":"The evolute of the Euler spiral has a simple representation as a Cesàro equation.\nEvolutes of curves are interesting because the Nehab 2020 paper shows us that for strongly correct stroke expansion, the evolute of a curve is needed in addition to the parallel curve (see Figure 11 and related discussion).\nThis page contains that derivation, as well as related results on near-optimal flattening of the evolute to line segments.\nIn this image, the Euler spiral segment is in gray, and its evolute is in blue:\n\n\nWe'll start with an Euler spiral defined (in Cesàro form) as follows:\n$$\\kappa(s) = as$$\nIntegrating this equation results in the Whewell form:\n$$\\theta(s) = \\frac{as^2}{2}$$\nAnd we have an equation for the derivative of the curve.\nIn this derivation, we'll fluidly mix complex numbers and 2D vectors, writing unit vector in the direction of $\\theta$ as $e^{i\\theta}$.\nThis choice, while a bit of an abuse of notation, will be very convenient when calculating derivatives.\n$$x'(s) = e^{i\\theta(s)} = e^{i\\frac{as^2}{2}}$$\n$$x''(s) = iase^{i\\frac{as^2}{2}} = iasx'(s)$$\nThe evolute is defined as points offset from the source curve in the normal direction, by the radius of curvature.\nGenerally:\n$$\\bar{x}(s) = x(s) + \\frac{ie^{i\\theta(s)}}{\\kappa(s)}$$\nPlugging in the Euler spiral, we can thus easily obtain the derivative of the evolute with respect to the s parameter.\n$$\n\\begin{align}\n\\bar{x}'(s) &= x'(s) + \\frac{i^2asx'(s)}{as} - i\\frac{x'(s)}{as^2} \\\\\n&= -i\\frac{x'(s)}{as^2}\n\\end{align}\n$$\nProceeding, we'll get the arc length (using s, arc length along original Euler spiral, as a parameter), and also obtain a second derivative for use in calculating the curvature.\n$$\\bar{s}'(s) = |x'(s)| = \\frac{1}{as^2}$$\n$$\\bar{s}(s) = -\\frac{1}{as}$$\nA note: the formula for arc length follows readily from a well-known result in differential geometry, as cited in the Stoer paper (the bottom of page 322).\nHowever, given that we already have the derivatives for the purpose of computing curvature, it's maybe easier to just derive than rely on a cited method.\n$$\\bar{x}''(s) = \\frac{x'(s)}{s} + 2i\\frac{x'(s)}{as^3}$$\nWhen computing the cross-product for the standard curvature formula, the second term above drops out because it's in the same direction as the first derivative, while the first is orthogonal.\n$$\n\\begin{align}\n\\bar{\\kappa}(s) &= \\frac{\\bar{x}'' \\times \\bar{x}'}{|\\bar{x}'|^3} \\\\\n&= \\frac{1}{as^3} / \\frac{1}{a^3 s^6} \\\\\n&= a^2 s^3\n\\end{align}\n$$\nAnd then this gives the Cesàro equation for the evolute in terms of its own arc length:\n$$\\bar{\\kappa}(\\bar{s}) = -\\frac{1}{a\\bar{s}^3}$$\nGeneral evolute of log-aesthetic curves\nThe family of curves in which curvature is a power of the arc length is called \"log-aesthetic curves,\" and there is a small industry of papers on this curve family.\nThis family is closed under evolute, see Yoshida & Saito 2012 for the result.\nThus, the formula derived in this page is an instance of the general result, and is also shown in Figure 3(c) of the above cite.\nIn general, the evolute of the curve defined by $\\kappa(s) = s^\\gamma$ is another curve with $\\kappa(s) = s^{-\\frac{1 + 2\\gamma}{\\gamma}}$.\n(There may be a uniform scaling factor; someone should go over the math in detail)\nSubdivision density\nFollowing the derivation for the parallel curve of the Euler spiral, the subdivision density for flattening to lines of a curve with respect to the source curve parameter s is given by this formula:\n$$\\rho(s) = \\sqrt{0.125|\\bar{\\kappa}(s)|}\\frac{d\\bar{s}}{ds}$$\nPlugging in the formulae above and simplifying, we get:\n$$\\rho(s) = \\sqrt{\\frac{1}{8s}}$$\nAnd to do subdivision, we need the integral of this (and its inverse):\n$$\\int_0^t\\rho(s)dt= \\sqrt{\\frac{t}{2}}$$\nThus, finding the subdivision points for near-optimal flattening of an Euler spiral evolute is even simpler than the flattening of the Euler spiral itself, much less the parallel curve of an Euler spiral.\nReferences\n\nCurve Fitting with Clothoidal Splines, Josef Stoer, 1982\nConverting stroked primitives to filled primitives, Diego Nehab, 2020\nThe Evolutes of Log-Aesthetic Planar Curves and the Drawable Boundaries of the Curve Segments, N. Yoshida & T. Saito, 2012\n\n","id":"https://linebender.org/wiki/curves/euler-spiral-evolute/","title":"Evolute of the Euler spiral"},"https://linebender.org/wiki/formatting-scheme/":{"body":"Copyright\nCode files should start with a copypright notice composed of two comments following this format:\n\nThe year should be the file's creation year.\n\"XXXX\" should be the project's name.\nThe license depends on the project and the file type, but is usually \"either Apache 2.0 or MIT License, whichever is least restrictive\".\nShaders are usually licensed under the former two licenses OR the Unlicense.\nRust\nMost Linebender projects files are written in Rust.\nFor those files, the formatting produced by rustfmt is required.\nMarkdown\nIn Markdown files, every paragraph should have one line per sentence.\nThis makes git diff easier to read.\n[1] [2]\n","id":"https://linebender.org/wiki/formatting-scheme/","title":"Formatting scheme for Linebender projects"},"https://linebender.org/wiki/gpu/":{"body":"This wiki subdirectory holds resources for GPU programming techniques, especially compute shaders.\n","id":"https://linebender.org/wiki/gpu/","title":"GPU resources"},"https://linebender.org/wiki/gpu/mesh-shaders/":{"body":"Mesh shaders are a compute-centric approach to producing geometry for rasterization.\nThey are significantly more powerful than the traditional vertex shader approach, and also simpler than the complex zoo of shader types (hull, domain, tessellation, geometry) that were originally proposed to overcome the limitations of simple vertex shading.\nThey were originally introduced by Nvidia in 2018 in the Turing microarchitecture.\nIn Vulkan, the capability was originally an Nvidia-specific extension, but is now the cross-platform VK_EXT_mesh_shader extension.\nAs of early 2024, representative lower-bound cards include GTX 1650, AMD Radeon RX 6400 (RDNA 2), and Intel Arc A370.\nIt is added to Metal 3 (2022) and hardware support is new in M3 and A17 (though the example project will run on M1 and A14).\nThe feature is present in DirectX 12 Ultimate, released in 2020.\nIt is not yet available in WebGPU (gpuweb#3015 is the feature request).\nMesh shaders are a fusion of compute and traditional rasterization.\nThey bring three new capabilities to the compute side, and of course the ability to drive the rasterization pipeline.\nThe three new compute-only capabilities are:\n\nAbility to spawn variable amounts of work\nCommunication through two shader stages through a queue\nOrdering of elements processed through the shader stages\n\nThese are potentially of interest even with rasterization disabled.\nMainstream usage includes generating primitives (usually triangles) from the second stage.\nThese are then rasterized (in hardware) and shaded using fragment shaders in exactly the same way as the traditional vertex/fragment pipeline.\nThe main motivation for mesh shaders is improving the efficiency and flexibility of traditional 3D rasterization, most prominently culling of larger chunks of unneeded geometry, dynamic level-of-detail (LOD) selection, and procedural generation of geometry.\nThese uses build on the use of compute shaders for these tasks, advocated in Graham Wihlidal's GDC 2016 talk, Optimizing the Graphics Pipeline with Compute.\nMesh shaders have a number of advantages over using a compute shader to fill a vertex buffer: you don't have to allocate the intermediate vertex buffer (which can fail if the size is not estimated correctly), there's less traffic to device memory as the queues mostly live in shared memory, and there's no pipeline barrier between the compute and rasterization stages.\nBasic computational model\nThere are two stages, but the first stage is optional.\nFollowing the GPU ecosystem tradition of diversity of terminology, the first stage is called a \"task shader\" in Vulkan, an \"amplification shader\" in DirectX, and an \"object shader\" in Metal.\nThe second stage is called a mesh shader.\nThe first stage is dispatched like a compute shader.\nThere is an output user-defined \"payload\" structure (analogous to the interface between vertex and fragment shaders, but can be larger; on DirectX 12 and Metal the limit is 16k), and then each workgroup dispatches a variable number of workgroups of the mesh shader.\nThat number can be zero.\nOn Metal, it is limited to 1024 workgroups.\nThe second stage (the mesh shader) accepts the input from the task shader, and can also access the index of the parent task shader workgroup that spawned it.\nThere are two arrays in workgroup shared memory, one for vertices, the other for vertex indices for primitives.\nOn output, the vertex and primitive counts are set, up to the maximum allocation of the arrays.\nNvidia recommends 64 vertices and 126 primitives, though (as is typical in the GPU ecosystem) the exact limits vary.\nOn Metal, the limits are 256 vertices and 512 primitives.\nThe primitive is usually a triangle, but all implementations support lines, and Vulkan and Metal support points as well.\nFor triangles, there are 3 vertex indices per primitive.\nThere is a per-vertex user defined struct (essentially the same as the output of a vertex shader) and also a new per-primitive user-defined struct.\nExecution model\nOn Nvidia, there is a strong forward progress guarantee, and the workgroups of a mesh shader are launched in order.\nThus, doing a single-pass scan inside the mesh shader is viable (source: launch ordering is discussed at 24:18 and the single-pass scan is at 43:59 of the Turing Mesh Shaders video).\nTODO: find out ordering guarantees on other hardware.\nPresumably it's weak on Apple.\nPerformance\nThe Vulkan blog warns that portability in performance across hardware is difficult.\nThe Mesh shaders: Optimization and best practices page from AMD contains recommendations and quantitative measurements of how to tune mesh shader usage.\nIn addition, Timur's blog post How mesh shaders are implemented in an AMD driver gives insight into their implementation (at least on AMD).\nResources\nThese are authoritative references and particularly helpful documents to explain mesh shaders.\n\nIntroduction to Turing Mesh Shaders from Nvidia\n\nTuring Mesh Shaders at Siggraph 2018 (video)\n\n\nMesh Shading for Vulkan, Khronos blog\nReinventing the Geometry Pipeline: Mesh Shaders in DirectX 12 (video)\nTransform your geometry with Metal mesh shaders, WWDC 2022 (video)\nDirectX Mesh Shader spec\n\n","id":"https://linebender.org/wiki/gpu/mesh-shaders/","title":"Mesh shaders"},"https://linebender.org/wiki/gpu/sorting/":{"body":"Many rendering algorithms (including a proposed sparse strip technique for path rendering, and also Gaussian Splatting) rely on sorting.\nBecause the GPU has a different architecture to the CPU, programs running on the GPU have different performance characteristics, and this changes which sorting algorithms are optimal for a particular context.\nIn particular, sorting algorithms that exploit parallelism tend to be more suited to the GPU.\nThe literature on parallel sorting algorithms is extremely well developed, and there are many excellent implementations for CUDA.\nIn WebGPU, the situation is still evolving.\nThis page has pointers to the potentially useful resources for understanding existing implementations and developing new ones.\nClasses of sorting algorithms\nThe most promising sorting algorithms for GPU are merge sort and radix sort.\nWithin radix sort there are further distinctions, most notably least significant digit (LSD) vs most significant digit.\nKey size and segmentation\nGPU sorting works best when the key is small and fixed-size.\nFor many rendering applications, this is a reasonable assumption.\nIn some cases (especially path rendering), a segmented sort may be a better choice than one that sorts the entire buffer.\nAn especially good writeup is segmented sort from Modern GPU, which builds on their mergesort.\nLSD implementations\nThe LSD sort algorithm with the strongest claims to being fastest is Onesweep.\nThis has an authoritative implementation in CUB, for which a good starting point is agent_radix_sort_onesweep.\nA very popular sorting algorithm in gamedev circles is FidelityFX sort from AMD, for which the original source is HLSL.\nThis is has enough similarity to Onesweep that it is worth considering the differences.\n\nOnesweep uses a single pass scan for the digit histograms, while FidelityFX uses a traditional multi-dispatch tree reduction approach.\nOnesweep uses 8 bit digits (so 4 passes for a 32 bit key), while FidelityFX uses 4.\nOnesweep uses warp-level multi-split for ranking, while FidelityFX uses two 2-bit LSD passes.\n\nBoth original code bases use subgroups extensively.\nThe FidelityFX implementation works with a subgroup size of 16 or greater, and will produce incorrect results if deployed for a smaller subgroup size.\nOnesweep depends on a hardcoded subgroup (warp) size of 32 and is difficult to make portable to GPUs with other subgroup sizes.\nWebGPU experiment\nRaph did an experiment of a hybrid algorithm largely based on FidelityFX, but adapted to WebGPU, and with a version of warp-level multi-split.\nIt achieves approximately 1G elements/s on M1 Max.\nFor radix sorts, element/s on large arrays (16M elements) is meaningful, as the algorithm scales linearly with the array size and is usually insensitive to the distribution of keys.\nLike FidelityFX, it uses 4 bit digits and a tree reduction approach to histogram scan.\nIt's also basically patterned after FidelityFX in the structure of dispatches.\nBecause WebGPU doesn't have subgroups (yet), the warp-level multi-split algorithm fakes it using workgroup shared memory.\nThe terms \"warp\" and \"lane\" are borrowed from CUDA but in this case represent a more or less arbitrary partitioning.\nA \"warp\" size of 16 was found to outperform 32, which is not surprising because the fake \"ballot\" operation to determine which neighbors in the warp hold the same key does linear iteration proportional to warp size.\nRaph has also done experiments (code not yet published) porting this to Metal and using actual subgroup ballot operations.\nThat results in ~3G el/s, though some of the speedup is vanilla wgpu inefficiency.\nAlso note that to implement this algorithm correctly requires a subgroup barrier (simdgroup_barrier in Metal Shading Language), and that this primitive is not in the WebGPU subgroup proposal (see gpuweb#4437).\nHowever, on M1 Max, placing a stronger threadgroup barrier is only a 2% slowdown, so this matter is not urgent.\nAttempts to push this experiment to 8 bits per digit have not yet yielded sustainable performance improvement.\nSeveral people have pointed out the Onesweep inspired sort from Lichtso, part of the splatter Gaussian Splat implementation.\nHowever, as discussed in splatter#2, it is an approximate sort only, and may rely on luck that the particular GPU will process atomics within a subgroup in order.\nIn addition, because it is one-pass, on GPUs without a forward progress guarantee (of which Apple Silicon is especially noticeable), the algorithm may deadlock or experience extended stalls.\nThe experiment mentioned above has neither of these shortcomings.\nNote that it does achieve 8 bits per pass; it is entirely likely that a high performance implementation could draw inspiration from it, more so after subgroups land in WebGPU and thus real warp-level multi-split is possible.\nDeviceRadixSort\nAras Pranckevičius has been doing lots of experiments with sorting in his UnityGaussianSplatting implementation, all written in the Unity flavor of HLSL.\nUnityGaussianSplatting#82 adds something called DeviceRadixSort which shows a modest performance improvement (the discussion thread also speaks to the difficulty of implementing such things portably).\nIt uses 8 bit digits, and a subgroup implementation of warp-local multi-split.\nThis implementation is attempting to be portable to a range of subgroup sizes, but is untested on wave sizes other than 32 and is still under development.\nThe author, Thomas Smith, has done experiments comparing reduce-then-scan against a chained single-pass approach for the global histogram scan, which suggest that the latter has approximately a 10% performance gain on Nvidia hardware, but pose considerable challenges for portability.\nSingle-pass approaches will not perform well on devices without a forward progress guarantee.\nHybrid Radix Sort\nHybrid Radix sort is another strong contender, fundamentally based on an MSD approach but with additional mechanisms to reduce memory bandwidth.\nIt has better performance in some cases than Onesweep.\nLike Onesweep, it manages 8 bits per pass.\nThat said, it is considerably more complicated, and it's also not clear how easily it would translate to WebGPU.\nMerge sort\nModern GPU has a well documented mergesort, also readily adapted to segmented sort.\nIt is older, and performance numbers from newer papers suggest that it has been surpassed.\nThat said, the segmented sort capability may be valuable.\nForma has a sorting implementation called conveyor_sort.\nThis is a merge sort and is in vanilla WebGPU.\nPerformance has not been characterized yet.\nBitonic sort\nBitonic sort is often proposed as it is conceptually fairly simple and the parallelism is easy to exploit, but when applied to large problems it is clear that the number of passes is unacceptably large; typically in the dozens where a radix sort would have 4 or 8.\nDiscussion\nThere is active discussion of this issue in the Sorting revisited Zulip thread.\nResources and measurements from implementations can be discussed there, then hopefully added to this wiki page.\n","id":"https://linebender.org/wiki/gpu/sorting/","title":"Sorting"},"https://linebender.org/wiki/long-term-roadmap/":{"body":"Unstructured notes from the RustNL roadmap brainstorming that were left out of the May-July roadmap blog post.\nThis may become a living document, eg a long-term roadmap for the project. For now it's the post-July roadmap.\nVello\n\nEmoji\nImage filters / blur / shadows\n\nRender graph (Raph to drive, see thread)\n\n\nGpu embedding / wgpu engine abstraction (see Servo thread)\nGlyph caching\n\nRender graph? \nor CPU side? \n(sparse strips probably)\n\n\nFrame pacing\nDamage regions\n\nMVP: just render sub-rects\n\n\nCPU impl\n\nTesting\nDownlevel\n\n\nFuzzing?\n\nMasonry\n\n‘Compositing’\nFrame pacing (relevant to Vello and AccessKit)\nDamage regions\nStyling options\nCopy features from Tomorrow Corporation Tech Demo\n\nParley\n\nIME support\n\nSuggestion regions?\n\n\nSplit out blob & other vocabulary types\n\nBlob may be prioritized by other project needs\n\n\n\nXilem\n\nAndroid\n\nMaterial UI style widgets/views? Requires styling\n\n\nStyling\nHot reloading\nAsync behavior in Masonry widgets (image loading etc)\nCleanup run for issues and PRs\n\nAccessKit\n\n\nHaven’t talked about it a lot\n\nImprove documentation (see #402)\nPoint to / create a repository of accessibility best practices.\nNot just code, also social: Have people with disabilities test your stuff!\nPoint to resources, forums, etc? Need to talk to Matt about this. (What were the best practices at Microsoft?)\nAccessibility isn’t just screen readers. Also color contrast, customizing size, IME support, motor disabilities (avoid stuff that requires simultaneous input).\n\n\n\n“Accessibility is more than adding a dependency to AccessKit”\n\n(Olivier: Note to self: include GMTK video about Celeste Assist Mode)\n\n\n\nAndroid specific work\n\nNeed to prioritize Android\n\nMasonry:\n\nHot state for pointer pressed?\nGesture recognition (scrolling) P3\n\nThere is a dumb solution for scrolling without momentum\nPotentially adapt code from egui (used in vello demo)\n\n\nPencil gestures\nMultitouch\nIME\n\nLanding the Lucas Meurer winit PR P1\nExtend winit IME PR for richer functionality\nReview glazier IME API & come up with design proposal P3 (aaron)\nPlumbing suggestion spans etc (winit)\n\n\nAccessibility (matt, jul 1+) P-1\nStudy Tao\nTo what extent do we tap into Android View etc\n\n\nwinit future\n\nshort term plan: PR functionality into winit\nlook for natural extension points\n\nthese will be platform-specific\nMac: subclassing the NSView/NSApplication subclasses\nwayland: messy / smithay has message dispatcher\nAndroid: do we subclass View/Application/Activity? raph will investigate P1\n\nAccessibility (matt, jul 1+)\nCan we access accessibility from native-activity / game-activity?\nNote: React Native requires writing Java-land activity\nWhat minimum platform version?\n\n\n\n\n\n\nLook at Makepad’s implementation (momentum scrolling etc)\n\n\n\n","id":"https://linebender.org/wiki/long-term-roadmap/","title":"Post-July Linebender roadmap"},"https://linebender.org/wiki/office-hours/":{"body":"Linebender holds weekly office hours, open to anyone interested in following the project. The best place to find more information is the #office-hours stream on the Zulip chat. The invite is also available through Google Calendar.\nA Google drive folder holds the archives of the notes.\n","id":"https://linebender.org/wiki/office-hours/","title":"Office hours"},"https://linebender.org/wiki/text/":{"body":"Storing, editing and displaying text is hard. As a newcomer to the world of text, I faced almost unfathomable complexity. The aim of this page is to compartmentalize the different aspects of text, to make the complexity as manageable as possible.\nOverview\nHistory\nAlthough not strictly necessary to understand text rendering, a brief understanding of how words have been recorded over the millennia helps to explain some of the confusing names and conventions of modern typesetting.\n\nWritten text/calligraphy\nThe movable-type printing press (Gutenberg 1440)\n\nBrief description of the process of casting type in a foundry, compositing with composing sticks, fixing in a forme with furniture and printing. Sorts (em en quad) Perhaps justification.\nfi, fl, ffi, ffl ligatures (nice introduction to the fact there isn't a 1-1 correspondence between characters and glyphs)\n\n\nDistinction between font (specific set of type, with a weight, size, etc) and typeface (family of fonts)\n\nNon-latin typefaces and letterpress printing\n\n\nHot metal typesetting\nCRT displays - an alternative to paper\nRaster image processors, dots, PostScript, DPI?\n\nText data\nThe usual suspects:\n\nASCII\nUnicode\n\nGraphemes, grapheme clusters, normalization, segmentation: all that good stuff\n\nin particular, things like sentence break, soft line break, hard line break, character classes\nRTL, Bidi\n\n\nUTF-{8, 16, 32}\n\nin particular, UTF-16 surrogates, BOM\n\n\n\nFonts\n\nFonts vs. typefaces\nClasses of typefaces (monotype, italic, ...)\nComputer representations of fonts. Bitmap/truetype/opentype (raster vs vector)\nSystem default fonts, font fallback chains, locations of fonts on windows/mac/linux\nModern opentype tables for things like font color, variable fonts\nEmojis 😊\nem quadrat (width of 'M'), en quadrat\n\nShaping\nShaping is essentially characters -> glyphs\n\nLatin is almost 1-1 (apart from ligatures, other things?)\nDevanagari/Arabic/Hebrew (also RTL)\n\nLayout\n\nLine breaks\nPage breaks & layout when you have pages (e.g. not on the web)\nOften backwards-and-forwards between layout and shaping - try different shaping runs and see how much room they take up, ...\nText layout data structures\n\nLayout is expensive, so if the text doesn't change you probably want to compute the layout and store it.\n\n\n\nRendering\n\nBitmap vs\nLink to curves page\n\nLocalization\nAlthough not strictly a part of text rendering, it is also worth mentioning localization alongside the other sections, many of which also deal implicitly with localization themselves. Here we cover some topics in localization that are not explicitly mentioned elsewhere.\n\nDates\nNumbers\n\nMisc\nTODO find a suitable section for these topics\n\nIME\n\n","id":"https://linebender.org/wiki/text/","title":"Text"}},"docInfo":{"https://linebender.org/":{"body":569,"title":1},"https://linebender.org/about/":{"body":149,"title":0},"https://linebender.org/blog/":{"body":2,"title":1},"https://linebender.org/blog/doc-include/":{"body":460,"title":5},"https://linebender.org/blog/roadmap-may-2024-retro/":{"body":963,"title":3},"https://linebender.org/blog/roadmap-may-2024/":{"body":1222,"title":3},"https://linebender.org/blog/rustnl-2024-unconference/":{"body":1199,"title":4},"https://linebender.org/blog/tmil-09/":{"body":269,"title":4},"https://linebender.org/blog/tmix-01/":{"body":164,"title":4},"https://linebender.org/blog/tmix-02/":{"body":184,"title":4},"https://linebender.org/blog/tmix-03/":{"body":155,"title":4},"https://linebender.org/blog/tmix-04/":{"body":178,"title":4},"https://linebender.org/blog/tmix-05/":{"body":135,"title":3},"https://linebender.org/blog/tmix-06/":{"body":239,"title":4},"https://linebender.org/blog/tmix-07/":{"body":355,"title":4},"https://linebender.org/blog/tmix-08/":{"body":438,"title":4},"https://linebender.org/blog/tmix-10/":{"body":748,"title":5},"https://linebender.org/blog/xilem-2024/":{"body":1328,"title":3},"https://linebender.org/blog/xilem-backend-roadmap/":{"body":1866,"title":4},"https://linebender.org/contributor-guidelines/":{"body":427,"title":3},"https://linebender.org/wiki/":{"body":38,"title":1},"https://linebender.org/wiki/canonical-lints/":{"body":83,"title":5},"https://linebender.org/wiki/capitalization-scheme/":{"body":67,"title":4},"https://linebender.org/wiki/cubic-robustness/":{"body":598,"title":3},"https://linebender.org/wiki/curve-families/":{"body":863,"title":2},"https://linebender.org/wiki/curve-offset/":{"body":32,"title":3},"https://linebender.org/wiki/curves/":{"body":2,"title":1},"https://linebender.org/wiki/curves/euler-spiral-evolute/":{"body":376,"title":3},"https://linebender.org/wiki/formatting-scheme/":{"body":65,"title":4},"https://linebender.org/wiki/gpu/":{"body":10,"title":2},"https://linebender.org/wiki/gpu/mesh-shaders/":{"body":513,"title":2},"https://linebender.org/wiki/gpu/sorting/":{"body":665,"title":1},"https://linebender.org/wiki/long-term-roadmap/":{"body":309,"title":4},"https://linebender.org/wiki/office-hours/":{"body":31,"title":2},"https://linebender.org/wiki/text/":{"body":279,"title":1}},"length":35},"lang":"English"} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..49891c2 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,124 @@ + + + + https://linebender.org/ + + + https://linebender.org/about/ + + + https://linebender.org/blog/ + + + https://linebender.org/blog/doc-include/ + 2024-06-28 + + + https://linebender.org/blog/roadmap-may-2024-retro/ + 2024-08-24 + + + https://linebender.org/blog/roadmap-may-2024/ + 2024-06-17 + + + https://linebender.org/blog/rustnl-2024-unconference/ + 2024-06-15 + + + https://linebender.org/blog/tmil-09/ + 2024-10-15 + + + https://linebender.org/blog/tmix-01/ + 2024-02-06T07:28:42 + + + https://linebender.org/blog/tmix-02/ + 2024-03-04T07:34:42 + + + https://linebender.org/blog/tmix-03/ + 2024-04-04 + + + https://linebender.org/blog/tmix-04/ + 2024-05-01 + + + https://linebender.org/blog/tmix-05/ + 2024-06-12 + + + https://linebender.org/blog/tmix-06/ + 2024-07-03 + + + https://linebender.org/blog/tmix-07/ + 2024-08-08 + + + https://linebender.org/blog/tmix-08/ + 2024-09-11 + + + https://linebender.org/blog/tmix-10/ + 2024-11-04 + + + https://linebender.org/blog/xilem-2024/ + 2024-01-10T07:34:42 + + + https://linebender.org/blog/xilem-backend-roadmap/ + 2024-01-19T13:00:00 + + + https://linebender.org/contributor-guidelines/ + + + https://linebender.org/wiki/ + + + https://linebender.org/wiki/canonical-lints/ + + + https://linebender.org/wiki/capitalization-scheme/ + + + https://linebender.org/wiki/cubic-robustness/ + + + https://linebender.org/wiki/curve-families/ + + + https://linebender.org/wiki/curve-offset/ + + + https://linebender.org/wiki/curves/ + + + https://linebender.org/wiki/curves/euler-spiral-evolute/ + + + https://linebender.org/wiki/formatting-scheme/ + + + https://linebender.org/wiki/gpu/ + + + https://linebender.org/wiki/gpu/mesh-shaders/ + + + https://linebender.org/wiki/gpu/sorting/ + + + https://linebender.org/wiki/long-term-roadmap/ + + + https://linebender.org/wiki/office-hours/ + + + https://linebender.org/wiki/text/ + + diff --git a/wiki/canonical-lints/index.html b/wiki/canonical-lints/index.html new file mode 100644 index 0000000..367075f --- /dev/null +++ b/wiki/canonical-lints/index.html @@ -0,0 +1,173 @@ + + + + + + + + Canonical lint set for Linebender projects - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Canonical lint set for Linebender projects

    +

    All Linebender projects should include the following set of lints in their Cargo.toml:

    +
    [lints]
    +# This one may vary depending on the project.
    +rust.unsafe_code = "forbid"
    +
    +# LINEBENDER LINT SET - v1
    +# See https://linebender.org/wiki/canonical-lints/
    +rust.keyword_idents_2024 = "forbid"
    +rust.non_ascii_idents = "forbid"
    +rust.non_local_definitions = "forbid"
    +rust.unsafe_op_in_unsafe_fn = "forbid"
    +
    +rust.elided_lifetimes_in_paths = "warn"
    +rust.let_underscore_drop = "warn"
    +rust.missing_debug_implementations = "warn"
    +rust.missing_docs = "warn"
    +rust.single_use_lifetimes = "warn"
    +rust.trivial_numeric_casts = "warn"
    +rust.unexpected_cfgs = "warn"
    +rust.unit_bindings = "warn"
    +rust.unnameable_types = "warn"
    +rust.unreachable_pub = "warn"
    +rust.unused_import_braces = "warn"
    +rust.unused_lifetimes = "warn"
    +rust.unused_macro_rules = "warn"
    +rust.unused_qualifications = "warn"
    +rust.variant_size_differences = "warn"
    +
    +clippy.allow_attributes = "warn"
    +clippy.allow_attributes_without_reason = "warn"
    +clippy.cast_possible_truncation = "warn"
    +clippy.collection_is_never_read = "warn"
    +clippy.dbg_macro = "warn"
    +clippy.debug_assert_with_mut_call = "warn"
    +clippy.doc_markdown = "warn"
    +clippy.exhaustive_enums = "warn"
    +clippy.fn_to_numeric_cast_any = "forbid"
    +clippy.infinite_loop = "warn"
    +clippy.large_include_file = "warn"
    +clippy.large_stack_arrays = "warn"
    +clippy.match_same_arms = "warn"
    +clippy.mismatching_type_param_order = "warn"
    +clippy.missing_assert_message = "warn"
    +clippy.missing_errors_doc = "warn"
    +clippy.missing_fields_in_debug = "warn"
    +clippy.missing_panics_doc = "warn"
    +clippy.partial_pub_fields = "warn"
    +clippy.return_self_not_must_use = "warn"
    +clippy.same_functions_in_if_condition = "warn"
    +clippy.semicolon_if_nothing_returned = "warn"
    +clippy.shadow_unrelated = "warn"
    +clippy.should_panic_without_expect = "warn"
    +clippy.todo = "warn"
    +clippy.unseparated_literal_suffix = "warn"
    +clippy.use_self = "warn"
    +clippy.wildcard_imports = "warn"
    +
    +clippy.cargo_common_metadata = "warn"
    +clippy.negative_feature_names = "warn"
    +clippy.redundant_feature_names = "warn"
    +clippy.wildcard_dependencies = "warn"
    +# END LINEBENDER LINT SET
    +
    +

    And in their lib.rs:

    +
    // LINEBENDER LINT SET - v1
    +// See https://linebender.org/wiki/canonical-lints/
    +// These lints aren't included in Cargo.toml because they
    +// shouldn't apply to examples and tests
    +#![warn(unused_crate_dependencies)]
    +#![warn(clippy::print_stdout, clippy::print_stderr)]
    +
    +

    This is a curated list: Clippy has a lot of lints, and most of them are not included above.

    +

    You may occasionally want to run cargo clippy with clippy::pedantic on your codebase, which will cast a very wide nets and catch a lot of very minor issues. +The lint set above focuses on problems that either impact correctness or tend to snowball over time.

    +

    The list above should be considered canonical. +If you think a new lint should be added to Linebender projects, add it to this file in alphabetical order, then copy-paste the list across projects.

    +

    To keep this process simple, avoid modifying this list in individual projects. +If you want to add other per-project lints, add them above the list. +If you want to remove a lint, #![allow] or #![expect] it at the crate root.

    + + +
    +
    + + + diff --git a/wiki/capitalization-scheme/index.html b/wiki/capitalization-scheme/index.html new file mode 100644 index 0000000..3bb21b6 --- /dev/null +++ b/wiki/capitalization-scheme/index.html @@ -0,0 +1,103 @@ + + + + + + + + Capitalization scheme for Linebender projects - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Capitalization scheme for Linebender projects

    +

    All Linebender projects should follow this capitalization scheme:

    +
      +
    • The project's name should start with an uppercase letter when referring to the project itself, eg Vello.
    • +
    • The name should be all-lowercase where referring to the project as a Rust crate (for instance, in relation to crates.io). +In that case, it's encouraged to use backticks to put the project name in a codeblock, eg vello.
    • +
    • The name should be all-lowercase where referring to the project as a Github repository. +In that case, it's encouraged to either use backticks or make it a link, eg vello#1.
    • +
    +

    Feel free to correct any documentation you see to follow this scheme, unless the project is explicitly discontinued or in maintenance mode (eg Xi-Editor, Piet).

    + + +
    +
    + + + diff --git a/wiki/cubic-robustness/index.html b/wiki/cubic-robustness/index.html new file mode 100644 index 0000000..6f7d5bb --- /dev/null +++ b/wiki/cubic-robustness/index.html @@ -0,0 +1,134 @@ + + + + + + + + Cubic Bézier robustness - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Cubic Bézier robustness

    +

    Cubic Béziers have a clean and simple definition as a parametric curve (the coordinates are a cubic polynomial in the parameter), but they can also exhibit cusps and other degenerate behavior, which makes numerically robust algorithms challenging in some cases, especially stroking. Cusps and near-cusps also reduce the accuracy of numerical integration techniques for computing arc lengths.

    +

    At heart, the robustness problems are caused by the derivative of the curve becoming or nearing zero. In the latter case, the curve is not regular, which among other things means it may not be G1 continuous, even though the curve segment itself is C∞. Freya Holmér's Continuity of Splines video does an excellent job explaining that distinction.

    +

    This page will discuss techniques for detecting and mitigating these robustness issues.

    +

    Three cases

    +

    It's useful to consider three different cases, as they have different consequences for mitigation. Roughly in order from easiest to hardest, they are coincident control points, simple cusp, and colinear.

    +

    Coincident control points

    +

    This case has a control point coincident (or nearly so) with an endpoint. It is extremely easy to detect.

    +

    The tangent vector is well defined at the endpoint, thanks to L'Hopital's rule; it is equal to the vector from the control point to the other control point.

    +

    A good mitigation is to displace the control point slightly in the direction of the other control point. This has a minimal impact on the shape,

    +

    Illustration of cubic Bézier with coincident endpoint

    +

    Simple cusp

    +

    The simple cusp is in some ways a generalization of the coincident control point case, but with the cusp in the interior of the curve rather than at the endpoint.

    +

    The classic simple cusp is a semicubical parabola, which can be represented as y = x^1.5, as well as a parametric cubic curve. All cusp cases in a cubic Bézier can be represented as as affine transformations of this curve. There is always a single cusp.

    +

    Detection is in two parts. First, this case can only occur when the control polygon is self-intersecting, which can be readily computed as alternating signs of cross-products. This is rare in non-adversarial inputs. Then, either a curve classification or hodograph technique can be used to detect the near-cusp, see below.

    +

    A reasonable mitigation is to displace the control points along the tangent lines, either making the loop bigger or the inflection points farther apart, in either cases reducing the curvature.

    +

    Illustration of cubic Bézier with simple cusp

    +

    Colinear

    +

    Like the previous two cases, the colinear case is characterized by a (nearly) vanishing derivative, but is different in a number of important respects. Detection is reasonably straightforward, as the control points are close to colinear (which can be evaluated numerically as very small cross products relative to the magnitude of dot products).

    +

    From a classification perspective, the colinear case can either an S-shaped or loop curve, subject to an extreme nonuniform scale, squashing the gentle curve into a nearly flattened form, with high curvature. Unlike the simple cusp case, there are generally two cusps.

    +

    A few more observations. The line is not necessarily (nearly) parallel with the chord, as the chord may be very short.

    +

    Mitigating this case may require a different approach than for the other cusp cases. Moving the control points along the tangent (preserving G1 continuity) may not resolve the cusp. For stroking, it is possibly best to divide the cubic at the (near) cusps and stroke each as a line, using round end caps.

    +

    Vector image

    +

    Bézier classification

    +

    One approach to detecting the simple cusp is Bézier classification. There's a classic paper on this, Wang 1981, which is cited by a number of later references (see relevant Stack Overflow thread).

    +

    The core element of the classification is x''×x', which is a quadratic polynomial. This is the numerator of the equation for curvature. A "loop" shape has no inflection points, and no real solutions of this polynomial. Thus, the discriminant (b² - 4ac) is a valid classifier. That said, choosing an epsilon value for near-cusp instances is tricky. This discriminant scales as the square of area under affine transformation, which is not particularly helpful in choosing an epsilon. For one, as the line case shows, extreme affine transformation can strongly affect the sharpness of the cusp.

    +

    Even so, the sign is useful for determining the mitigation; if it's a loop, then the control points should be moved farther from the endpoints to make the loop bigger (and lower in curvature), and conversely closer if it's two closely spaced inflection points.

    +

    Hodograph

    +

    Another approach is the hodograph, or analysis of the derivative of the cubic curve, which is a quadratic Bézier.

    +

    Determining the minimum absolute value of the derivative is equivalent to the "nearest" method, finding the point on the hodograph nearest the origin. This is a cubic solve, and exists in kurbo. That may not be the exact curvature maximum (given that the numerator also varies), but is close enough for robustness work, and calibrated in more useful units.

    +

    The loop/double inflection classification as stated above can also be geometrically interpreted in terms of the hodograph: whether the origin is inside or outside the concave part of the parabola, respectively. The math turns out equivalent.

    +

    Illustration of three near-cusp cubics with hodograph

    +

    Arc lengths

    +

    Note: this section could move to another page on arc length, with more detail. Here are just observations on cusp behavior.

    +

    It's been noted that Gauss-Legendre quadrature has excellent accuracy for smooth curves, scaling impressively with the degree of quadrature, but that accuracy suffers in (near) cusp conditions, or that it provokes numerical stability issues in analytical techniques. Henkel 2014 contains some experimental results, and it was also noted in the How long is that Bézier? blog post and followup. The current implementation in kurbo employs an error metric and subdivides; note from the illustrations that the near-cusp conditions (near the bottom edge of the graph) require many more subdivisions. It might be worth investigating whether explicit cusp detection, splitting at the point of maximum curvature, might require fewer subdivisions for the same accuracy, and thus be faster.

    +

    References

    + + + +
    +
    + + + diff --git a/wiki/curve-families/index.html b/wiki/curve-families/index.html new file mode 100644 index 0000000..906037e --- /dev/null +++ b/wiki/curve-families/index.html @@ -0,0 +1,166 @@ + + + + + + + + Curve families - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Curve families

    + + + + + + + + + + + + + + +
    CurveParamsSubdivAffineInflectionsSuperellipse
    Line0yesyes00.5
    Arc1yesno00.785
    Parabola2yesyes00.833
    Euler spiral2yesno10.785
    Rectangular elastica2yesno1~0.8
    Elastica3yesno1*0.5..~0.85
    Balanced Bézier3nono20.5..0.95
    Euler spiral PC3yesno10.785
    Conic3yesyes00.5..1
    Cubic Bézier4yesyes20.5..0.95
    Spiro4yesno3TODO
    Hyperbezier4yesno10.5..1
    Quintic Bézier8yesyes4?0.8..0.996
    +

    Relationship graph

    +

    graph of relations

    +

    This graph has an arrow when one curve family fully includes the parameter space of another. A dotted line represents an approximation which is better than can be expected from scaling based on the number of parameters.

    +

    Properties

    +

    Number of parameters

    +

    We use the same parameter counting policy as Raph's thesis (section 2.8). The endpoints are considered to be fixed, so to use in an actual application, there is an additional transform consisting of translation, rotation, and scaling. This additional transformation is the same for all curves.

    +

    The number of parameters is a tradeoff. To represent an arbitrary curve, with a small number of parameters more subdivisions are needed. Increasing the number of parameters has a cost, for representing the parameter values, presenting them in a UI for humans to manipulate, and for doing computations. Generally, higher degrees of continuity requires more parameters.

    +

    In general, the accuracy of curve fitting scales with an exponent equal to the number of parameters plus 2. For example, fitting with a quadratic Bézier or Euler spiral has O(n^4) scaling, meaning that subdivision in half improves accuracy by a factor of 16. That said, actually achieving optimal curve fitting may be challenging; I'm

    +

    Closure under subdivision

    +

    If a curve is subdivided at an arbitrary point, will the two subdivisions also be members of the curve family?

    +

    Two-parameter curve families closed under subdivision are all derived by taking a segment of a fixed generating curve (section 4.1 of Raph's thesis). Thus, such families can be characterized entirely by the generating curve (parabola, Euler spiral, rectangular elastica). More or less any generating curve can work, and the properties of the generating curve (monotone curvature, periodicity, presence of an inflection point) map to the properties of the curve family. Section 4.8 of Raph's thesis explores this space somewhat.

    +

    Closure under affine transformation

    +

    When an arbitrary affine transformation is applied to a curve, is that a member of the curve family?

    +

    As a general pattern, Bézier curves are closed under affine, including the rational variants, but spirals and curves defined variationally are not. However, it is certainly possible to mix the two. The affine closure of Euler spirals is a potentially interesting curve family.

    +

    Inflections

    +

    An S-shaped curve has an inflection point. Some curve families only contain convex curves, while others can represent inflections. Arguably, having too many inflection points is a drawback, as it is not intuitive to control the curve.

    +

    Superellipses

    +

    Superellipse-like shapes are very important in graphic design. The ability of a curve family to approximate a superellipse varies widely. As a general principle, curves defined variationally do not easily form superellipses, those with a rational polynomial at their core can represent the entire range, and Béziers are in the middle (they're reasonably good at representing arbitrary curves, but have a limit, beyond which the curve develops unwanted additional inflections).

    +

    To quantify this more precisely, we define the superellipticity range of a curve family as follows. Set both endpoint tangents to π/4 (45°), so the curve covers a quarter-circle of arc. Use the curve to define one quadrant of a superellipse shape, with an extent of 1 on both x and y axes. Compute the area of the resulting quadrant. For a circle, it is π/4 (≈0.785), and for a square it is 1. As the remaining parameters are varied, what is the range of areas that can result? The range is further constrained by the curve having no inflection points (though curvature is allowed to reach zero at the endpoints) and being symmetrical, as these are visually important features of a real superellipse.

    +

    Note that a two parameter curve family has a single value, as there are no additional parameters to vary after the endpoint tangents are set.

    +

    The curves

    +

    Here we mostly point to a reference for the curve family. Each section could be expanded greatly, perhaps by giving the curve family its own page.

    +

    Line segment

    +

    A line segment has zero curvature. A polyline has G0 continuity only.

    +

    Circular arc

    +

    A circle has constant curvature. A circular arc is a segment of a circle.

    +

    In general, circular arcs can only achieve G0 continuity, though there are techniques to achieve G1 by applying additional constraints, notably biarcs.

    +

    They are popular in CAD, partly because they are the only widely implemented curve family in G-code.

    +

    Quadratic Bézier (parabola)

    +

    A quadratic Bézier is a segment of a parabola.

    +

    Quadratic Béziers are in widespread use as the curve family of TrueType fonts (and thus TrueType-flavored OpenType).

    +

    Euler spiral

    +

    An Euler spiral has curvature linear with arc length. It is extensively discussed in section 4.6 of Raph's thesis. It is an especially good choice for making a G2 continuous interpolating spline (for reasons discussed in the thesis), but a weakness is representing curves with significant curvature variation.

    +

    Another benefit of the Euler spiral is that its parallel curve is mathematically tractable to compute. See Cleaner parallel curves with Euler spirals.

    +

    Rectangular elastica

    +

    The minimum energy curve (MEC) is the curve minimizing the total bending energy when constrained to pass through the given control points, so is a mathematical idealization of a physical spline made out of a thin strip of flexible material. Each segment is a segment of the "rectangular elastica", which is a particular solution of the general elastica. It is extensively discussed in section 4.2 of Raph's thesis.

    +

    Elastica

    +

    The general elastica has an additional parameter, which corresponds to tension, resulting in a three-parameter curve. It has a narrow superelliptical range. In addition, it is symmetrical around the inflection point, which means it cannot model an asymmetrical S-shape. More precisely, when the endpoint tangents are anti-symmetrical, the area is zero for all values of the tension parameter. It is rarely used directly, but because of its physical importance, it is worth evaluating other curve families in their ability to accurately approximate an elastica.

    +

    Probably worth noting here, the SI-MEC is a two parameter curve family which is not closed under subdivision. It is analyzed in section 3.11 of Raph's thesis, with the conclusion being that the Euler spiral is superior in most cases.

    +

    A definitive treatment of the elastica is in chapter 3 of Raph's thesis.

    +

    Balanced Bézier

    +

    A "balanced Bézier" is work in progress to restrict the parameter space of cubic Béziers to those with a smooth parametrization. See the Sweet Béziers Zulip thread for more information.

    +

    It approximates circular arcs with O(n^6) accuracy.

    +

    Rational quadratic Bézier

    +

    A rational quadratic Bézier is a segment of a conic section. It is fairly widely used in CAD, less so in graphic design applications. It cannot represent an inflection point, but does have the full range of superellipticity.

    +

    An additional superpower is that it is closed under perspective transformation.

    +

    Cubic Bézier

    +

    A cubic Bézier is by far the most common curve representation. It can accurately represent an extremely wide range of curves, and also has a control scheme suitable for direct manipulation in a UI. See A Primer on Bézier Curves for more information.

    +

    Curve-fitting is challenging; no good general technique was known until Raph's [Bézier curve fitting] blog posts. In general, it requires solution of a quartic equation, and the process is discontinuous; there exist input curves extremely close to each other with very different best fits.

    +

    Spiro

    +

    The Spiro curve family was an attempt to create a tool more suitable for interactive curve editing. It is defined as the curvature being a cubic function of arc length. It is the basis of a practical G4-continuous interpolating spline, and is an excellent choice when high degrees of continuity are required. One weakness is the limited superellipticity range. It is discussed in section 7.3 of Raph's thesis, and has had some limited implementation success.

    +

    Hyperbezier

    +

    The hyperbezier is defined as $$\kappa(s) = (as+b)/(cs^2+ds+e)^2$$. There are four parameters as multiplying all five coefficients by a constant does not change the result.

    +

    Development of this curve family is work in progress. Two Zulip threads are Hyperbezier progress and Hyperbezier parameter mapping.

    +

    An earlier draft is presented in The hyperbezier pen tool and is implemented in the spline library. That draft had some weaknesses (not closed under subdivision, limited superellipticity range), so will be superseded by the new version.

    +

    Quintic Bézier

    +

    The quintic Bézier pushes the number of parameters into unmanageable territory. It is not clear that there is any practical way to achieve the theoretical O(n^10) curve fitting accuracy; from experience with cubics it is clear that it is a highly nonlinear optimization problem with many local minima. That said, it does have some uses.

    + + +
    +
    + + + diff --git a/wiki/curve-offset/index.html b/wiki/curve-offset/index.html new file mode 100644 index 0000000..cf4c8bb --- /dev/null +++ b/wiki/curve-offset/index.html @@ -0,0 +1,100 @@ + + + + + + + + Curve offsetting and fitting - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Curve offsetting and fitting

    +

    Curve offsetting and fitting is an important foundational topic that necessary for stroking paths, in addition to +many other places. For now, I'm just posting relevant literature here. Hopefully over time, it will become a review +of the literature on this topic.

    + + + +
    +
    + + + diff --git a/wiki/curves/euler-spiral-evolute/index.html b/wiki/curves/euler-spiral-evolute/index.html new file mode 100644 index 0000000..0762d17 --- /dev/null +++ b/wiki/curves/euler-spiral-evolute/index.html @@ -0,0 +1,155 @@ + + + + + + + + Evolute of the Euler spiral - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Evolute of the Euler spiral

    +

    The evolute of the Euler spiral has a simple representation as a Cesàro equation. +Evolutes of curves are interesting because the Nehab 2020 paper shows us that for strongly correct stroke expansion, the evolute of a curve is needed in addition to the parallel curve (see Figure 11 and related discussion). +This page contains that derivation, as well as related results on near-optimal flattening of the evolute to line segments.

    +

    In this image, the Euler spiral segment is in gray, and its evolute is in blue:

    + +

    Image of Euler spiral and its evolute

    +

    We'll start with an Euler spiral defined (in Cesàro form) as follows:

    +

    $$\kappa(s) = as$$

    +

    Integrating this equation results in the Whewell form:

    +

    $$\theta(s) = \frac{as^2}{2}$$

    +

    And we have an equation for the derivative of the curve. +In this derivation, we'll fluidly mix complex numbers and 2D vectors, writing unit vector in the direction of $\theta$ as $e^{i\theta}$. +This choice, while a bit of an abuse of notation, will be very convenient when calculating derivatives.

    +

    $$x'(s) = e^{i\theta(s)} = e^{i\frac{as^2}{2}}$$

    +

    $$x''(s) = iase^{i\frac{as^2}{2}} = iasx'(s)$$

    +

    The evolute is defined as points offset from the source curve in the normal direction, by the radius of curvature. +Generally:

    +

    $$\bar{x}(s) = x(s) + \frac{ie^{i\theta(s)}}{\kappa(s)}$$

    +

    Plugging in the Euler spiral, we can thus easily obtain the derivative of the evolute with respect to the s parameter.

    +

    $$ +\begin{align} +\bar{x}'(s) &= x'(s) + \frac{i^2asx'(s)}{as} - i\frac{x'(s)}{as^2} \\ +&= -i\frac{x'(s)}{as^2} +\end{align} +$$

    +

    Proceeding, we'll get the arc length (using s, arc length along original Euler spiral, as a parameter), and also obtain a second derivative for use in calculating the curvature.

    +

    $$\bar{s}'(s) = |x'(s)| = \frac{1}{as^2}$$

    +

    $$\bar{s}(s) = -\frac{1}{as}$$

    +

    A note: the formula for arc length follows readily from a well-known result in differential geometry, as cited in the Stoer paper (the bottom of page 322). +However, given that we already have the derivatives for the purpose of computing curvature, it's maybe easier to just derive than rely on a cited method.

    +

    $$\bar{x}''(s) = \frac{x'(s)}{s} + 2i\frac{x'(s)}{as^3}$$

    +

    When computing the cross-product for the standard curvature formula, the second term above drops out because it's in the same direction as the first derivative, while the first is orthogonal.

    +

    $$ +\begin{align} +\bar{\kappa}(s) &= \frac{\bar{x}'' \times \bar{x}'}{|\bar{x}'|^3} \\ +&= \frac{1}{as^3} / \frac{1}{a^3 s^6} \\ +&= a^2 s^3 +\end{align} +$$

    +

    And then this gives the Cesàro equation for the evolute in terms of its own arc length:

    +

    $$\bar{\kappa}(\bar{s}) = -\frac{1}{a\bar{s}^3}$$

    +

    General evolute of log-aesthetic curves

    +

    The family of curves in which curvature is a power of the arc length is called "log-aesthetic curves," and there is a small industry of papers on this curve family. +This family is closed under evolute, see Yoshida & Saito 2012 for the result.

    +

    Thus, the formula derived in this page is an instance of the general result, and is also shown in Figure 3(c) of the above cite. +In general, the evolute of the curve defined by $\kappa(s) = s^\gamma$ is another curve with $\kappa(s) = s^{-\frac{1 + 2\gamma}{\gamma}}$. +(There may be a uniform scaling factor; someone should go over the math in detail)

    +

    Subdivision density

    +

    Following the derivation for the parallel curve of the Euler spiral, the subdivision density for flattening to lines of a curve with respect to the source curve parameter s is given by this formula:

    +

    $$\rho(s) = \sqrt{0.125|\bar{\kappa}(s)|}\frac{d\bar{s}}{ds}$$

    +

    Plugging in the formulae above and simplifying, we get:

    +

    $$\rho(s) = \sqrt{\frac{1}{8s}}$$

    +

    And to do subdivision, we need the integral of this (and its inverse):

    +

    $$\int_0^t\rho(s)dt= \sqrt{\frac{t}{2}}$$

    +

    Thus, finding the subdivision points for near-optimal flattening of an Euler spiral evolute is even simpler than the flattening of the Euler spiral itself, much less the parallel curve of an Euler spiral.

    +

    References

    + + + +
    +
    + + + diff --git a/wiki/curves/index.html b/wiki/curves/index.html new file mode 100644 index 0000000..06408b3 --- /dev/null +++ b/wiki/curves/index.html @@ -0,0 +1,101 @@ + + + + + + + + | Homepage for the Linebender organization + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Curves

    +

    Articles about curves:

    + + + +
    +
    + + + diff --git a/wiki/formatting-scheme/index.html b/wiki/formatting-scheme/index.html new file mode 100644 index 0000000..a31a173 --- /dev/null +++ b/wiki/formatting-scheme/index.html @@ -0,0 +1,110 @@ + + + + + + + + Formatting scheme for Linebender projects - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Formatting scheme for Linebender projects

    + +

    Code files should start with a copypright notice composed of two comments following this format:

    +
    // Copyright 2024 the XXXX Authors
    +// SPDX-License-Identifier: Apache-2.0 OR MIT
    +
    +

    The year should be the file's creation year. +"XXXX" should be the project's name. +The license depends on the project and the file type, but is usually "either Apache 2.0 or MIT License, whichever is least restrictive". +Shaders are usually licensed under the former two licenses OR the Unlicense.

    +

    Rust

    +

    Most Linebender projects files are written in Rust. +For those files, the formatting produced by rustfmt is required.

    +

    Markdown

    +

    In Markdown files, every paragraph should have one line per sentence. +This makes git diff easier to read. +[1] [2]

    + + +
    +
    + + + diff --git a/wiki/gpu/index.html b/wiki/gpu/index.html new file mode 100644 index 0000000..e9cf205 --- /dev/null +++ b/wiki/gpu/index.html @@ -0,0 +1,103 @@ + + + + + + + + | Homepage for the Linebender organization + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    GPU resources

    +

    This wiki subdirectory holds resources for GPU programming techniques, especially compute shaders.

    + + + +
    +
    + + + diff --git a/wiki/gpu/mesh-shaders/index.html b/wiki/gpu/mesh-shaders/index.html new file mode 100644 index 0000000..b1f1eaa --- /dev/null +++ b/wiki/gpu/mesh-shaders/index.html @@ -0,0 +1,154 @@ + + + + + + + + Mesh shaders - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Mesh shaders

    +

    Mesh shaders are a compute-centric approach to producing geometry for rasterization. +They are significantly more powerful than the traditional vertex shader approach, and also simpler than the complex zoo of shader types (hull, domain, tessellation, geometry) that were originally proposed to overcome the limitations of simple vertex shading.

    +

    They were originally introduced by Nvidia in 2018 in the Turing microarchitecture. +In Vulkan, the capability was originally an Nvidia-specific extension, but is now the cross-platform VK_EXT_mesh_shader extension. +As of early 2024, representative lower-bound cards include GTX 1650, AMD Radeon RX 6400 (RDNA 2), and Intel Arc A370. +It is added to Metal 3 (2022) and hardware support is new in M3 and A17 (though the example project will run on M1 and A14). +The feature is present in DirectX 12 Ultimate, released in 2020. +It is not yet available in WebGPU (gpuweb#3015 is the feature request).

    +

    Mesh shaders are a fusion of compute and traditional rasterization. +They bring three new capabilities to the compute side, and of course the ability to drive the rasterization pipeline.

    +

    The three new compute-only capabilities are:

    +
      +
    • Ability to spawn variable amounts of work
    • +
    • Communication through two shader stages through a queue
    • +
    • Ordering of elements processed through the shader stages
    • +
    +

    These are potentially of interest even with rasterization disabled. +Mainstream usage includes generating primitives (usually triangles) from the second stage. +These are then rasterized (in hardware) and shaded using fragment shaders in exactly the same way as the traditional vertex/fragment pipeline.

    +

    The main motivation for mesh shaders is improving the efficiency and flexibility of traditional 3D rasterization, most prominently culling of larger chunks of unneeded geometry, dynamic level-of-detail (LOD) selection, and procedural generation of geometry. +These uses build on the use of compute shaders for these tasks, advocated in Graham Wihlidal's GDC 2016 talk, Optimizing the Graphics Pipeline with Compute. +Mesh shaders have a number of advantages over using a compute shader to fill a vertex buffer: you don't have to allocate the intermediate vertex buffer (which can fail if the size is not estimated correctly), there's less traffic to device memory as the queues mostly live in shared memory, and there's no pipeline barrier between the compute and rasterization stages.

    +

    Basic computational model

    +

    There are two stages, but the first stage is optional. +Following the GPU ecosystem tradition of diversity of terminology, the first stage is called a "task shader" in Vulkan, an "amplification shader" in DirectX, and an "object shader" in Metal. +The second stage is called a mesh shader.

    +

    The first stage is dispatched like a compute shader. +There is an output user-defined "payload" structure (analogous to the interface between vertex and fragment shaders, but can be larger; on DirectX 12 and Metal the limit is 16k), and then each workgroup dispatches a variable number of workgroups of the mesh shader. +That number can be zero. +On Metal, it is limited to 1024 workgroups.

    +

    The second stage (the mesh shader) accepts the input from the task shader, and can also access the index of the parent task shader workgroup that spawned it. +There are two arrays in workgroup shared memory, one for vertices, the other for vertex indices for primitives. +On output, the vertex and primitive counts are set, up to the maximum allocation of the arrays. +Nvidia recommends 64 vertices and 126 primitives, though (as is typical in the GPU ecosystem) the exact limits vary. +On Metal, the limits are 256 vertices and 512 primitives.

    +

    The primitive is usually a triangle, but all implementations support lines, and Vulkan and Metal support points as well. +For triangles, there are 3 vertex indices per primitive.

    +

    There is a per-vertex user defined struct (essentially the same as the output of a vertex shader) and also a new per-primitive user-defined struct.

    +

    Execution model

    +

    On Nvidia, there is a strong forward progress guarantee, and the workgroups of a mesh shader are launched in order. +Thus, doing a single-pass scan inside the mesh shader is viable (source: launch ordering is discussed at 24:18 and the single-pass scan is at 43:59 of the Turing Mesh Shaders video).

    +

    TODO: find out ordering guarantees on other hardware. +Presumably it's weak on Apple.

    +

    Performance

    +

    The Vulkan blog warns that portability in performance across hardware is difficult.

    +

    The Mesh shaders: Optimization and best practices page from AMD contains recommendations and quantitative measurements of how to tune mesh shader usage. +In addition, Timur's blog post How mesh shaders are implemented in an AMD driver gives insight into their implementation (at least on AMD).

    +

    Resources

    +

    These are authoritative references and particularly helpful documents to explain mesh shaders.

    + + + +
    +
    + + + diff --git a/wiki/gpu/sorting/index.html b/wiki/gpu/sorting/index.html new file mode 100644 index 0000000..d55a50e --- /dev/null +++ b/wiki/gpu/sorting/index.html @@ -0,0 +1,164 @@ + + + + + + + + Sorting - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Sorting

    +

    Many rendering algorithms (including a proposed sparse strip technique for path rendering, and also Gaussian Splatting) rely on sorting. +Because the GPU has a different architecture to the CPU, programs running on the GPU have different performance characteristics, and this changes which sorting algorithms are optimal for a particular context. +In particular, sorting algorithms that exploit parallelism tend to be more suited to the GPU. +The literature on parallel sorting algorithms is extremely well developed, and there are many excellent implementations for CUDA. +In WebGPU, the situation is still evolving. +This page has pointers to the potentially useful resources for understanding existing implementations and developing new ones.

    +

    Classes of sorting algorithms

    +

    The most promising sorting algorithms for GPU are merge sort and radix sort. +Within radix sort there are further distinctions, most notably least significant digit (LSD) vs most significant digit.

    +

    Key size and segmentation

    +

    GPU sorting works best when the key is small and fixed-size. +For many rendering applications, this is a reasonable assumption.

    +

    In some cases (especially path rendering), a segmented sort may be a better choice than one that sorts the entire buffer. +An especially good writeup is segmented sort from Modern GPU, which builds on their mergesort.

    +

    LSD implementations

    +

    The LSD sort algorithm with the strongest claims to being fastest is Onesweep. +This has an authoritative implementation in CUB, for which a good starting point is agent_radix_sort_onesweep.

    +

    A very popular sorting algorithm in gamedev circles is FidelityFX sort from AMD, for which the original source is HLSL. +This is has enough similarity to Onesweep that it is worth considering the differences.

    +
      +
    • Onesweep uses a single pass scan for the digit histograms, while FidelityFX uses a traditional multi-dispatch tree reduction approach.
    • +
    • Onesweep uses 8 bit digits (so 4 passes for a 32 bit key), while FidelityFX uses 4.
    • +
    • Onesweep uses warp-level multi-split for ranking, while FidelityFX uses two 2-bit LSD passes.
    • +
    +

    Both original code bases use subgroups extensively. +The FidelityFX implementation works with a subgroup size of 16 or greater, and will produce incorrect results if deployed for a smaller subgroup size. +Onesweep depends on a hardcoded subgroup (warp) size of 32 and is difficult to make portable to GPUs with other subgroup sizes.

    +

    WebGPU experiment

    +

    Raph did an experiment of a hybrid algorithm largely based on FidelityFX, but adapted to WebGPU, and with a version of warp-level multi-split. +It achieves approximately 1G elements/s on M1 Max. +For radix sorts, element/s on large arrays (16M elements) is meaningful, as the algorithm scales linearly with the array size and is usually insensitive to the distribution of keys.

    +

    Like FidelityFX, it uses 4 bit digits and a tree reduction approach to histogram scan. +It's also basically patterned after FidelityFX in the structure of dispatches.

    +

    Because WebGPU doesn't have subgroups (yet), the warp-level multi-split algorithm fakes it using workgroup shared memory. +The terms "warp" and "lane" are borrowed from CUDA but in this case represent a more or less arbitrary partitioning. +A "warp" size of 16 was found to outperform 32, which is not surprising because the fake "ballot" operation to determine which neighbors in the warp hold the same key does linear iteration proportional to warp size.

    +

    Raph has also done experiments (code not yet published) porting this to Metal and using actual subgroup ballot operations. +That results in ~3G el/s, though some of the speedup is vanilla wgpu inefficiency. +Also note that to implement this algorithm correctly requires a subgroup barrier (simdgroup_barrier in Metal Shading Language), and that this primitive is not in the WebGPU subgroup proposal (see gpuweb#4437). +However, on M1 Max, placing a stronger threadgroup barrier is only a 2% slowdown, so this matter is not urgent.

    +

    Attempts to push this experiment to 8 bits per digit have not yet yielded sustainable performance improvement.

    +

    Several people have pointed out the Onesweep inspired sort from Lichtso, part of the splatter Gaussian Splat implementation. +However, as discussed in splatter#2, it is an approximate sort only, and may rely on luck that the particular GPU will process atomics within a subgroup in order. +In addition, because it is one-pass, on GPUs without a forward progress guarantee (of which Apple Silicon is especially noticeable), the algorithm may deadlock or experience extended stalls. +The experiment mentioned above has neither of these shortcomings. +Note that it does achieve 8 bits per pass; it is entirely likely that a high performance implementation could draw inspiration from it, more so after subgroups land in WebGPU and thus real warp-level multi-split is possible.

    +

    DeviceRadixSort

    +

    Aras Pranckevičius has been doing lots of experiments with sorting in his UnityGaussianSplatting implementation, all written in the Unity flavor of HLSL. +UnityGaussianSplatting#82 adds something called DeviceRadixSort which shows a modest performance improvement (the discussion thread also speaks to the difficulty of implementing such things portably). +It uses 8 bit digits, and a subgroup implementation of warp-local multi-split. +This implementation is attempting to be portable to a range of subgroup sizes, but is untested on wave sizes other than 32 and is still under development.

    +

    The author, Thomas Smith, has done experiments comparing reduce-then-scan against a chained single-pass approach for the global histogram scan, which suggest that the latter has approximately a 10% performance gain on Nvidia hardware, but pose considerable challenges for portability. +Single-pass approaches will not perform well on devices without a forward progress guarantee.

    +

    Hybrid Radix Sort

    +

    Hybrid Radix sort is another strong contender, fundamentally based on an MSD approach but with additional mechanisms to reduce memory bandwidth. +It has better performance in some cases than Onesweep. +Like Onesweep, it manages 8 bits per pass. +That said, it is considerably more complicated, and it's also not clear how easily it would translate to WebGPU.

    +

    Merge sort

    +

    Modern GPU has a well documented mergesort, also readily adapted to segmented sort. +It is older, and performance numbers from newer papers suggest that it has been surpassed. +That said, the segmented sort capability may be valuable.

    +

    Forma has a sorting implementation called conveyor_sort. +This is a merge sort and is in vanilla WebGPU. +Performance has not been characterized yet.

    +

    Bitonic sort

    +

    Bitonic sort is often proposed as it is conceptually fairly simple and the parallelism is easy to exploit, but when applied to large problems it is clear that the number of passes is unacceptably large; typically in the dozens where a radix sort would have 4 or 8.

    +

    Discussion

    +

    There is active discussion of this issue in the Sorting revisited Zulip thread. +Resources and measurements from implementations can be discussed there, then hopefully added to this wiki page.

    + + +
    +
    + + + diff --git a/wiki/index.html b/wiki/index.html new file mode 100644 index 0000000..4a97870 --- /dev/null +++ b/wiki/index.html @@ -0,0 +1,128 @@ + + + + + + + + | Homepage for the Linebender organization + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Wiki

    +

    Changes to this Wiki are welcome; send a pull request to the linebender.github.io repo, which will be merged without +detailed review.

    +

    Note that math is supported between two dollar signs $$ thanks to MathJax. +For example, $$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$ outputs $$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$

    +

    Wiki pages available:

    + + + +
    +
    + + + diff --git a/wiki/long-term-roadmap/index.html b/wiki/long-term-roadmap/index.html new file mode 100644 index 0000000..46d524d --- /dev/null +++ b/wiki/long-term-roadmap/index.html @@ -0,0 +1,230 @@ + + + + + + + + Post-July Linebender roadmap - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Post-July Linebender roadmap

    +

    Unstructured notes from the RustNL roadmap brainstorming that were left out of the May-July roadmap blog post.

    +

    This may become a living document, eg a long-term roadmap for the project. For now it's the post-July roadmap.

    +

    Vello

    +
      +
    • Emoji
    • +
    • Image filters / blur / shadows +
        +
      • Render graph (Raph to drive, see thread)
      • +
      +
    • +
    • Gpu embedding / wgpu engine abstraction (see Servo thread)
    • +
    • Glyph caching +
        +
      • Render graph? 
      • +
      • or CPU side? 
      • +
      • (sparse strips probably)
      • +
      +
    • +
    • Frame pacing
    • +
    • Damage regions +
        +
      • MVP: just render sub-rects
      • +
      +
    • +
    • CPU impl +
        +
      • Testing
      • +
      • Downlevel
      • +
      +
    • +
    • Fuzzing?
    • +
    +

    Masonry

    +
      +
    • ‘Compositing’
    • +
    • Frame pacing (relevant to Vello and AccessKit)
    • +
    • Damage regions
    • +
    • Styling options
    • +
    • Copy features from Tomorrow Corporation Tech Demo
    • +
    +

    Parley

    +
      +
    • IME support +
        +
      • Suggestion regions?
      • +
      +
    • +
    • Split out blob & other vocabulary types +
        +
      • Blob may be prioritized by other project needs
      • +
      +
    • +
    +

    Xilem

    +
      +
    • Android +
        +
      • Material UI style widgets/views? Requires styling
      • +
      +
    • +
    • Styling
    • +
    • Hot reloading
    • +
    • Async behavior in Masonry widgets (image loading etc)
    • +
    • Cleanup run for issues and PRs
    • +
    +

    AccessKit

    +
      +
    • +

      Haven’t talked about it a lot

      +
        +
      • Improve documentation (see #402)
      • +
      • Point to / create a repository of accessibility best practices.
      • +
      • Not just code, also social: Have people with disabilities test your stuff!
      • +
      • Point to resources, forums, etc? Need to talk to Matt about this. (What were the best practices at Microsoft?)
      • +
      • Accessibility isn’t just screen readers. Also color contrast, customizing size, IME support, motor disabilities (avoid stuff that requires simultaneous input).
      • +
      +
    • +
    • +

      “Accessibility is more than adding a dependency to AccessKit”

      +
        +
      • (Olivier: Note to self: include GMTK video about Celeste Assist Mode)
      • +
      +
    • +
    +

    Android specific work

    +
      +
    • Need to prioritize Android +
        +
      • Masonry: +
          +
        • Hot state for pointer pressed?
        • +
        • Gesture recognition (scrolling) P3 +
            +
          • There is a dumb solution for scrolling without momentum
          • +
          • Potentially adapt code from egui (used in vello demo)
          • +
          +
        • +
        • Pencil gestures
        • +
        • Multitouch
        • +
        • IME +
            +
          • Landing the Lucas Meurer winit PR P1
          • +
          • Extend winit IME PR for richer functionality
          • +
          • Review glazier IME API & come up with design proposal P3 (aaron)
          • +
          • Plumbing suggestion spans etc (winit)
          • +
          +
        • +
        • Accessibility (matt, jul 1+) P-1
        • +
        • Study Tao
        • +
        • To what extent do we tap into Android View etc
        • +
        +
      • +
      • winit future +
          +
        • short term plan: PR functionality into winit
        • +
        • look for natural extension points +
            +
          • these will be platform-specific
          • +
          • Mac: subclassing the NSView/NSApplication subclasses
          • +
          • wayland: messy / smithay has message dispatcher
          • +
          • Android: do we subclass View/Application/Activity? raph will investigate P1 +
              +
            • Accessibility (matt, jul 1+)
            • +
            • Can we access accessibility from native-activity / game-activity?
            • +
            • Note: React Native requires writing Java-land activity
            • +
            • What minimum platform version?
            • +
            +
          • +
          +
        • +
        +
      • +
      • Look at Makepad’s implementation (momentum scrolling etc)
      • +
      +
    • +
    + + +
    +
    + + + diff --git a/wiki/office-hours/index.html b/wiki/office-hours/index.html new file mode 100644 index 0000000..f926647 --- /dev/null +++ b/wiki/office-hours/index.html @@ -0,0 +1,96 @@ + + + + + + + + Office hours - Linebender + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Office hours

    +

    Linebender holds weekly office hours, open to anyone interested in following the project. The best place to find more information is the #office-hours stream on the Zulip chat. The invite is also available through Google Calendar.

    +

    A Google drive folder holds the archives of the notes.

    + + +
    +
    + + + diff --git a/wiki/text/index.html b/wiki/text/index.html new file mode 100644 index 0000000..07823d5 --- /dev/null +++ b/wiki/text/index.html @@ -0,0 +1,180 @@ + + + + + + + + | Homepage for the Linebender organization + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Text

    +

    Storing, editing and displaying text is hard. As a newcomer to the world of text, I faced almost unfathomable complexity. The aim of this page is to compartmentalize the different aspects of text, to make the complexity as manageable as possible.

    +

    Overview

    +

    History

    +

    Although not strictly necessary to understand text rendering, a brief understanding of how words have been recorded over the millennia helps to explain some of the confusing names and conventions of modern typesetting.

    +
      +
    • Written text/calligraphy
    • +
    • The movable-type printing press (Gutenberg 1440) +
        +
      • Brief description of the process of casting type in a foundry, compositing with composing sticks, fixing in a forme with furniture and printing. Sorts (em en quad) Perhaps justification.
      • +
      • fi, fl, ffi, ffl ligatures (nice introduction to the fact there isn't a 1-1 correspondence between characters and glyphs)
      • +
      +
    • +
    • Distinction between font (specific set of type, with a weight, size, etc) and typeface (family of fonts) + +
    • +
    • Hot metal typesetting
    • +
    • CRT displays - an alternative to paper
    • +
    • Raster image processors, dots, PostScript, DPI?
    • +
    +

    Text data

    +

    The usual suspects:

    +
      +
    • ASCII
    • +
    • Unicode +
        +
      • Graphemes, grapheme clusters, normalization, segmentation: all that good stuff
      • +
      • +
      • in particular, things like sentence break, soft line break, hard line break, character classes
      • +
      • RTL, Bidi
      • +
      +
    • +
    • UTF-{8, 16, 32} +
        +
      • in particular, UTF-16 surrogates, BOM
      • +
      +
    • +
    +

    Fonts

    +
      +
    • Fonts vs. typefaces
    • +
    • Classes of typefaces (monotype, italic, ...)
    • +
    • Computer representations of fonts. Bitmap/truetype/opentype (raster vs vector)
    • +
    • System default fonts, font fallback chains, locations of fonts on windows/mac/linux
    • +
    • Modern opentype tables for things like font color, variable fonts
    • +
    • Emojis 😊
    • +
    • em quadrat (width of 'M'), en quadrat
    • +
    +

    Shaping

    +

    Shaping is essentially characters -> glyphs

    +
      +
    • Latin is almost 1-1 (apart from ligatures, other things?)
    • +
    • Devanagari/Arabic/Hebrew (also RTL)
    • +
    +

    Layout

    +
      +
    • Line breaks
    • +
    • Page breaks & layout when you have pages (e.g. not on the web)
    • +
    • Often backwards-and-forwards between layout and shaping - try different shaping runs and see how much room they take up, ...
    • +
    • Text layout data structures +
        +
      • Layout is expensive, so if the text doesn't change you probably want to compute the layout and store it.
      • +
      +
    • +
    +

    Rendering

    +
      +
    • Bitmap vs
    • +
    • Link to curves page
    • +
    +

    Localization

    +

    Although not strictly a part of text rendering, it is also worth mentioning localization alongside the other sections, many of which also deal implicitly with localization themselves. Here we cover some topics in localization that are not explicitly mentioned elsewhere.

    +
      +
    • Dates
    • +
    • Numbers
    • +
    +

    Misc

    +

    TODO find a suitable section for these topics

    +
      +
    • IME
    • +
    + +
      + + +
    + +
    +
    + + +