- 主题:为什么GO和RUST都取消了类?
oo 是纯粹靠直觉设计出来的东西,这套东西跟学院派的 functional programming 比起来就是渣渣。
fp 很重要的一个概念就是 immutable,无数 bug 都是因为数据的变动产生的。oo 最大的问题就是,你调用一个方法,不知道数据会不会变化;传一个对象给一个函数,不知道会不会被修改。rust 解决数据被无意修改的问题的思路就是引入 ownership,这与 oo 的设计是格格不入的。
另外就是,zero-cost abstraction 在 oo 条件下很难实现,因为编译期很难确定数据有没有变化(无法保证 immutable),具体哪个函数被调用了(需要在运行期查虚函数表)。
oo 还附带着一个非常糟糕工程方面的问题:banana-monkey-jungle 问题。你只想要重用一个非常小的功能(香蕉),结果却不得不引入整个框架(丛林),因为香蕉涉及到猴子类,而猴子的方法把整个丛林都扯进来了。
【 在 threebird (飞剑仙朱亮) 的大作中提到: 】
: 难道面向对象是错的?
--
FROM 115.188.128.*
struct就是类
【 在 threebird 的大作中提到: 】
: 难道面向对象是错的?
来自 TAS-AN00
--
FROM 117.136.0.*
你的这个前半句多重否定太多。
你直接说go觉得自己是不是面向对象?
【 在 lokta 的大作中提到: 】
: go没有否认自己不是面向对象,只不过不是像java这样面向对象。
:
--
FROM 159.226.192.*
香蕉猴子问题典型的没工程经验的人写的。
有pimpl,加前置声明,在猴子这一层就断开了,怎么会牵扯到丛林?
【 在 eGust 的大作中提到: 】
:
: oo 是纯粹靠直觉设计出来的东西,这套东西跟学院派的 functional programming 比起来就是渣渣。
:
: fp 很重要的一个概念就是 immutable,无数 bug 都是因为数据的变动产生的。oo 最大的问题就是,你调用一个方法,不知道数据会不会变化;传一个对象给一个函数,不知道会不会被修改。rust 解决数据被无意修改的问题的思路就是引入 ownership,这与 oo 的设计是格格不入的。
:
--
FROM 124.64.18.*
c++的东西,要是违反直觉,就根本没法学了。不要觉得标新立异就是好。
cpp厉害之处在于不仅遵守直觉,还在语法层面实现了。所以只要你熟悉c子集,其他的东西你就凭直觉写,基本不会错。
人的直觉其实历史经验的体现。你语言设计违反直觉,那就是逼人与过去断开,谁陪你玩?
所以我觉得rust没戏,因噎废食。上攻golang,c#的地盘或许游戏。下探c和cpp基本没戏,你写驱动得时候思维和rust思维反着来,几轮蹂躏下来人家就放弃了。
c语言要是稍微加点语法糖,引入基本的类功能,摈弃虚函数,智能指针就可以玩起来了,内存管理也就轻松多了,就能在他的领域继续称王几十年。
cpp同样如此,这几年的标准我看基本都是语法糖式的更新,写起来舒服多了。
【 在 eGust 的大作中提到: 】
:
: oo 是纯粹靠直觉设计出来的东西,这套东西跟学院派的 functional programming 比起来就是渣渣。
:
: fp 很重要的一个概念就是 immutable,无数 bug 都是因为数据的变动产生的。oo 最大的问题就是,你调用一个方法,不知道数据会不会变化;传一个对象给一个函数,不知道会不会被修改。rust 解决数据被无意修改的问题的思路就是引入 ownership,这与 oo 的设计是格格不入的。
:
--
FROM 124.64.18.*
go说自己是面向对象的。但是不是java这种面向对象。
现在新出来的比较靠近底层的语言,rust,nim,go。玩的都是这个套路。
方法可以跟类型绑定,但是没必要封装到一个类里。
【 在 hemin () 的大作中提到: 】
: 你的这个前半句多重否定太多。
:
: 你直接说go觉得自己是不是面向对象?
:
--
FROM 58.42.245.*
我觉得他自己搞错了
【 在 hemin 的大作中提到: 】
: 你的这个前半句多重否定太多。
: 你直接说go觉得自己是不是面向对象?
:
: ...................
--
FROM 106.39.50.*
对于干互联网的人来说,一个对象大概就是一个服务,而对象内部显然是面向过程的。
但是你看看qt/osg/occt这类桌面,工业等领域,面向过程编程就是自杀。海量的重复对象以及数据管理,不用面向对象你用什么?
只要在专精的领域,面向对象就是最好的编程范式。
【 在 threebird 的大作中提到: 】
:
: 难道面向对象是错的?
--
FROM 124.64.18.*
golang只是没有明确支持
现在的说法是保持简洁
以后说不定会有go++,go with class
【 在 threebird 的大作中提到: 】
: 难道面向对象是错的?
: --
#发送自zSMTH@IOS
--
FROM 117.136.0.*
当初类继承这套应该就是从UI(控件)一路顺下来的思路
结果到了其他面向数据流的领域就各种水土不服然后又从fp往回找补
【 在 hyperLee (老李) 的大作中提到: 】
: 对于干互联网的人来说,一个对象大概就是一个服务,而对象内部显然是面向过程的。
: 但是你看看qt/osg/occt这类桌面,工业等领域,面向过程编程就是自杀。海量的重复对象以及数据管理,不用面向对象你用什么?
: 只要在专精的领域,面向对象就是最好的编程范式。
: ...................
--
FROM 180.169.205.*