4 ms·
It's not just Rust syntax. `name: Type` is the syntax used in TypeScript and Python type annotations (also Ocaml, which is probably where Rust got it from). Gol
by notriddle 4y ago
It's not just Rust syntax. `name: Type` is the syntax used in TypeScript and Python type annotations (also Ocaml, which is probably where Rust got it from). Golang drops the colon, but still keeps the name first.
As for what's wrong with `Type name(constructor, args)`? A lot of tooling wants to be able to parse "mostly-valid C++", like IDEs and compiler diagnostics. Sure, once clang's type inference is finished, the lexer hack and most vexing parse aren't problems, but when the program isn't complete, parsing isolated fragments is impossible, and that limits the amount of useful tooling the language can have.
- beeforpork 4y agoOK, I see. Yes, C and C++ syntax is definitely ambiguous without semantic analysis. Maybe this could also be explained somewhere.
- cyber_kinetist 4y agoAnd to add, the `name: Type` syntax is not just a modern fad, don't forget the OG language that did this: Pascal! (https://en.wikipedia.org/wiki/Pascal_(programming_language) https://en.wikipedia.org/wiki/Pascal_(programming_language))
- c-cube 4y agoThe syntax `name: Type` is also friendlier to type inference as you generally have a token indicating a declaration. If you have `var x: Type = …` then you can just omit the type and let inference do its job. Even better, when you start having more complex patterns on the left-hand side of `=`, you can type annotate them as you want. Hypothetical syntax would be: var (x: f32, y, [z1,z2,z3]) = SomeExpression(); That's harder to do when you have a type declaration on the left imho.
- nyanpasu64 4y agoIt would make sense if Carbon started allowing omitting ": Type", which they currently don't: https://github.com/carbon-language/carbon-lang/blob/trunk/docs/design/variables.md#overview https://github.com/carbon-language/carbon-lang/blob/trunk/do...
- amai 4y agoOn the other side `name:Type` doesn't allow an IDE to suggest a name based on the type, because you type the name first. Also setting values looks pretty confusing. I claim writing the type before the name is much more readable. Compare five: integer = 5 or integer five = 5
- notriddle 4y ago> I claim writing the type before the name is much more readable. Compare I claim writing the name first is much more readable. Compare integer five = 5 or five: integer = 5
- kzrdude 4y agoThere is a lot of Rust in the Carbon syntax. `fn`, `name: Type`, `i32`, `->` for return type. `impl` as a keyword. `Self` as a keyword. Nothing unique to Rust, but it's interesting to see.