I hate to chime in here, but Go by the industry accepted definition - at least based on my 30+ years experience - is that Go is clearly an OOP language.
It has “instances” coupled with “behavior”. That is, given a struct instance I can call a method “on it” declared by its definition. Other OOP languages don’t require the definition and can create instance methods dynamically. This differs from a language like Assembly, C, Cobol (prior 2002), or Fortran (prior 2003). For example, C has instances but no methods. > On Jan 1, 2021, at 6:56 AM, Space A. <reexist...@gmail.com> wrote: > > > Javascript is an incredibly popular language with non-inheritance OOP. Or, > > at least, no inheritance at the type-level (so either way, invalidating > > your statement that OOP is about type-hierarchies). > This is debatable but JS is a non-OOP language. And yet if you wonder, there > is no definition of what OOP language is. Give it any, I don't mind. But it > seems to most of us it's quite clear (by major examples like C++ or Java) > until we start arguing just for arguing. > > > Repetition does not make a false statement true. Instead of copy-pasting > > yourself, it would be prudent to cite sources. For example, is there any > > text book that agrees with your definition of OOP? > What exactly you disagree on? I will copy and paste once again for your > convenience =) > Classes (like in Java) vs structs (like in Go) is about inheritance vs > composition, not about attaching fields and methods. Inheritance implies type > hierarchy, child and parent, virtual functions, abstract and final > implementations and so on so forth to keep this all of this manageable. > > You disagree on a statement that composition is not inheritance? Or that > inheritance implies type hierarchy and vise versa? Maybe you disagree with > Rob Pike who made statements quite similar to what I said regarding > composition in his quote I given above? Or just arguing for arguing? I just > don't understand your pathos here. > > > One thing that is conspicuously absent from this quote, of course, is the > > term "Object oriented programming" (or even just "Object"). FTR, if you > > quote Rob Pike, you should also be aware that he has always staunchly > > defended the stance that Go is an OOP language: > That's ridiculous. There is a question in FAQ. And answer you are aware of, > which says Go is not OOP, which Rop Pike for sure aware of as well. And his > wording in that video means not how you trying to interpret. > > > But either way, if you don't mind me asking: What exactly does any of this > > have to do with generics? > Good question, ask Alex Besogonov, because he started this arguing that Go > has classes (opponent meant he doesn't want making Go like C++/Java). > > > > > пт, 1 янв. 2021 г. в 05:16, Axel Wagner <axel.wagner...@googlemail.com > <mailto:axel.wagner...@googlemail.com>>: > On Fri, Jan 1, 2021 at 1:23 AM Space A. <reexist...@gmail.com > <mailto:reexist...@gmail.com>> wrote: > > Sorry to disappoint you (actually, no, not sorry) but OOP has nothing to do > > with inheritance. It's a common feature in object-oriented programming but > > it's not essential. > > Moreover, Go has inheritance as well (struct embedding and interface > > inheritance), making it a fairly typical example. The only significant > > difference is that Go has structural typing, instead of manually > > declaration of implemented interfaces. > > You don't disappoint me by repeating wrong statements. > > As I said, OOP (if we talk about language, not a program written in OOP > paradigm, because you can use ANY language for that) is all about > inheritance. Period. Proof - take any major OOP language and see how it's > done, what's in its heart. > > Javascript is an incredibly popular language with non-inheritance OOP. Or, at > least, no inheritance at the type-level (so either way, invalidating your > statement that OOP is about type-hierarchies). > > Secondly, and I copy-paste myself here: > Classes (like in Java) vs structs (like in Go) is about inheritance vs > composition, not about attaching fields and methods. Inheritance implies type > hierarchy, child and parent, virtual functions, abstract and final > implementations and so on so forth to keep this all of this manageable. > > Repetition does not make a false statement true. Instead of copy-pasting > yourself, it would be prudent to cite sources. For example, is there any text > book that agrees with your definition of OOP? > > If you don't understand what it means, please study a little bit (with all > respect and blabla, I also learn all the time). Because these two approaches > are different. > > Here is some small quote and link which I think can help: > > My late friend Alain Fournier once told me that he considered the lowest form > of academic work to be taxonomy. And you know what? Type hierarchies are just > taxonomy. You need to decide what piece goes in what box, every type's > parent, whether A inherits from B or B from A. Is a sortable array an array > that sorts or a sorter represented by an array? If you believe that types > address all design issues you must make that decision. > I believe that's a preposterous way to think about programming. What matters > isn't the ancestor relations between things but what they can do for you. > > That, of course, is where interfaces come into Go. But they're part of a > bigger picture, the true Go philosophy. > If C++ and Java are about type hierarchies and the taxonomy of types, Go is > about composition. > Doug McIlroy, the eventual inventor of Unix pipes, wrote in 1964 (!): > We should have some ways of coupling programs like garden hose--screw in > another segment when it becomes necessary to massage data in another way. > This is the way of IO also. > That is the way of Go also. Go takes that idea and pushes it very far. It is > a language of composition and coupling. > The obvious example is the way interfaces give us the composition of > components. It doesn't matter what that thing is, if it implements method M I > can just drop it in here. > Another important example is how concurrency gives us the composition of > independently executing computations. > And there's even an unusual (and very simple) form of type composition: > embedding. > These compositional techniques are what give Go its flavor, which is > profoundly different from the flavor of C++ or Java programs. > > One thing that is conspicuously absent from this quote, of course, is the > term "Object oriented programming" (or even just "Object"). FTR, if you quote > Rob Pike, you should also be aware that he has always staunchly defended the > stance that Go is an OOP language: > https://www.youtube.com/watch?t=750&v=rKnDgT73v8s > <https://www.youtube.com/watch?t=750&v=rKnDgT73v8s> > > But either way, if you don't mind me asking: What exactly does any of this > have to do with generics? > > > https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html > <https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html> > > > > > > чт, 31 дек. 2020 г. в 23:27, Alex Besogonov <alex.besogo...@gmail.com > <mailto:alex.besogo...@gmail.com>>: > On Wednesday, December 30, 2020 at 12:23:35 PM UTC-8 Space A. wrote: > > OOP isn't specific about how inheritance is handled (or if it is even > > supported) > Oh my... It is pure sophistic nonsense. OOP is all about inheritance. Not > just whether you have "objects" in a language spec or not. > Sorry to disappoint you (actually, no, not sorry) but OOP has nothing to do > with inheritance. It's a common feature in object-oriented programming but > it's not essential. > > Moreover, Go has inheritance as well (struct embedding and interface > inheritance), making it a fairly typical example. The only significant > difference is that Go has structural typing, instead of manually declaration > of implemented interfaces. > > > But on the topic of generics, this entire thread seems alarmist. Generics > > will open a huge door for libraries to be written that will make our lives > > easier. I'm thinking specifically about data processing and machine > > learning. A lot of devs use Python right now for this which leads to > > duplication of code across languages. Complex algorithms will be able to > > be shared without hacky type conversions wrapping every function call. > Who is "yours"? You talk about Python so just go ahead and use Python if it > serves you, convince your team that Python is better, whatever. > You know that this argument can be applied to you as well? > > среда, 30 декабря 2020 г. в 22:46:12 UTC+3, nichol...@gmail.com <>: > OOP isn't specific about how inheritance is handled (or if it is even > supported). The basic definition is objects with fields and methods, and > being able to address the itself (typically using 'this' or 'self', but Go is > unique in that you define what to call the object). It does composition > differently than most languages, but the functional needs are met. > > But on the topic of generics, this entire thread seems alarmist. Generics > will open a huge door for libraries to be written that will make our lives > easier. I'm thinking specifically about data processing and machine > learning. A lot of devs use Python right now for this which leads to > duplication of code across languages. Complex algorithms will be able to be > shared without hacky type conversions wrapping every function call. We'll be > able to use things like trees as simply as we use maps or slices. I don't > think we'll see the language turn into the grossness that is Java or C++ > because of it. > > On Wednesday, December 30, 2020 at 4:27:15 AM UTC-8 Space A. wrote: > Go doesn't have classes and is not an OOP language. > > Classes (like in Java) vs structs (like in Go) is about inheritance vs > composition, not about attaching fields and methods. Inheritance implies type > hierarchy, child and parent, virtual functions, abstract and final > implementations and so on so forth to keep this all of this manageable. > > > > вторник, 29 декабря 2020 г. в 23:27:45 UTC+3, Alex Besogonov: > Please, stop being so condescending to newcomers and non-professional > developers. Generics as uses by end-users will improve their experience, not > make it harder. > > (And what is this obsession with "classes"? Go has them - structs with > methods are classes). > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "golang-nuts" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/golang-nuts/LEEuJPOg0oo/unsubscribe > <https://groups.google.com/d/topic/golang-nuts/LEEuJPOg0oo/unsubscribe>. > To unsubscribe from this group and all its topics, send an email to > golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/7b58c437-4507-4d75-b0a2-de7b0ba8b58dn%40googlegroups.com > > <https://groups.google.com/d/msgid/golang-nuts/7b58c437-4507-4d75-b0a2-de7b0ba8b58dn%40googlegroups.com?utm_medium=email&utm_source=footer>. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CADKwOTd4%3DiPTtyBRhFW-aQFoEMd0jsVzrSUhTb2PtLyMWKxHiQ%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CADKwOTd4%3DiPTtyBRhFW-aQFoEMd0jsVzrSUhTb2PtLyMWKxHiQ%40mail.gmail.com?utm_medium=email&utm_source=footer>. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CADKwOTcd%2Bm49WKzre_qdEP-HhcqzMOnTZR%2Bbcx_aqJiBJt2deg%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CADKwOTcd%2Bm49WKzre_qdEP-HhcqzMOnTZR%2Bbcx_aqJiBJt2deg%40mail.gmail.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CB6023BD-76B0-43B1-B4FE-7CBC5EC42667%40ix.netcom.com.