Thanks for reading dataSurfer. I’ll be happy to consider any actionable suggestions you have, but I’m not sure what you’re wanting.
edit: realized after I posted this that you said “that isn’t what OOP is in Julia is about”, not “OOP isn’t what Julia is about”. I leave my response for posterity and because so many people commenting on this thread seem to be allergic to OO in general.
What is Julia about, in your view?
In the initial Julia announcement, we have this statement of purpose:
We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.
Julia is a language that’s trying to be useful for all kinds of problems, and composition and encapsulation are useful for some kinds of problems.
From the julialang.org landing page:
Julia uses multiple dispatch as a paradigm, making it easy to express many object-oriented and functional programming patterns.
While there appears to be a fair amount antipathy towards OO patterns in the Julia community (or at least towards the term “object oriented”), it does not appear to be an affliction from which the creators of the language suffer. Julia may not be “about OO” more than it’s about anything else, but it makes a conscious effort to facilitate “OO patterns”, which is what my guild is supposed to be about.
It’s a guide about using OO patterns in Julia and therefore focuses on interfaces for data structures. If you have some suggestions about how to integrate more multiple dispatch into the guide, I’d be happy to hear them. I also love multiple dispatch and use it frequently for resolving different kinds of arguments down to a base case or similar, but that seems more closely related to functional programming patterns. It’s very possible that there are other OO multiple dispatch patterns I haven’t understood very well, and I’d love to learn about them.
Which “bizarre tricks” did you have in mind?
It’s relative, I guess. It’s a lot more elegant than classical inheritance. On the other hand, behavioral sub-typing as in Go or Haskell is a lot simpler and more elegant that Julia’s implementation of abstract types, in my opinion. Hierarchies are a very confining way to structure a classification system. Luckily, we also have the trait pattern.