빠르고 신뢰할 수있는 웹 응용 프로그램 및 Rust and WASM을 구축하기위한 툴킷.
Gloo는 라이브러리 모음이며, 이러한 라이브러리는 브라우저 API를위한 인체 공학적 녹 랩퍼를 제공합니다. web-sys / js-sys 는 직접 사용하기가 매우 어렵거나 불편하므로 GLOO는 원시 바인드 주변의 래퍼를 제공하여 API를 쉽게 소비 할 수 있습니다. 이것이 바로 "라이브러리"또는 "프레임 워크"대신 "툴킷"이라고 불리는 이유입니다.
Rust and WebAssembly Working Group의 2019 로드맵에서 우리는 모듈 식 툴킷을 구축하여 도서관 생태계를 고의적으로 배양하기로 결정했습니다.
모듈 식 툴킷에서 협력합니다
지역 사회의 다른 사람들이 다른 방식으로 구성 요소를 구성 할 수 있도록 모듈 식 방식으로 [고급 라이브러리]를 구축한다는 아이디어는 나에게 매우 흥미 롭습니다. 이것은 희망적으로 생태계를 훨씬 더 강하게 만들 것입니다.
특히 구문과 같은 JSX로 가상 DOM 라이브러리를 구현하려는 모듈 식 노력을보고 싶습니다. 이 전선에는 몇 가지 노력이 있었지만 모두 비교적 모 놀리 식 및 "배터리 포함"처럼 보였습니다. 2019 년에 이것이 바뀌기를 바랍니다.
- Rood webassembly 2019의 Ryan Levick
브랜드 사일로를 만들지 마십시오. 브랜딩은 명성을 얻는 데 유용 할 수 있습니다. 그러나 우리가 Rust 's Wasm 이야기가 성공하기를 정말로 원한다면 우리는 영토를 조각하는 대신 협력하는 방법을 생각해야합니다.
- WASM 2019의 Yoshua Wuyts
2018 년에는
js-sys및web-sys와 같은 기초 라이브러리를 만들었습니다. 2019 년에는 모듈 식 고급 라이브러리를 구축하고 전체적인 경험을 위해 우산 툴킷 크레이트로 라이브러리를 수집해야합니다. 이 툴킷과 라이브러리는 WASM을 타겟팅 할 때 원하는 모든 배터리를 사용할 수 있도록합니다.그린 필드 웹 응용 프로그램 구축? 전체 툴킷을 사용하여지면을 달리십시오. Tiny WASM 모듈을 신중하게 제작하여 기존 JavaScript 프로젝트에 다시 통합합니까? 툴킷에서 필요한 대상 라이브러리를 잡고 그 자체로 사용하십시오.
Gloo는이 모듈 식 툴킷입니다.
전체 웹 애플리케이션과 소규모 대상 라이브러리 : GLOO 및 툴킷을 구성하는 유틸리티 상자 컬렉션은 Rust and WASM으로 녹색 필드 웹 애플리케이션을 작성하는 경우 생산성을 유지하는 데 도움이됩니다. 또한 기존 JavaScript 애플리케이션에 통합 될 작은 대상 WASM 라이브러리를 작성하는 경우 생산성을 높이는 데 도움이됩니다.
Rust and WASM Library 생태계를 배양 : 우리는 Gloo를 웹 개발의 빌딩 블록을 생성하고 공유하기위한 강제 기능으로 사용하고 싶습니다. 모든 프레임 워크 또는 고급 라이브러리가 구축 해야하는 라이브러리의 종류. 우리는 이러한 라이브러리를 명시 적으로 분리하고 전체 생태계에서 공유 할 수 있도록하고자합니다.
Modular Toolkit, 프레임 워크가 아닌 Modular Toolkit : Gloo는 개별적으로 또는 모두 함께 사용할 수있는 유틸리티 상자의 느슨한 모음이어야합니다. Gloo는 전체 웹 페이지를 "소유"하고 WASM start 기능을 제어한다고 가정하지 않습니다. 이러한 가정 부족으로 인해 Monolithic 프레임 워크보다 더 많은 사용 사례 (예 : JS에서 핫 코드 경로를 교체하는 등)에 도달 할 수 있습니다. 가능한 경우 Gloo는 구현보다 인터페이스를 선호하므로 접근 방식이 다른 다른 구현이 스왑 가능합니다.
FAST : Rust의 제로 소비자 추상화를 활용하고 성능을 염두에두고 웹이 얼마나 빨리 있는지를 모든 사람에게 보여줍니다.)
신뢰할 수 있습니다 : 모든 상자는 철저히 테스트해야합니다. 헤드리스 브라우저 테스트. 빠른 검사 테스트. 유형 시스템을 사용하여 전체 클래스의 버그를 불가능하게 만듭니다.
작은 : 더 빠른 페이지로드를위한 작은 코드 크기. 실수로 모든 당황 및 서식 인프라를 가져 오지 않습니다. 사용자는 GLOO 라이브러리 사용과 소규모 WASM Binaries 사이에 트레이드 오프를 할 필요가 없습니다.
관용적 : 우리는 사용하기가 자연 스럽다고 느끼는 Rust-Y API를 만들고 싶습니다. 웹의 API는 Rust Language 용으로 설계되지 않았으며 때때로 임피던스 불일치를 느낄 수 있습니다. 그것을 바로 잡고, 격차를 해소하고, 사용하기에 기쁨 인 라이브러리를 만드십시오.
이 예제는 이벤트 리스너를 추가하기 위해 gloo::events gloo::timers 합니다. <button> 요소를 생성하고 "클릭"이벤트 리스너를 추가합니다. 버튼을 클릭 할 때마다 한 초 시간 초과가 시작되어 버튼의 텍스트 내용을 "1 초 전부터 Hello"로 설정합니다.
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 를 확인하십시오!