>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Rust

Fullstack w Rust bez bólu i niepotrzebnych abstrakcji

To znajome uczucie: chcesz napisać małą aplikację webową w Rust, ale konfiguracja infrastruktury zajmuje więcej czasu niż sama logika. Najpierw wybierasz framework webowy (Axum lub Actix-web), potem silnik szablonów (Askama lub Tera), a następnie zastanawiasz się, jak przekazać dane do frontendu bez zamieniania kodu w niekończące się opisy endpointów API. W rezultacie projekt z 10 linijkami logiki rozrasta się do setek linijek konfiguracji.

Zespół Tokio (ci sami ludzie, którzy napisali runtime asynchroniczny dla połowy ekosystemu Rust) postanowił to zmienić. Wprowadzili Topcoat — framework, który próbuje sprawić, że programowanie w Rust będzie tak szybkie i przyjemne jak w Ruby on Rails czy Next.js, zachowując jednocześnie wszystkie korzyści z bezpieczeństwa typów.

Co to w ogóle jest

Topcoat to modularny framework fullstack, który stosuje zasadę „baterie w zestawie". Nie zmusza cię do wybierania między renderowaniem po stronie serwera (SSR) a reaktywnością po stronie klienta. Zamiast tego oferuje podejście hybrydowe: piszesz kod w Rust, a framework sam decyduje, co powinno działać na serwerze, a co ma się stać JavaScriptem dla przeglądarki.

Projekt jest obecnie we wczesnej fazie (status eksperymentalny), więc API może się zmienić. Ale architektoniczne pomysły w nim zawarte wyglądają bardzo sensownie dla każdego, kto jest zmęczony zoo technologicznym.

Reaktywność bez bólu i WASM-owych bundli

Zazwyczaj, jeśli chcesz ożywić przycisk na stronie, masz dwie ścieżki: albo piszesz w JS/TS, albo ciągniesz ciężkie WebAssembly. Topcoat oferuje trzecią opcję.

Specjalne wyrażenie $(...) wewnątrz makra view! to zwykły kod Rust. Jest sprawdzany przez kompilator, ale Topcoat wie, jak przetłumaczyć go na JavaScript. Gdy piszesz handler kliknięcia, który zmienia stan (signal), nie musisz konfigurować frontendu ani opisywać API. Framework sam sprawi, że to zadziała natychmiast w przeglądarce.

Jeśli aktualizacja wymaga danych z serwera (na przykład wyszukiwanie w bazie danych), na ratunek przychodzą „shards". Oznaczasz komponent atrybutem #[shard], a Topcoat automatycznie wyrenderuje go ponownie na serwerze, gdy argumenty się zmienią, a następnie ostrożnie podmieni fragment HTML w przeglądarce.

Routing, który wprowadza porządek

Zamiast opisywać drzewo ścieżek w jednym dużym pliku main.rs, Topcoat sugeruje korzystanie ze struktury folderów. Jeśli pracowałeś z Next.js, poczujesz się jak w domu.

Plik src/app/about.rs automatycznie stanie się dostępny pod adresem /about, a src/app/posts/id.rs zamieni się w trasę z parametrem /posts/{post_id}. Nie ma tu żadnej magii runtime — to opcjonalna funkcja, którą możesz włączyć, jeśli lubisz taki porządek.

Szablony, które pozostają HTML-em

Wiele silników szablonów w Rust jest albo zbyt daleko od HTML, albo zmusza do pisania dużej ilości dodatkowego kodu. Makro view! w Topcoat stara się być jak najbliższe markupowi, jednocześnie pozwalając na używanie zwykłych konstrukcji Rust, takich jak pętle for i warunki if.

A przy okazji, dla tych, którzy martwią się o czystość kodu: pakiet zawiera narzędzie CLI topcoat fmt, które potrafi formatować kod nawet wewnątrz makr. To drobna rzecz, której często brakuje w innych projektach.

Gotowe komponenty i assety

Deweloperzy poszli drogą shadcn/ui. Zamiast ciągnąć ciężką bibliotekę komponentów jako zależność, używasz polecenia topcoat ui. Kopiuje ono kod potrzebnych komponentów (przyciski, karty, formularze) prosto do twojego projektu. Pozwala to zmienić design według własnych preferencji bez walki ze stylami biblioteki. Wszystko jest zbudowane na Tailwind CSS, który jest zintegrowany bezpośrednio z pipeline'em budowania.

Praca z obrazami i czcionkami jest również uproszczona:

Frameworki dodadzą hashe do nazw plików dla cache'owania i zapewnią dostępność assetów.

Czy warto spróbować teraz

Topcoat wygląda jak próba stworzenia „prawidłowego" frameworka webowego dla Rust, gdzie typowanie pomaga zamiast przeszkadzać w szybkości developmentu.

Dla kogo to jest zdecydowanie:

  • Dla tych, którzy chcą szybko zbudować prototyp lub wewnętrzne narzędzie w Rust.
  • Dla developerów zmęczonych luką między backendem a frontendem.
  • Dla tych, którzy cenią ekosystem Tokio i ufają ich decyzjom architektonicznym.

Projekt aktywnie rośnie w tej chwili. Autorzy planują dodać obsługę WebSocketów, zadań w tle, a nawet generowanie specyfikacji OpenAPI. Jeśli szukałeś powodu, żeby napisać coś webowego w Rust, może właśnie nadejście Topcoata jest tym znakiem.

Sprawdź repozytorium tokio-rs/topcoat — jest tam doskonały przewodnik, od którego można zacząć. Ale pamiętaj: projekt jest eksperymentalny, więc używanie go w mission-critical systemach jest jeszcze trochę przedwczesne.

Powiązane projekty