5
Reading Club: The Book Chs 5 & 6 "Structs and Enums" [PROJECT]
(rust-book.cs.brown.edu)
A collaborative space for people to work together on learning Rust, learning about the Lemmy code base, discussing whatever confusions or difficulties we're having in these endeavours, and solving problems, including, hopefully, some contributions back to the Lemmy code base.
Rules TL;DR: Be nice, constructive, and focus on learning and working together on understanding Rust and Lemmy.
See also:
Thumbnail and banner generated by ChatGPT.
I want to highlight one of the more subtle-yet-important clarifications made in these 2 chapters: associated functions vs methods, and how method calls are just syntactic sugar for function calls.
Unlike in many other languages, there is no formal distinction (e.g. via separate keywords) between methods vs constructors vs property getters. The first parameter as well as the return type determine if a given associated function is "actually" a constructor or a method (etc.).
Personally, I find this incredibly elegant; it's a form of "less is more" that gets out of my way when I'm coding while still allowing me to use all of the existing patterns that I know from elsewhere.
I'm not entirely sure I understand exactly what you mean here.
Do you appreciate it as an implementation design for the language (I do too)?
Or do you see some utility in being able to call
MyStruct::my_method(&my_var)
... or both, cuz there's something assuring in knowing the simple pattern underneath the syntactic sugar is there?
Bit of both, I suppose. Along with my own experience trying to deal with prototypes in JavaScript and how Python handles methods vs "bare" functions internally in terms of v-tables and "where" things exist in memory.
I imagine the fact that both of those are interpreted languages plays somewhat heavily into it.
With regards to being able to write
MyStruct::my_method(&my_var)
, it's the one-two punch of "I can use that specific syntax to differentiate between 'inherited' methods that have the same name" and that the compiler doesn't treat.method()
calls any differently and just rewrites them as such when doing it's job.Yea I'd imagine so too.