6 ms·
keeping in mind that this is about syntax, here's what I think is actually worse (but I understand that everyone is different so if you like these, it doesn't r
by optymizer 6y ago
keeping in mind that this is about syntax, here's what I think is actually worse (but I understand that everyone is different so if you like these, it doesn't really matter what I think):
#[] - why the [] if # already makes that line different from the usual code? seems superfluous
'a - is that thing next to 'a' a smudge on my display? Did I forget a quote? better wipe the display with my finger
'&a - "mut" and "ref" but ' ?
foo! - yelling out function calls. "print!" "exit!" "macro!". Angry Codes!
foo? - when you're done yelling, make sure to ask existential questions of the return result. This one I have the least problems with since it actually makes me question the return value ("hm, something's weird here, it could be null, pay attention"), but when coupled with the yelling, just makes the whole thing look dramatic. "do_it_now!(); did_we()?"
fn - by itself not a huge deal, but the list of truncated words that are used frequently is "impl", "mut" and "pub". I save some characters (am I really in such a rush?) at the cost of reading this broken English "f-n impl moot pahb". At least C doesn't have that. Pascal had "interface" "implementation", "begin", "end", etc. Java has "public", "interface", "extends", "class".
Default for Borrowed - suddenly English! No time to type 'function' or 'mutable' but "Default for Borrowed" is a-ok?
underscores all over the place in the standard library. Even C doesn't have that many, mostly in the _r variants that were added.
unwrap() - what does that word have to do with errors? (I know what it does) It wouldn't be my first choice.
I have a whole list of awesome stuff, meh-stuff and wtf-stuff I noted down about Rust while trying to learn it (on multiple occasions), and there are a lot of excellent things about Rust, but the aesthetics of the language are important, otherwise we'd all have no issues coding in Brainf*ck.
Yes it's possible to go nuts with syntax, but this just feels like the "programmer art" of language syntax. I think it's usable (clearly), it's just not elegant to me.
- leetcrew 6y ago> #[] - why the [] if # already makes that line different from the usual code? seems superfluous I don't even know what #[bla(foo)] does, or why all that punctuation is needed. maybe nesting is allowed? > 'a - is that thing next to 'a' a smudge on my display? Did I forget a quote? better wipe the display with my finger this is a lifetime annotation, which is a genuinely noisy bit of syntax. > foo! - yelling out function calls. "print!" "exit!" "macro!". Angry Codes! I guess they really want to make sure you know when a macro is being used. probably a result of ptsd from debugging c and c++ code :) > fn - by itself not a huge deal, but the list of truncated words that are used frequently is "impl", "mut" and "pub". I save some characters (am I really in such a rush?) at the cost of reading this broken English "f-n impl moot pahb". At least C doesn't have that. the c keywords aren't too bad, but the standard library is full of this kind of thing. stdio.h and string.h immediately come to mind. I'm not so much defending rust as I am pointing out that c's syntax isn't that great to begin with. I've been writing c and c++ code every day for several years now, so it's usually pretty easy for me to skim and understand what is going on. but if I try and place myself in the shoes of a newcomer, I don't think the syntax is much better than rust. remember the first time you tried to parse the type of a nontrivial function pointer?
- jcranmer 6y ago> fn - by itself not a huge deal, but the list of truncated words that are used frequently is "impl", "mut" and "pub". I save some characters (am I really in such a rush?) at the cost of reading this broken English "f-n impl moot pahb". At least C doesn't have that. int and char aren't exactly words. And let's not forget that a type like "double" makes no sense whatsoever by itself. (It's two of something, but two of what? Oh, it's "double-precision" floating point! How could I miss that?) Now, let's look at C's standard library: strcmp, strpbrk, isalnum, ispunct, setjmp, SIGSEGV, SIGFPE (that's the divide-by-zero exception, isn't it obvious?), SIGABRT Sure seems like C has its own massive issue with "we can't let a name be long" > underscores all over the place in the standard library. Even C doesn't have that many, mostly in the _r variants that were added. va_arg, FE_DFL_ENV, int32_t, etc. Continue on into most C libraries, and underscores are pretty common because C has no other namespacing mechanism. Syntax is pretty strange in any language if you're not used to it. If you're comfortable with C, C's syntax and spelling quirks don't stand out to you.
- arcticbull 6y ago> Sure seems like C has its own massive issue with "we can't let a name be long" Ahh yes, I believe that came about due to the great "Vowel Bowl" of the 1970s. There was a serious shortage of vowels.
- hermitdev 6y agoI realize you're joking, but probably some of it came from limitations of the Era. As recently as early 2000s, I had to use a 68k assembler that had a limit of something like 8 or 10 characters for a label. The really annoying part was you could have longer names, but it would silently ignore any extra. We're still stuck with other decisions that were driven by size constraints (like the separation of /bin and /usr/bin, IIRC).
- int_19h 6y agoIt comes from the limitations of some early pre-standard C compilers. It was fairly common to use fixed-length arrays, to avoid heap allocations for perf and memory usage reasons. This included identifiers; but then you had to decide on the maximum size - since most identifiers would be fairly short anyway, so a large array would be wasted space. Since the first edition of ANSI/ISO C was trying to codify the already-existing common practices for maximum portability, it reflects those existing limits (5.2.4.1 "Translation limits"): "The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits: ... 31 significant initial characters in an internal identifier or a macro name 6 significant initial characters in an external identifier" If you look at many abbreviated function names from the C stdlib, they are specifically 6 characters long - strcpy etc. I wouldn't be surprised if the 6-char external identifier limit goes all the way back to the first K&R C compilers.
- steveklabnik 6y agoJust a few small comments. Maybe understanding some rationale will help. > #[] - why the [] if # already makes that line different from the usual code? seems superfluous # does not "make that line different from the usual code." The whole #[] construct is it, it has nothing to do with lines. You could put "#[foo] #[bar]" on one line if you wanted, you could write "#[foo] fn lol()" if you wanted... > foo! - yelling out function calls. "print!" "exit!" "macro!". Angry Codes! This helps both humans and computers parse; macro invocations don't have to follow regular Rust syntax, and the ! helps indicate that that's true. > Default for Borrowed - This is not language syntax, this is the name of two types. You can name your types however you'd like.
- cocochanel 6y agolol I laughed harder than I should