Backend - Rust
Při realizaci webu pomocí full-stack řešení (Nuxt) jsem narazil na to, že programové řešení pomocí JavaScript (TypeScript) mi nevyhovuje. Začal jsem tedy hledat řešení, které mi dá větší jistotu.
Backendová řešení lze rozdělit na ta, která jsou postavena na bázi skriptovacích (interpretovaných) jazyků, a na ta, která využívají klasické kompilované jazyky.
Mezi interpretované jazyky patří i Python. Ten běžně používám a třeba i zde v rámci platformy MEVISYS jsem v něm realizoval projekt MeSca, viz záložka Projekty. Python by zcela jistě byl řešením, ale má to v podstatě velmi podobné vlastnosti jako JavaScript (TypeScript). Čili ani Python nechci použít pro programování rychlé a spolehlivé aplikace.
Mezi překládanými jazyků mi průzkum přinesl tento seznam:
- Java
- C#
- Go
- Rust
Java je určitě nejstarší řešení, na kterém stále běží množství aplikací i webů. Nicméně podle průzkumu klesá. Navíc, není to klasický překládaný jazyk, jehož výsledkem by byl spustitelný kód. Pro platformu MEVISYS to tak není nejlepší řešení.
C# je určitě stabilní a rychlé řešení. Ale nepřišlo mi příliš zajímavé učit se “další klon C jazyka”, kromě jazyka C totiž programuji i v C++ (obvykle ve spojení s Qt).
Jazyk Go je varianta, kterou jsem silně zvažoval. Je v něm mimo jiné napsána databáze VictoriaMetrics, kterou jsme se rozhodli použít pro ukládání dat. I z hlediska využití pro zákaznické projekty je to rozhodně dobré řešení, protože pro řadě aplikací je to dnes standardní řešení.
Rust je nejnovější a dnes asi nejobdivovanější řešení, protože nabízí zcela jiný přístup k práci s paměti. Navíc Rust se nově začíná prosazovat i na poli embedded řešení (mikrokontroléry), takže pro embedded vývojáře jako jsem já je velmi zajímavý.
Při výběru jazyka jsem se zamýšlel mezi Go a Rust. Nakonec zvítězil Rust kvůli novému a bezpečnějšímu mechanismu práce s pamětí a kvůli možnosti využití i na embedded platformách. Použití Go by asi byla větší sázka na jistotu, ale potenciál Rustu se mi aktuálně jeví zajímavější.
Přepsal jsem tedy backend z TypeScriptu (Nuxt) do Rustu. Funguje to velice dobře, je to stále docela přehledné. Hlavně to však výrazně zjednodušilo nasazení v Dockeru. Absolutně žádné problémy, které byly v Nuxtu, se zde neopakovaly. Co fungovalo v nativu na Windows, fungovalo v Dockeru stejně dobře. To je pro vývoj velmi důležitá informace, protože umožní řešit problémy již během klidnější fáze vývoje a nikoliv až v mnohem stresovější fázi nasazování do provozu.
Kolega David Wünsche také považuje Rust za velmi zajímavé řešení, takže jsme se rozhodli řešit backend výhradně tímto jazykem.