4 ms·
A clickable visual guide to the Rust type system
- oytis 1y agoI feel like I need a guide for the guide
- zwnow 1y agoI like it, looks cool on desktop, but a mobile view would be cool to have as well. Having to scroll from left to right is a little awkward. Just as a side note
- dxxvi 1y agoI agree. With a 1920-pixel wide monitor, I have to scroll horizontally to see everything.
- orphea 1y agoIt looks like about 2110 pixels is the minimum window width at which the horizontal scroll disappears.
- davsti4 1y agoCtrl-- (browser zoom down to 80%)
- zwnow 1y agoWhy would I do that if there is stuff like CSS where the dev responsible for the implementation could've built it responsive from the start. Ironically this does not surprise me on a Rust based website.
- johnisgood 1y ago1280x1024, I have to scroll horizontally as well and it is quite annoying. It works at zoom level 50%, but the font is a bit too small, then. :P
- WD-42 1y agoFor all the rust programming you do on your phone?
- zwnow 1y agoThere's absolutely no reason to not make a website responsive. Its even expected considering how little effort it takes.
- Arch-TK 1y agoIt would slightly defeat the point of arranging it the way it is. But I also don't think the arrangement is that useful.
- stmw 1y agoNothing to do with the content, but not sure there's not reason - it seems a lot of responsive websites are low density and poorly formatted on desktop just so it is mobile-first. Just based on observations, doesn't seem like it's little effort for most people.
- CodeMage 1y agoI occasionally read about programming when I'm not programming. Some of that reading happens on my phone.
- WD-42 1y agoBlogs sure. This is a reference. Seems silly to potentially compromise the UI for its primary purpose just so random people from HN can better read it from the toilet.
- CodeMage 1y agoIs it a reference? It doesn't look like something anyone would consistently be reaching for. It looks more like a fun visualization of some core concepts, something you would show people as a cool thing you made. Even if it was a reference, the same criticism about left-right scrolling would still apply, at least if you're using the combination of resolution and DPI that people like me do. In fact, if it's meant to be a reference, then it's even more important to make it ergonomic.
- ashvardanian 1y agoWas on the front page under 24h ago: https://news.ycombinator.com/item?id=45167401 https://news.ycombinator.com/item?id=45167401
- stmw 1y agoOP here - yes, something didn't work with dup detection?, this one was submited days ago, before then one you linked and both ended up on the front page. Certainly not intentional.
- Tade0 1y agoI'm happy it was posted again because I missed the previous post and I happen to need this cheatsheet right now.
- Jtsummers 1y agoIf it had no or few comments, the dupe won't be treated as a dupe after some period of time. Then your submission probably ended up in the second chance pool and we get this situation. It happens pretty often.
- q3k 1y agoIs it just me, or does this seem a surprisingly bad teaching aid? I mean, it's correct and concise, but it almost distracts from the things that actually matter. I feel if I was learning Rust again this would've been almost useless, if not actually demotivating (because of how much complexity it shoves in your face all at once). It reminds me of one of the ways of visually laying out elementary particles according to the Standard Model. And now I wonder how much that representation is also actually detrimental to its use as a teaching aid.
- boxed 1y ago> It reminds me of one of the ways of visually laying out elementary particles according to the Standard Model. And now I wonder how much that representation is also actually detrimental to its use as a teaching aid. The Periodic Table does seem like the inspiration. The crucial difference being that the Periodic Table has that shape for a reason. Take the first column of this page for example: u8, i8, bool. Ok, probably 8 bits big so good so far, but then that SAME ROW also has fn(T...) -> U, const T, mut T. Only two of which are related in any way with eachother, let alone the 8 bits column which is 100% not the same thing. Contrast to the Periodic Table where the first row has H and He which both only use the base electron shell. H is to the left because it has (when neutral) 1/2 electrons in it's shell and He to the right because it has 2/2. Then going down from He are all the nobel gases which all have full electron shells. Going down on the right most side of this page has just a bunch of random stuff. Anyway, the reason people try to draw things like the Periodic Table is because it's super good, but the people who do it think it's good marketing, not based on physics/chemistry, missing the entire point.
- q3k 1y agoRight, I also have some chemistry knowledge, so maybe that's why this felt off (form over function?) to me. There's a reason labs continue to have the modern periodic table on their wall even though they have Wikipedia in their pockets, and it's not just because they get freebies from lab equipment vendors :).
- dathinab 1y agoyes the main issue here is that it's basically a list of thing which are "lang_item"s, i.e. have a `#[lang = ...]` attribute or are build in `&/&mut/str/[T]` etc. (but then for some reasons lists combinations of them!?). But `#[lang]` is mainly there to map types to some compiler special casing which might be as trivial as a optimization hint... and the thing with that is it's - not useful for teaching *at all* as it's not representing the semantic/logical building blogs, or what "core" means in rust terms or what you have to learn when learning the language or anything. _It pretty much only is relevant if you write the compiler or the standard library for rust_. - isn't really that useful for know what the "core" of rust is (as many of this items only have a lang tag to make sure some "special case" optimizations, compiler messages, etc. map correctly, and at least in the past you also didn't really have to have all lang items to use rust in a _very_ cut down way) - conflicts with the term of lib-core (which is a very cut down version of lib-std for embedding use-cases where you e.g. might not have alloc, but you can even write rust without lib-core) E.g. `Termination` isn't a "core" rust feature, it's a nice customization hook which main exist so that you can have all of `!, (), ExitCode, Result<T,E>` as return types of main, which is mostly irrelevant outside of some QoL edge cases. In general you don't need to know about it and in 99% of cases you shouldn't implement it either. E.g. Deref,DerefMut, Index, IndexMut, the various Range types, the various operator aren't really special in any way except "hey they have first class syntax" and thats it, the #[lang] tag just tell the compiler "if you find += map it to AddAsing::add_assign". E.g. the lang tag on `Ordering` is basically a optimization hint AFIK. etc. etc. there really is little use for the overview outside of a curiosity and calling it the "core elements" of rust is really just very very misleading
- titouanch 1y agoHow this is structured reminds me of the periodic table.
- SifJar 1y agoGiven the title "Elements of Rust", I suspect that is very much intentional.
- pwdisswordfishz 1y agoYeah, except this one is much more arbitrary in its choice of groupings and arrangement. Why is the boolean and Unicode scalar type in the same column as floating-point types? Why is the ! type not next to enums if () is next to tuples? (Both are neutral elements of their respective type-formation operations.) How is Sized to Drop as Copy is to Clone? You can go on and on. If you take the "periodic table" framing seriously, you can see some actual correspondences on display (like between plain operators and compound assignment operators), but they drown in a sea of spurious ones. It's like infographics. Pretty visuals, but little to no insight.
- germandiago 1y agoThat is nice. I absorbed a lot of understandable info in a very short time since I am familiar with some other statically typed languages.
- worldsayshi 1y agoDoes Rust not have built in Traits for string representations (like Show) or json representations of data?
- danielheath 1y agoThose are in (widely used) packages like serde
- bonzini 1y agoString representations are obtained with the Display trait, which automatically results in an implementation of to_string() as well.
- dathinab 1y agoit has Display and Debug trait both require a `fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>` function while they work the same semantically it's "convert to string for displaying" and convert to string for debugging" (where debugging could be log messages, or print line debugging etc. by default debug for strings will do string escaping and for structs does print the structure/fields/type name in some semi standard way). the Formatter is mostly just a string writer/sink, which also exposes a fixed set of formatting options and some utility methods if a type implements Display through stuff I will skip over you then can also write `instance_of_type.to_string()` and get a string. This trait are used in the default formatting mechanism used by e.g. `println!()` which other libraries (e.g. log) can use through `format!` and some other more internal/95% of case you don't need to know stuff. E.g. `println!("{a}, {a:?}, {a:#?}")` will in order print the display formatting of a, the debug formatting of a and then the alternative debug formatting (if there is one, else the normal one). And other options like pad left, floating point format options etc. exist too. Through it should be noted that rust doesn't contain build in serialization, through nearly everything uses the library/traits/types from `serde` for that.
- johnisgood 1y agoOnly if Rust did not have so much symbol soup... :/ It is a bit too much for me, personally. If you are accustomed to it, it is probably not a big deal for you anymore, but for someone who does not know Rust as well, it could be a deal-breaker, which is why I would still rather prefer reference implementations in C, not Rust. Do not hide things from me!
- abricq 1y agoMakes me think of another Rust visualisation of the memory layouts, that I find amazing: https://johnbsmith.github.io/Informatik/Rust/Dateien/Rust-container-cheat-sheet.pdf https://johnbsmith.github.io/Informatik/Rust/Dateien/Rust-co... Especially helpful if you come from C / C++
- stmw 1y agoThat's a nice one, hadn't seen it before for some reason
- tialaramex 1y agoNote that the diagram of a Mutex is not how a Mutex works today, at least on reasonable platforms. First, Mara changed it to be something much less silly, on Linux and similar it's a Futex, while on Windows it was an SRWLock. However, more recently (last year IIRC) the Windows Mutex is also basically a Futex, albeit Microsoft doesn't call their analogous feature a Futex. In either case this futex-based design means there's no "inner" pointer, and nothing for it to point to, instead there's some sort of atomic integer type, when we're contended we go to sleep waiting on the integer via futex or similar OS feature. Edited to add:: Also, the niche trick in the bottom right is somewhat broader than this suggests. If the type doesn't need every bit pattern then Rust might and in some cases is guaranteed to see a niche it can use for this memory optimisation. Option<&T> is the same size as &T but also Option<NonZeroU16> is the same size as u16, Option<OwnedFd> is the same size as OwnedFd (and thus same size as a C integer by definition), Option<Ordering> is the same size as the Ordering (either of them) and Option<bool> is of course the same size as a bool.
- mattlutze 1y agoI love a page that doesn't react to my browser width.
- phsilva 1y agoReminds me of https://cosmic.mearie.org/2014/01/periodic-table-of-rust-types/ https://cosmic.mearie.org/2014/01/periodic-table-of-rust-typ.... Link not available to me, WBM has it https://web.archive.org/web/20240706045446/http://cosmic.mearie.org/2014/01/periodic-table-of-rust-types/ https://web.archive.org/web/20240706045446/http://cosmic.mea....
- johnisgood 1y agoSomeone mentioned a syntactic sugar for stuff like "let mut iter = a.into_iter();" (into_iter() bit) and the like, may I get reminded of them again?