Google 的Golang是否解决了 Paul 的 Graham 的帖子“为什么 Arc 不是特别面向对象”中提到的语言问题?
3 回答
我对此的最初感觉是“现在说还为时过早”
1)如果你有一种没有词法闭包或宏的静态类型语言,那么面向对象编程是令人兴奋的。在某种程度上,它提供了绕过这些限制的方法。(参见 Greenspun 的第十条规则。)
Go 支持函数文字(请参阅文档),如果我正确阅读此内容,您可以将函数作为参数传递,无论是在其他地方定义还是临时创建。
2)面向对象编程在大公司中很流行,因为它适合他们编写软件的方式。在大公司,软件往往由平庸的程序员组成的大型(并且经常变化)团队编写。面向对象的编程对这些程序员施加了一种纪律,以防止他们中的任何人造成太大的损害。代价是生成的代码充满了协议并且充满了重复。对于大公司来说,这并不是一个太高的价格,因为无论如何他们的软件可能会变得臃肿且充满重复。
这一点是远远主观的回答。
3)面向对象的编程产生了很多看起来像工作的东西。早在 fanfold 时代,有一种程序员只会在一个页面上放 5 到 10 行代码,前面是 20 行精心格式化的注释。面向对象的编程对这些人来说就像破解:它可以让您将所有这些脚手架直接合并到您的源代码中。Lisp 黑客可能通过将符号推入列表来处理的事情变成了整个类和方法的文件。因此,如果您想说服自己或其他人您正在做很多工作,那么它是一个很好的工具。
由于 Go 不是一种真正的面向对象语言,因此您可能可以用您喜欢的任何方式来解决问题。
4)如果一种语言本身是一个面向对象的程序,它可以被用户扩展。也许。或者,也许您可以通过提供点菜的面向对象编程的子概念来做得更好。例如,重载本质上与类无关。我们拭目以待。
Go 似乎对对象有一种有趣的方法,您无需担心/开发大型对象树。看起来语言中存在这些工具,可以以面向对象的方式构造数据,而不会将您锁定在纯面向对象的环境中。
5)面向对象的抽象巧妙地映射到某些特定类型程序的领域,如模拟和 CAD 系统。
...
保罗有一些有趣的观点,总的来说,我读过很多他的沉思。在这个问题上,我们不同意。他是一个口齿不清的疯子,一个蹩脚的程序疯子。他似乎将难以理解的程序当成伟大程序员的作品。是的,我意识到它比这更微妙,但归根结底就是这样。归根结底,您的代码要么易于使用,要么不易于使用。有些程序员,Paul 认为很棒的程序员,将能够忍受比其他人更多的废话,并且仍然能够对代码的意图做出正面或反面。这是一种技能,但肯定不是优秀程序员需要的唯一技能。
说到 Arc,它很糟糕,除非我弄错了,否则即使 Lisp 社区的人也这么认为——我的意思是即使是聪明的人也会犯错。
Again, Paul is a smart guy, but his entire approach in this particular piece is off the mark it seems.
Wait up, though, is Go really object-oriented? It seems entirely agnostic on that front. You can use OOP or FP or Imperative programming within Go. I mean, prolog-style "programming" would be a stretch, but otherwise...
In fact, I'd argue that Go resembles scala in this respect: there's some object paradigms lying around, and yet, there are also lambdas and typecasing lying around.