Hello, The main feature of OOP that Rust supports is polymorphism, though it is achieved via type-classes rather inheritance (*). It also features encapsulation, but it may have existed before OOP so it's hard to view it as an OOP-feature...
Regarding the need to learn functional programming first, I would actually see it the other way around: by learning Rust, you will learn a number of functional programming concepts/idioms that may pick your interest in learning more functionally oriented languages. I do not think that prior exposure is required, but then I had already prior exposure so may not be the best qualified here. Try it out! It just takes 30min to read the Introduction: http://doc.rust-lang.org/intro.html and you'll know if you wish to dig further or if it's not for you yet. (*) For the uninitiated, this means that the creator of a type does not hardcode the list of interfaces its type support, but rather you can create your own interface and implement it yourself for a 3rd party type. You can also of course implement a 3rd party interface for your own type, but that is already supported in Java-like OO. On Sun, Jan 11, 2015 at 2:54 PM, Mayuresh Kathe <mayur...@kathe.in> wrote: > whew, that was an exhaustive explanation, thanks for taking the efforts to > write in the detailed response. > > i realised one thing, the best way to learn "rust" would be to not have > any preconceived notions about it, as well as to take things a bit easy and > learn the language as it is, one morsel at a time. > > ~mayuresh > > > On 2015-01-11 19:17, Kevin McGuire wrote: > >> Oh, hell. I forgot about Option<T>. >> >> You see also in Rust nothing can be uninitialized! Unless you use >> unsafe code. This little type is your friend. It gives you the >> equivalent of uninitialized data. So take some time and research it or >> play around with it. >> >> On Sun, Jan 11, 2015 at 7:43 AM, Kevin McGuire <kmcg3...@gmail.com> >> wrote: >> >> I can not answer very well about the OO capabilities of Rust since >>> it is hard to define, but Rust does support: >>> >>> methods of a type/structure that take a special _self _argument >>> >>> traits which are like interfaces that any type/structure can >>> implement >>> >>> operator overloads like + for one >>> >>> There is no inheritance at the moment although you can get a kind of >>> hack version of it using the Deref trait on an object. The Deref is >>> mostly used by smart pointers. The smart pointer type wraps your >>> inner type and then allows access to the inner type through the >>> de-reference support of Deref. >>> >>> The only other object like feel is of the namespace system. >>> >>> In Rust everything has the capability to have a method although the >>> primitive types are kind of special. >>> >>> Also I have seen and used an operator overload for a structure once >>> so I know it has that ability now which I think may have been fairly >>> recent. >>> >>> So Rust is capable of some object oriented programming. You do not >>> have to do object oriented programming. >>> >>> Also, the per-requisites for Rust - Yes functional programming would >>> be just fine. I am going to go ahead and tell you where you may >>> struggle with learning Rust. >>> >>> The major problem you will have is coming to understand ownership >>> and lifetimes. These two things are what makes Rust memory safe and >>> are fantastic however at first they will seem like a curse. You >>> might even give up on Rust because they will make writing code >>> difficult at first. >>> >>> The second problem you are going to have is feeling a little lost as >>> to how to allocate memory during run-time and also you will feel >>> very confused as how to overcome lifetime limitations by your >>> limited knowledge of the pointer types. >>> >>> _These two problems you are going to face no matter what language >>> you have come from._ >>> >>> To help you first I would like to to take note of Box<T> and Rc<T>. >>> Do not worry about understanding them. Just keep them in the back of >>> your head. The first is Box<T> and the next is Rc<T>. There is >>> another one called Arc<T> for data to be shared by threads. Okay.. >>> >>> Also, a quick word on ownership. Everything is owned. What being >>> owned is that everything has a home. Some types are Copy which means >>> when you assign them somewhere else they are copied byte for byte. >>> Your native primitives like integers are copyable. The problem you >>> will encounter is when you work with non-copyable types which are >>> abundant. At first you might want to curse the fact that a type is >>> not copyable but it is a very powerful feature not a hindrance. >>> >>> If a type is not copyable and you assign it or pass it into a >>> function by value (sort of speak) you will cause a _move _to happen. >>> A move is part of the ownership system. Think of moving an argument >>> into a function as the function sort of consumes the argument. It >>> leaves it's original home and moves into the function. The function >>> now owns the argument. Also keep in mind that the function can move >>> the type back out through the return value and you could place it >>> back in it's original home. >>> >>> Okay, so now you will run into the situation where you want to have >>> an instance of a type stored in more than one place? Well, you have >>> two options. If the type supports Clone you can call the clone >>> method and produce a duplicate. The exact way clone works is very >>> specific to the type. It might create a completely separate type or >>> the two might still be linked. Do not worry at the moment as this >>> will become evident as you learn Rust. >>> >>> Just keep in mind that for non-copyable types or types in which you >>> do not want a copy you can create a smart-pointer to manage them: >>> >>> let pointer = Rc::new(myothervar); >>> >>> let secondhome = pointer.clone(); >>> >>> myfunction(secondhome); >>> >>> Also to note you will find the smart-pointer clunky and you will be >>> confused as how to write libraries or make a good API for your >>> application. I would like to leave you with one more concept. You >>> will find passin Rc<MyType> around cumbersome. To remedy this you >>> can learn the pattern of making MyType wrap the Rc so the Rc is >>> internal to it. So your API will pass around MyType instead. >>> >>> Okay, sorry for such a long mail. I just hope this little tips and >>> things can help you instead of making you quit leaving a bitter >>> taste for Rust! >>> >>> On Sun, Jan 11, 2015 at 7:17 AM, Mayuresh Kathe <mayur...@kathe.in> >>> >>> wrote: >>> hello matthieu, >>> >>> thanks for responding. >>> >>> you mentioned that "rust" supports some object-oriented concepts. >>> may i know which? >>> >>> also, deviating a bit off-topic, would a decent grasp of functional >>> programming be a pre-requisite to learning "rust"? >>> >>> thanks, >>> >>> ~mayuresh >>> >>> On 2015-01-11 17:21, Matthieu Monrocq wrote: >>> Hello Mayuresh, >>> >>> The problem with your question is dual: >>> >>> - OO itself is a fairly overloaded term, and it is unclear what >>> definition you use for it: Alan Kay's original? The presence of >>> inheritance? ... >>> - Just because a language supports OO concepts does not mean that >>> it >>> ONLY supports OO concepts, many languages are multi-paradigms and >>> can >>> be used for procedural programming, object-oriented programming (in >>> a >>> loose sense given the loose definition in practice), generic >>> programming, functional programming, ... >>> >>> Rust happens to be a multi-paradigms language. It supports some, >>> but >>> not all, object-oriented concepts, but also thrives with free >>> functions and generic functions and supports functional programming >>> expressiveness (but not purity concepts). >>> >>> I would also note that I have C striving to achieve some OO >>> concepts >>> (opaque pointers for encapsulation, virtual-dispatch through >>> manually >>> written virtual-tables, ...), some even in C you cannot necessarily >>> avoid the OO paradigm, depending on the libraries you use. >>> >>> Is Rust a good language for you? Maybe! >>> >>> The only way for you to know is to give it a spin. >>> >>> Have a nice day. >>> >>> -- Matthieu >>> >>> On Sun, Jan 11, 2015 at 2:59 AM, Mayuresh Kathe <mayur...@kathe.in> >>> wrote: >>> >>> hello, >>> >>> i am an absolute newbie to rust. >>> >>> is rust an object-oriented programming language? >>> >>> i ask because i detest 'oo', and am looking for something better >>> than >>> "c". >>> >>> thanks, >>> >>> ~mayuresh >>> >> >> _______________________________________________ >> Rust-dev mailing list >> Rust-dev@mozilla.org >> https://mail.mozilla.org/listinfo/rust-dev [1] >> >> >> >> Links: >> ------ >> [1] https://mail.mozilla.org/listinfo/rust-dev >> > _______________________________________________ > Rust-dev mailing list > Rust-dev@mozilla.org > https://mail.mozilla.org/listinfo/rust-dev >
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev