* [rust-dev] is rust an 'oopl'?
@ 2015-01-11 1:59 Mayuresh Kathe
2015-01-11 11:51 ` Matthieu Monrocq
0 siblings, 1 reply; 5+ messages in thread
From: Mayuresh Kathe @ 2015-01-11 1:59 UTC (permalink / raw)
To: rust-dev
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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [rust-dev] is rust an 'oopl'?
2015-01-11 1:59 [rust-dev] is rust an 'oopl'? Mayuresh Kathe
@ 2015-01-11 11:51 ` Matthieu Monrocq
2015-01-11 13:17 ` Mayuresh Kathe
0 siblings, 1 reply; 5+ messages in thread
From: Matthieu Monrocq @ 2015-01-11 11:51 UTC (permalink / raw)
To: Mayuresh Kathe; +Cc: rust-dev
[-- Attachment #1: Type: text/plain, Size: 1578 bytes --]
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 <mayuresh@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
>
[-- Attachment #2: Type: text/html, Size: 2306 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [rust-dev] is rust an 'oopl'?
2015-01-11 11:51 ` Matthieu Monrocq
@ 2015-01-11 13:17 ` Mayuresh Kathe
[not found] ` <CACVSexk_osW3YDH_qiBASFohVcWpgE59s34e7+7Uy7D-RDGF+A@mail.gmail.com>
0 siblings, 1 reply; 5+ messages in thread
From: Mayuresh Kathe @ 2015-01-11 13:17 UTC (permalink / raw)
To: rust-dev
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 <mayuresh@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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [rust-dev] is rust an 'oopl'?
[not found] ` <CACVSexm8kd8EnVktrukpu3PivqsWvxSEEcEFC9p2xqzFf8Ea3g@mail.gmail.com>
@ 2015-01-11 13:54 ` Mayuresh Kathe
2015-01-12 18:05 ` Matthieu Monrocq
0 siblings, 1 reply; 5+ messages in thread
From: Mayuresh Kathe @ 2015-01-11 13:54 UTC (permalink / raw)
To: rust-dev
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 <kmcg3413@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 <mayuresh@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 <mayuresh@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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [rust-dev] is rust an 'oopl'?
2015-01-11 13:54 ` Mayuresh Kathe
@ 2015-01-12 18:05 ` Matthieu Monrocq
0 siblings, 0 replies; 5+ messages in thread
From: Matthieu Monrocq @ 2015-01-12 18:05 UTC (permalink / raw)
To: Mayuresh Kathe; +Cc: rust-dev
[-- Attachment #1: Type: text/plain, Size: 8982 bytes --]
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 <mayuresh@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 <kmcg3413@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 <mayuresh@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 <mayuresh@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
>
[-- Attachment #2: Type: text/html, Size: 10717 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-01-12 18:05 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-11 1:59 [rust-dev] is rust an 'oopl'? Mayuresh Kathe
2015-01-11 11:51 ` Matthieu Monrocq
2015-01-11 13:17 ` Mayuresh Kathe
[not found] ` <CACVSexk_osW3YDH_qiBASFohVcWpgE59s34e7+7Uy7D-RDGF+A@mail.gmail.com>
[not found] ` <CACVSexm8kd8EnVktrukpu3PivqsWvxSEEcEFC9p2xqzFf8Ea3g@mail.gmail.com>
2015-01-11 13:54 ` Mayuresh Kathe
2015-01-12 18:05 ` Matthieu Monrocq
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox