6 ms·
Just to be clear, rust is not object oriented. You do not use inheritance nor do you have objects. There was a recent post comparing rust to haskell https://ww
by zkomp 8y ago
Just to be clear, rust is not object oriented. You do not use inheritance nor do you have objects.
There was a recent post comparing rust to haskell https://www.fpcomplete.com/blog/2018/10/is-rust-functional https://www.fpcomplete.com/blog/2018/10/is-rust-functional. And tldr is yes it lends itself to a functional style...
- lucozade 8y ago> And tldr is yes it lends itself to a functional style Rust does a good job of supporting a functional style efficiently. It's also considered idiomatic to code functionally. Probably the biggest, obvious exception is that Rust embraces mutability because it's statically safe to do so i.e. you aren't as susceptible to the traditional disadvantages of mutability. > You do not use inheritance nor do you have objects That's only partially true though. Rust does support interface inheritance and polymorphism in its trait system. And enums are a closed form of sub-typing. RAII is also idiomatic and I'd argue that many would class that as object-oriented. The way I'd characterise the OO approach in Rust is that the team looked at the experiences of using OO in other languages and picked out what they considered the valuable pieces and left the dangerous ones (like implementation inheritance).
- masklinn 8y ago> That's only partially true though. Rust does support interface inheritance and polymorphism in its trait system. It supports no more than Haskell's typeclasses (rather less in fact), are typeclasses an object system? > And enums are a closed form of sub-typing. Rust enums are pretty standard sum types, a staple of statically typed functional languages. > RAII is also idiomatic and I'd argue that many would class that as object-oriented. That's defensible but setting one hell of a low bar on the concept of object orientation.
- lucozade 8y ago> are typeclasses an object system No, did someone say they were? > Rust enums are pretty standard sum types, a staple of statically typed functional languages Indeed I'm not entirely sure what your point is. Functional and OO aren't mutually exclusive.
- Annatar 8y ago"Functional and OO aren't mutually exclusive." They must by definition be. I disagree vehemently with your statement. If you were correct, then there would be absolutely no point to programming "functionally", it would be absurd. Might as well go back to programming in Java or C++, which is utterly counterproductive.
- indeyets 8y ago"functional" is a description of algorithm (or program), but not language. Languages usually have ways to program in different styles.
- Annatar 8y agoNo, functional programming is a paradigm. An algorithm is a language independent, abstract description of solving a specific task, like for instance searching or sorting.
- Jtsummers 8y agoFunctional programming and object oriented programming are (largely) orthogonal issues. It is, in fact, quite possible to combine both approaches in a language. Java and C++ are really imperative + OOP, not pure OO. The closest to pure OO are going to be languages like Smalltalk which still has some imperative concepts and some concepts from functional programming (closures and higher order functions via blocks, in particular). Scheme allows for object oriented programming, though not directly in the base language spec. You have to build out some infrastructure for it, but then it's quite effective for it.
- masklinn 8y ago> No, did someone say they were? You're implying that Rust's traits "partially" make for an object system. Given Rust's trait are essentially a restricted form of Haskell's typeclass, these would by your assertion "partially"+ make for an object system as well.
- 8y ago
- Annatar 8y agolorry.pickup(&rustfest_envelope); lorry.done(); looks like methods on an object ("lorry") to me. Is it something else?
- steveklabnik 8y agoYes. Rust does not have objects. Method call syntax isn’t inherent to objects.
- kjeetgill 8y agoInteresting. I'm coming from Java that looks-like an object to me. I assume method dispatch here is based on the "receiver" as well right? What differentiates it from an object? Not having identity? or Not being self describing (like a.getClass()) maybe? Thank you for the insight.
- steveklabnik 8y agoNo problem! Syntax is just syntax. Imagine a function that takes two 32-bit numbers, and adds them together: fn foo(x: i32, y: i32) -> i32 { x + y } You'd call it like this: foo(5, 6) // would give back 11 However, this is just syntax. There's no reason this can't be 5.foo(6) It's purely a different way of calling the same thing. The first argument goes before the dot. In some languages, this is 100% interchangable. In Rust, it's not 100%, but it's pretty true. For example, the wrapping_add method adds two numbers together, wrapping around if the number is too large. These are equivalent: let x: i32 = 5; assert_eq!(x.wrapping_add(5), 10); assert_eq!(i32::wrapping_add(x, 5), 10); You can use either method or function call style. These aren't objects, they're just primitive 32 bit numbers. There's no heap allocation, there's no extra bookeeping info. There are some more details, but that's the basic idea. Does that make sense?
- Annatar 8y agoWhat difference does it make how one calls it if I have to program the same way I'd have to program if I were using object oriented paradigm? Or even worse, if I'm forced to debug and understand code written in object-oriented style, how does that help debug and understand the program? It's a travesty this syntax or anything resembling object-oriented programming is allowed. By the by, the best programming languages aren't ones where there is more than one way to do it, but ones where there is one and exactly one way to do any given thing and the reason is simple: the code is easier to understand and therefore enhance or debug for anyone proficient in that language; in addition, it reduces the total number of mistakes in software written in such a language. AWK is one example of such a language.