Programování

Co je Rust? Bezpečný, rychlý a snadný vývoj softwaru

Rychlé, bezpečné, snadno psatelné - vyberte libovolné dvě. To je stav vývoje softwaru již dlouhou dobu. Jazyky, které zdůrazňují pohodlí a bezpečnost, bývají pomalé (jako Python). Jazyky, které zdůrazňují výkon, mají tendenci být obtížné s nimi pracovat a snadno se s nimi odpálit (jako C a C ++).

Lze všechny tři z těchto atributů dodat v jednom jazyce? Ještě důležitější je, můžete přimět svět, aby s ním pracoval? Jazyk Rust, který původně vytvořil Graydon Hoare a který v současné době sponzoruje Mozilla Research, je pokusem dělat právě tyto věci. (Jazyk Google Go má podobné ambice, ale Rust si klade za cíl udělat co nejméně ústupků výkonu.)

Související video: Vývoj bezpečnějšího softwaru s Rustem

Rychle se rozjeďte s nováčkem Rustem, který je určen k vytváření rychlého softwaru na úrovni systému. Tento dvouminutový animovaný vysvětlovač ukazuje, jak Rust obchází otravné programovací problémy paměti a správy.

Rust má být rychlý, bezpečný a přiměřeně snadno programovatelný. Je také určen k širokému použití a nesmí skončit jen jako kuriozita nebo také v jazykových loteriích. Existuje spousta dobrých důvodů pro vytvoření jazyka, kde je bezpečnost na stejné úrovni s rychlostí a vývojovou silou. Koneckonců, existuje obrovské množství softwaru - z nichž některé řídí kritickou infrastrukturu - vytvořené v jazycích, kde bezpečnost nebyla prvním zájmem.

Výhody programovacího jazyka Rust

Rust začal jako výzkumný projekt Mozilla, který měl částečně reimplementovat klíčové komponenty prohlížeče Firefox. K tomuto rozhodnutí vedlo několik klíčových důvodů: Firefox si zasloužil lepší využití moderních vícejádrových procesorů; a naprostá všudypřítomnost webových prohlížečů znamená, že jejich používání musí být bezpečné.

Ale tyto výhody potřebuje veškerý software, nejen prohlížeče, a proto se z projektu Rust vyvinul jazykový projekt z projektu prohlížeče. Rust dosahuje své bezpečnosti, rychlosti a snadného použití pomocí následujících charakteristik.

Rez je rychlý

Rezový kód se kompiluje do nativního strojového kódu napříč více platformami. Binární soubory jsou samostatné, bez běhového prostředí a vygenerovaný kód má fungovat stejně jako srovnatelný kód napsaný v C nebo C ++.

Rust je bezpečný pro paměť

Rust nebude kompilovat programy, které se pokusí o nebezpečné využití paměti. Většina chyb paměti se zjistí, když je spuštěný program. Rustova syntaxe a jazykové metafory zajišťují, že běžné problémy související s pamětí v jiných jazycích - nulové nebo visící ukazatele, datové rasy atd. - se nikdy nedostanou do produkce. Kompilátor označí tyto problémy a vynutí jejich opravu před spuštěním programu.

Rez je nízko nad hlavou

Rust řídí správu paměti pomocí přísných pravidel. Rustův systém správy paměti je vyjádřen v syntaxi jazyka prostřednictvím metafory zvané vlastnictví. Jakoukoli danou hodnotu v jazyce lze „vlastnit“, držet a manipulovat s ní pouze jednou proměnnou najednou.

Způsob přenosu vlastnictví mezi objekty je přísně řízen kompilátorem, takže za běhu nedochází k žádným překvapením ve formě chyb přidělení paměti. Přístup vlastnictví také znamená, že neexistuje žádná správa paměti shromážděné odpadky, jako v jazycích, jako je Go nebo C #. (To také dává Rustovi další zvýšení výkonu.) Každý bit paměti v programu Rust je sledován a uvolňován automaticky prostřednictvím metafory vlastnictví.

Rez je pružný

Rust vám umožní žít nebezpečně, pokud potřebujete, do jisté míry. Rustovy pojistky lze částečně pozastavit tam, kde potřebujete přímo manipulovat s pamětí, například dereferencováním surového ukazatele à la C / C ++. Klíčové slovo je částečně, protože bezpečnostní operace Rustovy paměti nelze nikdy úplně deaktivovat. I tak nemusíte téměř nikdy sundávat bezpečnostní pásy pro běžné případy použití, takže konečným výsledkem je software, který je ve výchozím nastavení bezpečnější.

Rust se snadno používá

Žádná z bezpečnostních a integritních funkcí Rustu nepřispívá až příliš, pokud se nepoužívají. Proto se vývojáři a komunita společnosti Rust snažili, aby byl jazyk pro nováčky co nejužitečnější a nejpříjemnější.

Všechno potřebné k výrobě binárních souborů Rust je dodáváno ve stejném balíčku. Externí kompilátory, například GCC, jsou potřeba pouze v případě, že kompilujete další komponenty mimo ekosystém Rust (například knihovnu C, kterou kompilujete ze zdroje). Uživatelé systému Microsoft Windows nejsou ani občany druhé třídy; řetěz nástrojů Rust je stejně schopný jako v systémech Linux a MacOS.

Rez je multiplatformní

Rust funguje na všech třech hlavních platformách: Linux, Windows a MacOS. Jiné jsou podporovány nad rámec těchto tří. Pokud chceš křížová kompilacenebo vyrábět binární soubory pro jinou architekturu nebo platformu, než jakou aktuálně používáte, je zapotřebí trochu více práce, ale jedním z obecných úkolů Rustu je minimalizovat množství těžkého břemene potřebného pro takovou práci. Přestože Rust funguje na většině současných platforem, není cílem jeho tvůrců, aby se Rust kompiloval absolutně všude - na všech populárních platformách a všude tam, kde k tomu nemusí dělat zbytečné kompromisy.

Rust má výkonné jazykové funkce

Jen málo vývojářů chce začít pracovat v novém jazyce, pokud zjistí, že má méně nebo slabší funkce než ty, na které jsou zvyklí. Rustovy funkce v rodném jazyce jsou příznivě srovnatelné s jazyky, jako je jazyk C ++: Makra, generika, porovnávání vzorů a složení (prostřednictvím „vlastností“) jsou všichni občané první třídy v Rustu.

Rust má užitečnou standardní knihovnu

Jednou z částí většího poslání Rustu je podporovat vývojáře v C a C ++, aby používali Rust místo těchto jazyků, kdykoli je to možné. Uživatelé C a C ++ však očekávají, že budou mít slušnou standardní knihovnu - chtějí mít možnost používat kontejnery, kolekce a iterátory, provádět manipulaci s řetězci, spravovat procesy a vlákna, provádět I / O sítě a souborů atd. Rust dělá všechno a ještě více ve své standardní knihovně. Protože Rust je navržen jako platforma, jeho standardní knihovna může obsahovat pouze věci, které lze spolehlivě portovat napříč platformami. Funkce specifické pro platformu, jako je Linux, musí být podporovány prostřednictvím funkcí v knihovnách třetích stran, jako jsou libc, mio ​​nebo tokio.

Je také možné použít Rust bez jeho standardní knihovny. Jedním z běžných důvodů je stavět binární soubory, které nemají žádné závislosti na platformě - např. Vestavěný systém nebo jádro OS.

Rust má mnoho knihoven třetích stran neboli „beden“

Jedním z ukazatelů použitelnosti jazyka je, kolik toho lze díky třetím stranám udělat. Cargo, oficiální úložiště knihoven Rust (tzv. „Bedny“), uvádí zhruba deset tisíc beden. Zdravý počet z nich jsou vazby API na běžné knihovny nebo rámce, takže Rust lze s těmito rámci použít jako možnost životaschopného jazyka. Komunita Rust však zatím neposkytuje podrobné kurátorství ani hodnocení přepravek na základě jejich celkové kvality a užitečnosti, takže nemůžete říci, co funguje dobře, aniž byste sami zkoušeli věci nebo se dotazovali komunity.

Rust má dobrou podporu IDE

Několik vývojářů chce znovu přijmout jazyk s malou nebo žádnou podporou IDE podle svého výběru. Proto Rust nedávno představil Rust Language Server, který poskytuje živou zpětnou vazbu z kompilátoru Rust IDE, jako je Microsoft Visual Studio Code.

Nevýhody programovacího jazyka Rust

Spolu se všemi svými atraktivními, výkonnými a užitečnými schopnostmi má Rust i své stinné stránky. Některé z těchto překážek narazí na nové „rustaceany“ (jak si fanoušci Rustu říkají) a staré ruce.

Rez je nový

Rust je stále mladý jazyk, který vydal verzi 1.0 až v roce 2015. Takže i když většina syntaxe a funkcí jádrového jazyka byla zkrácena, mnoho dalších věcí kolem něj je stále proměnlivých.

Například asynchronní operace stále nejsou v syntaxi jazyka dobře zastoupeny. Probíhají práce na implementaci asynchronních operací prostřednictvím asynchronní a čekat klíčová slova.

Rust je těžké se naučit

Pokud je některá věc na Rustu nejproblematičtější, je obtížné se Rustových metafor vypořádat. Vlastnictví, půjčky a další Rustova správa paměti si domyslí výlet každý poprvé. Mnoho nováčků Rust programátorů má společný rituál „bojuje s kontrolou půjčování“, kde na vlastní kůži zjistí, jak precizní je kompilátor v tom, aby oddělil proměnlivé a neměnné věci.

Rez je složitý

Některé potíže spočívají v tom, jak Rustovy metafory přinášejí ve srovnání s jinými jazyky podrobnější kód. Například zřetězení řetězců v Rustu není vždy tak jednoduché jako řetězec1 + řetězec2. Jeden objekt může být měnitelný a druhý neměnný. Rust má tendenci trvat na tom, aby programátor vysvětlil, jak takové věci zvládnout, než aby nechal kompilátor hádat.

Další příklad: jak Rust a C / C ++ spolupracují. Většinu času se Rust používá k připojení do existujících knihoven napsaných v C nebo C ++; několik projektů v C a C ++ je v Rustu přepsáno od nuly. (A když jsou, mají tendenci být postupně přepisovány.)

Cestovní mapa jazyka Rust

Tým Rust si je vědom mnoha z těchto problémů a pracuje na jejich zlepšení. Například, aby Rust usnadnil práci s C a C ++, tým Rust zkoumá, zda rozšířit projekty jako bindgen, což automaticky generuje vazby Rust na kód C. Tým má také plány, aby výpůjčky a životnost byly flexibilnější a srozumitelnější.

Rust přesto uspěje ve svém cíli poskytovat bezpečný, souběžný a praktický systémový jazyk, a to způsobem, který jiné jazyky nemají, a dělat to způsobem, který doplňuje, jak již vývojáři fungují.