4 ms·
I'm curious what esoteric syntax utilizing various non-alphabetical characters you're talking about in Rust? I recently started learning it and nothing jumps o
by sbov 7y ago
I'm curious what esoteric syntax utilizing various non-alphabetical characters you're talking about in Rust? I recently started learning it and nothing jumps out to me as particularly egregious.
- steveklabnik 7y agoThere are three ways this objection is usually expressed: 1. Long ago, Rust had some interesting built in syntax for different kinds of pointers, and so people checked out Rust then, and didn't realize we got rid of it. This objection has happened less and less since that was ~5 years ago (wow time flies), but sometimes it still comes up. 2. The lifetime syntax uses a single apostrophe, like 'a. We took this syntax from OCaml (though slightly re-purposed), but if you haven't used OCaml, and many have not, it can feel very weird. 3. Not everyone prefers the "curly braces and semicolons" style of systems languages, and so they feel the <>s and ::s and {}s and ;s are noisy. We kept this style to be familiar to systems programmers. In general, Rust doesn't have a lot of unique syntax, but it does draw from two generally disparate areas: functional languages and systems languages. If you haven't used both before, some of it can feel strange. It happens.
- hello_moto 7y agoSomewhat agree with this explanation. I started my journey from QBasic (high-school) to C/C++ (college) to Java to JavaScript and I have to admit that I use Java/JS the most throughout my career so my experience is biased toward my own personal experience. Had I stuck with C/C++ for 10 years and dabble with Haskell/OCaml at night, I might feel different. Once I got stuck in Java, I felt very comfortable there.
- ncmncm 7y agoYes: http://blog.plover.com/prog/Java.html http://blog.plover.com/prog/Java.html Money quote: "I enjoyed programming in Java, and being relieved of the responsibility for producing a quality product."
- hello_moto 7y agoMeh ¯\_(ツ)_/¯. It is his opinion, not a fact. I never believe in connecting programming language with quality product because I see no evidence.
- ncmncm 7y agoI don't doubt his enjoyment, or his reason for it. People gravitate to work using languages with characteristics that suit them. Most people coding Java would be less happy with something else, and most people using something else would be less happy obliged to use Java.
- hello_moto 7y agoYou have a point there. Though, I can accept JS and Go (the last one takes a while).
- agumonkey 7y agoADA uses ' as syntax, and I hated it :)
- asdkhadsj 7y ago> 3. Not everyone prefers the "curly braces and semicolons" style of systems languages, and so they feel the <>s and ::s and {}s and ;s are noisy. We kept this style to be familiar to systems programmers. Oh boy do I agree about the noise. I absolutely love Rust, and I definitely don't think it's noisy (in normal examples) but before I first learned Rust generic code feat like syntax soup. It seemed bizarrely messy and convoluted. Mind you, I love Rust now. This is not a criticism towards Rust. It's simply a reflection on how a non-Rust programmer, largely non-Systems programmer saw Rust's flavor of syntaxes for Generics and Lifetimes. How time flies. Now I push Rust at work where it makes sense and use it for everything in my personal (code) life. My favorite part? Likely how it feels imperative while still offering functional features. Iterators, for example, are my favorite thing in the world. This is partially due to system shock I'm sure; the idea of iterators to this old Go programmer feels like magic haha, it was quite the change coming from Go.
- 0815test 7y ago> Oh boy do I agree about the noise. I absolutely love Rust, and I definitely don't think it's noisy (in normal examples) but before I first learned Rust generic code feat like syntax soup. What's the alternative? Text-based syntax ala Pascal/Ada is actually noisier than symbol- and short-keyword-based, because you don't ever get to file the "syntax" parts away as you become familiar with them; you have to process them visually every time you read that code. There may be a case for that sort of overly-verbose syntax as a form of literate programming - an introduction meant for users who are as of yet unfamiliar with any given system; but as an everyday practice it's quite painful!
- dual_basis 7y agoSignificant whitespace a la Python. When I first started learning Python I hated the idea of significant whitespace, now I think it is the best thing ever.
- 0815test 7y agoUsing rustfmt consistently will get you basically 90% of the way towards the "Pythonic" benefits of significant whitespace. On the other side, having lexical block nesting be controlled by an explicit pair of characters { } is a pretty significant advantage, particularly so for Rust where placing a bit of code in its own block can have rather significant implications of its own!
- chmln 7y agoCounterpoint to #3: the <>s and ;s and {}s were very much appreciated during learning because of familiarity - basically same as typescript minus the turbofish.
- hello_moto 7y agohttps://doc.rust-lang.org/book/ch12-04-testing-the-librarys-functionality.html https://doc.rust-lang.org/book/ch12-04-testing-the-librarys-... pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { vec![] }
- steveklabnik 7y agoYou didn't elaborate on exactly what you find esoteric about all of this, but here's all the non [a-zA-Z] characters, what they do, and how they relate to my sibling comment about objections: <> for generics. Point 3. 'a for a lifetime. Point 2. () , and {} for function syntax. Point 3. pattern: type for arguments. This is in a few different languages, and doesn't fit into my below points, but the paragraph I made after the point. & for references, point 3. -> for the return type of functions. In the paragraph after. ! to indicate that vec! is a macro. This is pretty unique, actually. Ruby does let you use ! in function names, but that's not really the same thing. [] is used to invoke vec! similarly to how you index anything else, that is, this creates an empty vec, like [] would create an empty array. This is sorta point 3 and the final paragraph. None of this is to say that you're wrong about this; I think it just really demonstrates how hard it is to please people with syntax. None of this is unique to Rust, but the combination of influences is.
- hello_moto 7y ago> I think it just really demonstrates how hard it is to please people with syntax There's no silver bullet just like anything else. It's a matter of preference. Generics is fine (exist in C++ and Java). Although I dislike crazy generics <T<S>> but that could be design problem. <'a> (yeah technically it's just the 'a. "->" non-alphabet, I came from C family (C/C++/Java) so return type stated earlier as part as the whole long-train of ceremonial stuff alongside the modifier (public static int myMethod) Pointers and Reference: not my cup of tea but I understand it's important for system language. Others can argue its importance for "business apps" (or web-apps) but I never need pointers and references so _shrug_. semi colon after input parameter: query: &str vs string query contents: &'a str Vec<&'searching str> <--- the fact that now you can combine these non-alphabet stuff together => "&'a". vec![] => exclamation mark squeezed between what appears to be a keyword "vec" and an array syntax Again, don't get to riled up. I just personally don't enjoy reading syntax like this.