Rust tapasztalatok

Sziasztok,

kiváncsi volnék személyes tapasztalatokra Rust nyelven leszállított szoftvereket/szolgáltatásokat illetően. Miben van felhasználva, hobbi fejlesztés vagy termék? Megérte Rust-ban dolgozni? Ha igen, miért? Melyik nyelvet váltotta ki?

Érdekelne az is, milyen IDE (integrált fejlesztői környezet) használata vált be Rust-hoz?

Köszönöm!

Hozzászólások

Kísérletképpen egy kis Pythonos API-t váltottam le vele. Sebesség miatt. És kíváncsiság miatt. Memóriában tartott adatok szűrése, összegzése, százezres nagyságrendű tételszám.

Legalább 50x gyorsulás mindenben:

- 50ms helyett <1ms a response time
- Pythonban 10ms a pickle.dump, Rust ugyanebbe a formátumba 0.2ms alatt ment, JSON-nál nem ilyen nagy a különbség
- Flask a teszt gépen 2k dummy kérést szolgált ki egy szálon, Actix Web 70k-t egy szálon (35x) és 300k-t 5 szálon (150x)
 

Rustban programozni sokkal jobb élmény volt mint vártam. Azt írták hogy nehéz tanulni, és az ownership tényleg szokatlan volt, de alapvetően meglepően könnyen és gyorsan haladtam benne.

Tetszett a szigorú None kezelés. Pythonban ennek a hiánya sok bajt okoz. A type hint-ek és mypy segít, de jobb így hogy a nyelv szerves része.

Úgy általában a szigorú típusosság jó élmény. Korábban Elm-nél éltem át hogy a JavaScript törékenységéhez képest micsoda élmény hogy bízhatok a kódban. Rust ilyen tapasztalat Pythonhoz képest. Jóval bőbeszédűbb a kód, viszont ad egy nagy stabilitás érzést. Python hozzá képest elegánsabb, tömörebb, de kártyavár élmény.

En kotlin-bol jottem, eros c/c++ hatterrel, es elegge szoporoller volt, szo szerint nagyon "utban van" a nyelv. kb. 5-10x produktivabb vagyok java/kotlin alatt. Persze, az ownership a security miatt amugy fontos lenne, de amikor szo sincs security-rol, csak szeretnek egy modult irni, es modulon belul is gyokolni kell az ownership-pel, az nagyon gaz. Pl. graf-ot akartam hasznalni, gondoltam, osszedobok egyet en, de elotte megneztem, milyen lib-ek vannak mar - ott irtak, hogy az ownership modell miatt jobb, ha nem allsz neki magad, mert szoporoller erosen, amit teljesen meg tudtam erteni es meg is fogadtam.

Sajna a java JIT + GC dolgai is erosen szopo kategoria, meg a vacak JVM meg 20-30 evvel a megjelenese utan is tetu lassunak erzodik, de legalabb produktiv benne az ember (... IDEA-val. anelkul kb. osszeomlana a java ecosystem :D ).

JVM -bol jovet meg a teljesitmeny meg a tobbszalusag elonye sem jatszik ugye.

Szumma nem rossz, a c/c++ -nal jobb a rust, de ugyanannyival komplikaltabb is. IMHO kotlin/swift/... uj-generacios nyelvekhez kepest tulbonyolitott, es az extra bonyolultsag nem "terul meg" produktivitasban vagy barhol mashol.

De jó volt ezt olvasni. Köszi!

Kb. 2 hónapja tudatosult bennem, hogy a Pythont váltani fogom Rustra jövő évben. Figyeltem a nyelvet már kb. 4 éve, de mostanában annyi pozitív hír jött, hogy bennem is megfogalmazódott a váltás. Nyilván ebben az is benne van, hogy most már kell a váltás kiégés, unalom ellen.

Említetted a Flask-et. Most már lassan 10 éve tolom. Flask miatt nagyon nehéznek tűnik a váltás. Nagyon szeretem.

Biztos, hogy nem én gonoszoltam le!

Igen, így csináltam korábban Python API, Cython betétekkel. Viszont ahogy sokat mértem és optimalizáltam, azt találtam hogy Python egyszerűen csak dög lassú, 20-30 ms csak az hogy végiglépkedjek egy tízezres listán, és még nem is csináltam műveletet a tételekkel. A cél ennél a rendszernél (első körben) <10ms response time, ami Pythonnal lehetetlen akármit művelek, Rusttal pedig egyszerűen csak adott.

PyPy átlagosan 5x gyorsabb mint CPython: https://speed.pypy.org/ Ami szenzációs eredmény.

Rust viszont 50x (a témákban amiket mértem).

Amikor néztem PyPy-t utoljára, még nem támogatott sokmindent ami fontos volt nekem. Viszont most úgy látom behozta a lemaradást. Teszek is vele egy kísérletet. Nem baj ha 5x gyorsabb a rendszer, amíg még Pythonban van. Köszi hogy eszembe juttattad.

Igen a futasi sebesseg rohadt sokat szamit. Van ez a rangsor energia felhasznalas szempontjabol is: The 10 most energy efficient programming languages | by Kasper Groes Albin Ludvigsen | Medium. De mindig az a kerdes milyen aron. Ezert szerintem azt is erdemes a szamok melle tenni, hogy pl. hogyan alakul a fejlesztes ideje.

En Go-ban vagyok jartas, es igaz, hogy 2-4X lassabb mint mondjuk Rust vagy C++, de lehet 1/3ad annyi ido alatt elkeszul. Pl Go egyik nagy erossege, hogy kenyelmes csapatban dolgozni vele. Fa-ek egyszeru (nyilvan vannak brainfukk dolgok), rengeteg dologot levesz a vallunkrol (pl. GC, thread kezeles, buffer overflow vedelem), kevesebb idot toltunk review-val, gyorsabban fordul, van beepitett race detector, kod generatorok, es az ide+debugger is eleg jo (itt tuti van mit fejlodni, Javahoz kepes pl).

Van esetleg ezen a teruleten is tapasztalatod, amit megosztanal?

Igen, Go-t is nézegettem, tetszik az egyszerűsége, de a jelenlegi projektemhez a nyers többszálú sebesség fontos szempont, így szívesen megfizetem az árát fordítási időben és bőbeszédűbb kódban. Pythonban el lehet érni C sebességet Cythonnal, ahhoz képest Go visszalépés lett volna.

Rusttal csapatban dolgozásról nem tudok nyilatkozni mert egyelőre egyedül dolgoztam csak benne.

JetBrains (PyCharm konkrétan) Rust pluginját használom és elégedett vagyok vele: https://www.jetbrains.com/rust/

Erős assembley és C háttérrel rendelkezem. Nem látom, miért kéne bármi másra váltanom erre a kis időre, de ez nyilván amiatt a szakterület miatt van, amelyen dolgozom. Miben ad többet a Rust, mint a C?

> Sol omnibus lucet.

A C alatt a C++-ot is értjük?

Mert nekem amúgy a C++ áll kézre és én sem igazán értem, hogy mitől jobb egy Rust. Viszont egyre többen és egyre nagyobb nevek váltanak, így elképzelhető, hogy a divaton kívül valami más is lesz a háttérben.
Írtam programokat más nyelveken is. Van ami semleges számomra, de az ilyen MS közeli nyelveket nagyon utálom mert annyira logikátlan az egész mondjuk egy C-hez képest.

- Indítsd újra a gépet! - Az egészet? - Nem, a felét...

Nekem az a tippem, hogy a legnagyobb "elonye", hogy kevesebb problema legyen junior fejlesztok felvetelevel. A Rust altal adott safety net sok hibat ki tud szurni.
https://bitbucket.org/blog/why-rust

Szerk: Masik velemeny: https://scalac.io/blog/5-reasons-why-rust-is-the-future-rust-functional…
 

Lazán kapcsolódik.

Direkt nem a HWSW cikket linkeltem be, mert az eredetiben sokkal technikai információ van.

Today we are excited to talk about Pingora, a new HTTP proxy we’ve built in-house using Rust that serves over 1 trillion requests a day, boosts our performance, and enables many new features for Cloudflare customers, all while requiring only a third of the CPU and memory resources of our previous proxy infrastructure.

https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connect…

Mivel nem egyértelmű, hogy csak fejlesztőket kérdezel-e, mert „személyes tapasztalat”-ot írsz, így leírom nem fejlesztő, linuxos végfelhasználóként, hogy utálom a Rust-ot. Nem a nyelvet magát, mert nem programoztam még benne, hanem mikor Arch AUR-ból vagy clone-ozott git-tárolóból kell forgatnom Rust kódot, az elég lassan fordítgatja a cargo a függőségeket. Ugyanazon a gépen egy C/C++ kód töredék idő alatt lefordul. A Go-t sem szeretem, de az még nem tűnik akkora bloatnak, hogy komolyabban rángjon tőle a szemem.

Pedig gondoltam, hogy beletanulok a Rust-ba, mert nagyon népszerű, de már ez az előzetes tapasztalat elvette minden kedvem tőle. Ha bele is kezdenék, én csak neovim-mel mennék neki, mint minden nyelvnek, amit úgyis használok mindenre. Eleve van hozzá állítólag elég jó Rust language server plugin, amit sokan dicsérnek, meg én eleve vim-mel megyek neki mindennek, mindegy milyen doksi, mekkora kód, stb.. vim és Emacs usereket erről ismered meg, hogy mindent a kedvenc editorukkal csinálnak. Nem csak szövegszerkesztés, meg ide, de sokszor fájlműveletek, terminál multiplexelése, stb. funkciókat is abba pakolnak. Viszont tapasztalatom szerint a legtöbb Rust-feljesztő VSCode-ot használ.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Igazabol a CLion jocskan kenyelmesebb (pl. kijelzi a tipusokat lambdakban is, van benne visual debug, tamogat refactor-t), ellenben nem a rust language server-t hasznalja, sajatot csinaltak neki, emiatt elofordul, hogy olyan hibakat jelez, amit a rustc nem, es viszont.

Hozzateszem a java-t semmi se veri IDE supportban. Maga a nyelv nem nagy szam, de olyan massziv IDE supportot meg nem lattam sehol mashol. Kivalo pelda, ha arra kerul a sor, mi is az IDE, vs. text editor. Ezt egy vim usernek nehez elmagyarazni :), de idea -bol 1 hotkey-jel komplett class hierarchia-t lehet refaktorolni, reference lookup-pal meg mindennel. 5 mozdulattal 1 perc alatt teljesen at lehet alakitani a teljes kod strukturat, ugy, hogy az meg mindig fordul es mukodik.

A rust forditasan lehet reszelni, pl. ha 1 cargo-t hasznalsz, akkor 1 package 1 verziojat csak egyszer forditja le. Na persze ha odavagsz egy tokures rendszert neki, akkor mindent 0-rol, igen. A c/c++ is lassu lenne, ha az osszes dep-et le kellene forgatnia, nem lenne szepen osszecsomagolva a /usr/lib -ben neked keszen. Alma-korte esete.

Nem akarom ismetelni az online elerheto szamtalan Python/C/C++/Go/Rust osszehasonlitast. Egy dolgot emelnek ki, ami ritkabban kerul elo:

Code review: C++ eseteben mindig nagyon figyelnem kellett, egyszeruen rengeteg lehetoseg van a hibazasra, kulonosen, ha multithreaded a kod. Amikor irod a kodot, lehetoseg van valasztani az ismert, "biztosan" jo megoldast, review soran viszont a prezentalt megoldast kell hitelesiteni - nem konnyu. Python eseteben a tipusok hianya teszi a reviewt nehezze.
Ebbol a szempontbol eros a Rust: annyira szigoru, alapesetben (safe code) rengeteg hibakategoriat kizar a fordito, ami elofordulhatna C++ vagy python eseten.

Szerkesztve: 2022. 09. 25., v – 07:37

Nem vagyok programozó, nem írtam benne kódot soha ezt leszögezném. Viszont hobbiból érdekelnek a programozási nyelvek. Egyszer nekiálltam a Rust-nak, tetszett is. Véleményem szerint okosan összerakott nyelv. Viszont a szintaktikája borzalmas. Ebben meg elfogult vagyok és erősen hajlok mindig a Lisp felé. Egyszerűen nekem túl "zajos", ránézésre nem "szép" a kód a Rust-ban.