Nagyon gyors, a dokumentáció érthető, bár kicsit szűkös és hiányolom a kezdők számára alkotott tutorialokat. Átírtam egy 15 évvel ezelőtt készített C programot, de el is akadtam. Eredetileg OpenGL-t használtam, de a Rust felhozatal 3D téren nem használható. Vagy többszáz sort kellene írni egy egyszerű ablak nyitáshoz, vagy a lib "unmaintained" vagy nincs még kész teljesen. Most még csak 2D-ben jelenítem meg a forgó galaxist, minifb segítségével, de az is lehet, hogy egyszerűbb lesz kiszámolni a képernyő koordinátákat mini_math segítségével. Alapértelmezésként a fordító static link, amitől a lefordított program 20MB-ot foglal. Beállítás kérdése a dynamic linking, de úgy is 500kB, ami szerintem nagyon sok. (A C OpenGL változat 6kB volt, de strip ez alá is tudja vinni)
https://gitlab.com/sandorczettner/rust-universe
Eredeti: https://gitlab.com/sandorczettner/3D-Rotating-Universe
minifb: https://docs.rs/minifb/latest/minifb/
mini_math: https://docs.rs/mini-math/latest/mini_math/
- zoner blogja
- A hozzászóláshoz be kell jelentkezni
- 447 megtekintés
Hozzászólások
Nincs Rust tapasztalatom, de amit tudok róla, az alapján tetszik.
> Alapértelmezésként a fordító static link, amitől a lefordított program 20MB-ot foglal. Beállítás kérdése a dynamic linking, de úgy is 500kB, ami szerintem nagyon sok.
Ha viszont Java-hoz hasonlítod, akkor ott kezdődik, hogy JRE kell hozzá, ami szintén pártíz mega minimum. Mivel a Rust rendesen lefordítja a kódot CPU natív binárisra (AFAIK, nagyon nem néztem még a Rust részleteit), ezért gyorsabban indul mint a Java alap JRE-vel.
C-hez hasonlítva sok, de valójában miféle problémát okoz, hogy 500kB egy bináris? Kivétel ha mikrokontrollerre programoznál.
A méretek ráadásul a kód mennyiségével utána már alig nőnek, sokkal inkább az a meghatározó kérdés, hogy mennyi libet használsz. Milyen valós alkalmazás az, ahol nem engedhetsz meg magadnak 30 megát a programnak?
A libek kérdése szintén hasonló a Java-hoz: ott is nagyon sokára lett rendes OpenGL lib. Egyébként meglepően könnyű ilyen libet csinálni (megint Java-C illesztésből indulok ki, mert a Rustot nem ismerem, de tuti, hogy nem lehet sokkal bonyolultabb) akár úgy, hogy csak azokat a műveleteket valósítod meg, ami kell neked.
Úgyhogy ha csak ennyi a problémád, akkor próbáld meg ignorálni, és kitartással haladj tovább!
- A hozzászóláshoz be kell jelentkezni
Szerintem ez a statikus linkeles dolog a Go, meg a dockerben futo 1db binaris-os microservice-ek miatt lett divat.
Eddig nem astam bele magam Rust-ba (pedig jo lenne), de gondolom lehet azert itt is strippelni a binarist. Kulonben nemcsak mikrokontrollernel, hanem barmi nagyobb beagyazott cuccnal is (openwrt es tarsai) gond lehet.
Régóta vágyok én, az androidok mezonkincsére már!
- A hozzászóláshoz be kell jelentkezni
Grafikus dolgok eddig elkerülték az érdeklődésemet.
A mainstream irányokból (command line, webassembly, networking, embedded) eddig a webassembly (WASM és WASI) egy-egy próbát leszámítva elkerülte az érdeklődésemet. A maradék 3 témára viszont gyakran használom.
Méret: vegyünk egy alap C programot.
// teszt.c
#include <stdio.h>
int main() {
printf("Hello\n");
return 0;
}
$ gcc -O2 -Wall -s teszt.c -o teszt --static
$ ls -lh teszt
.... 801 kB
De miért dobtam be a --static módot?
Rust kódot is lehetne dynamic módon fordítani, de ennek feltétele, hogy a /usr/lib/ mappában ott legyenek a dinamikusan betöltődő libek.
Egyelőre a default a static a Rust modulokat tekintve. Nézzük konkrétabban:
Egy default "$ cargo new teszt2" hello world lefordítva és strip-elve x86_64 architektúrán:
$ ls -lh teszt2
.... 303 kB
$ RUSTFLAGS='-C prefer-dynamic' cargo build --release
$ ls -lh tesz2
.... 15 kB
Sajnos nálam sincs feltelepítve a /usr/lib/-be a Rust runtime, így
$ ./teszt
./teszt: error while loading shared libraries: libstd-a46a068050a12a4b.so: cannot open shared object file: No such file or directory
Egyelőre jobb a békesség, marad a statikus fordítás és a végén a kész binárisra egy strip. Ezt a friss 1.59-es fordítóban már be is építheted a Cargo.toml-be:
[profile.release]
strip = "symbols"
- A hozzászóláshoz be kell jelentkezni
Ha viszont OpenGL, most én tanulok tőled. Ezekről mik voltak a benyomásaid?
https://crates.io/crates/glium
https://crates.io/crates/sdl2
Jók vagy még kezdetlegesek, esetleg nem jó az irány?
- A hozzászóláshoz be kell jelentkezni
"Glium is no longer actively developed by its original author." - e miatt szeintem már nem érdemes belekezdeni.
sdl2-t nem néztem még.
- A hozzászóláshoz be kell jelentkezni
Viszont a forkja él. Legalábbis 8 napja módosult.
Mondjuk ha nagyon nem találok valamire értelmes megoldást, akkor írok rá egy wrapper réteget, ami maga alatt a C-s libet birizgálja.
- A hozzászóláshoz be kell jelentkezni