Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

If Rust is OO then the term is meaningless. No inheritance; dynamic dispatch only via explicit indirection (Boxed traits); methods are (therefore) just syntactic sugar for regular functions.


Lisp CLOS does not have inheritance for methods either, but is OO by definition.

Imho, OO is about polymorphism [0] and Rust provides that.

[0] http://beza1e1.tuxen.de/articles/oop.html


Common Lisp has inheritance of methods, but it does not work on a class hierarchy directly. When a generic function gets called, the applicable methods are being ordered based on the classes of the arguments - not just one argument, but possibly many. A more specific method can call the next method. In some cases this is done automatically. This is inheritance, based on the class hierarchy.

CLOS also allows the developer to implement other inheritance mechanisms, by developing his own way to combine the methods of a generic function.


Rust fails many of the other tests mentioned. As for polymorphism, is Haskell OO? If so, then I think my claim that the term is meaningless is justified.


This is the punch line. Once you have a definition of OO, which fits all languages usually considered OO, the definition also fits Haskell. :)


CLOS effectively does have inheritance for methods because for sane specializers subclass matches everywhere where it's superclass matches. One can in fact view the CLOS mechanism of specializers and effective-method composition as more flexible mechanism for inheritance than traditional implementations of OOP.


I disagree; with encapsulation, polymorphism, and composition, Rust seems OO enough to not make the term "meaningless".

At least, not according to the widely used definitions I've read of OO.


All of these things are found in Haskell as well; it's not OO by any stretch of the imagination. You're confusing "oop language" with "modern programming language".



If Rust is FP then that term is meaningless too ;-)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: