Инструментарий для построения быстрых, надежных веб -приложений и библиотек с Rust и Wasm.
Gloo - это коллекция библиотек, и эти библиотеки предоставляют эргономичные обертки ржавчины для API -интерфейсов браузеров. web-sys / js-sys очень сложно / неудобно использовать напрямую, поэтому Gloo предоставляет обертки вокруг необработанных связей, что облегчает потребление этих API. Вот почему он называется «инструментарий», вместо «библиотеки» или «структуры».
В дорожной карте рабочей группы Rust and Webassembly 2019 года мы решили сознательно культивировать нашу библиотечную экосистему, построив модульный инструментарий:
Сотрудничество на модульном инструментарии
Идея создания [библиотеки высокого уровня] модульным способом, которая позволит другим в сообществе собрать компоненты по-другому, очень интересна для меня. Надеемся, что это сделает экосистему гораздо сильнее.
В частности, я хотел бы увидеть модульные усилия по реализации библиотеки виртуальной DOM с помощью синтаксиса JSX. На этом фронте было предпринято несколько усилий, но все казались относительно монолитными и «батареями». Я надеюсь, что это изменится в 2019 году.
- Райан Левик в Rust Webassembly 2019
Не создавайте фирменные бункеры. Брендинг, возможно, может быть полезен для достижения славы. Но если мы действительно хотим, чтобы история Рувма была успешной, мы должны подумать о способах сотрудничества, а не вычеркнули территорию.
- Yoshua Wuyts в Wasm 2019
В 2018 году мы создали основополагающие библиотеки, такие как
js-sysиweb-sys. В 2019 году мы должны создавать модульные, высокоуровневые библиотеки поверх них и собрать библиотеки под зонтичным ящиком для целостного опыта. Этот инструментарий и его библиотеки предоставит доступным все нужные батареи при нацеливании на WASM.Создание веб -приложения Greenfield? Используйте весь инструментарий, чтобы нанести удар по земле. Тщательно создать крошечный модуль WASM и интегрировать его в существующий проект JavaScript? Возьмите эту целевую библиотеку, которая вам нужна из инструментария и используйте ее само по себе.
Gloo - это модульный инструментарий.
Поддерживать как целые веб-приложения, так и небольшие целевые библиотеки: Gloo и коллекция ящиков для утилиты, которые составляют его инструментарий, должны помочь вам быть продуктивным, если вы пишете веб-приложение зеленого поля с Rust и WASM. И это также должно помочь вам быть продуктивным, если вы пишете небольшую целевую библиотеку WASM, которая будет интегрирована в существующее приложение JavaScript.
Развивайте экосистему библиотеки Rust и Wasm: мы хотим использовать Gloo в качестве функции принуждения для создания и обмена строительными блоками веб -разработки. Виды библиотек, которые должны были бы построить любую структуру или библиотеку высокого уровня. Мы хотим явно распутать эти библиотеки и сделать их доступными для обмена по всей экосистеме.
Модульный инструментарий, а не структура: Gloo должен быть свободной коллекцией ящиков для утилиты, которые можно использовать индивидуально или все вместе. Gloo не предполагает, что он «владеет» всей веб -страницей, что она контролирует функцию start WASM и т. Д. Это отсутствие предположений позволяет достигать большего количества вариантов использования (таких как хирургическая замена горячего кода от JS), чем могут монолитные рамки. Везде, где это возможно, GLOO должен предпочитать интерфейсы над реализациями, чтобы различные реализации с разными подходами подменяются.
Быстрый: давайте используем абстракции с нулевыми затратами Rust и дизайн с учетом производительности, чтобы показать всем, насколько быстро может быть сеть;)
Надежный: каждый ящик должен быть тщательно протестирован. Безголовые тесты браузера. QuickCheck Tests. Использование системы типа, чтобы сделать целые классы ошибок невозможными.
Небольшой: небольшой размер кода для более быстрых нагрузок страниц. Не случайно привлечь всю панику и форматирование инфраструктуры. Пользователям не нужно делать компромисс между использованием библиотек Gloo и наличием небольших двоичных файлов WASM.
Idiomatic: мы хотим построить ржавчину-y API, которые чувствуют себя естественными для использования. API -интерфейсы веб -сайта не были предназначены для языка ржавчины, и вы можете почувствовать несоответствие импеданса время от времени. Давайте поправляем это, преодолевают разрыв и сделаем библиотеки, которые являются радостью для использования.
В этом примере используются gloo::events для добавления слушателей событий и gloo::timers для создания тайм -аутов. Он создает элемент <button> и добавляет к нему «щелкнуть» слушатель событий. Всякий раз, когда кнопка нажимается, она запускает один второй тайм -аут, который устанавливает текстовое содержимое кнопки на «Привет с одной секундой назад!».
use gloo :: { events :: EventListener , timers :: callback :: Timeout } ;
use wasm_bindgen :: prelude :: * ;
pub struct DelayedHelloButton {
button : web_sys :: Element ,
on_click : events :: EventListener ,
}
impl DelayedHelloButton {
pub fn new ( document : & web_sys :: Document ) -> Result < DelayedHelloButton , JsValue > {
// Create a `<button>` element.
let button = document . create_element ( "button" ) ? ;
// Listen to "click" events on the button.
let button2 = button . clone ( ) ;
let on_click = EventListener :: new ( & button , "click" , move |_event| {
// After a one second timeout, update the button's text content.
let button3 = button2 . clone ( ) ;
Timeout :: new ( 1_000 , move || {
button3 . set_text_content ( Some ( "Hello from one second ago!" ) ) ;
} )
. forget ( ) ;
} ) ;
Ok ( DelayedHelloButton { button , on_click } )
}
} Хотите помочь нам построить Gloo? Проверьте CONTRIBUTING.md !