由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - go也是三种paradigm混合的语言
相关主题
Python Q: function pass in struct pointer, come back with data filled不是经常有人嚷嚷要contribute开源吗?
也谈OOP跟FP之争面向数据的编程与面向对象的编程
对 (im)mutability 的误解和深度理解FP的死穴还是性能
这么说吧,fp不是否定变量,而是控制变量的范围学FP不是为了写代码, 而是为了优秀的架构.
FP更接近人的思维对scala的误解
从今天开始起,学C++!groovy 不错啊
OOP里面的Object其实是actorgolang虽然不会一统江湖,但是,干掉python ,ruby是迟早的事情
函数式语言是不是特别费系统资源?玩go还是要玩OO
相关话题的讨论汇总
话题: go话题: oo话题: fp话题: java话题: interface
进入Programming版参与讨论
1 (共1页)
p*****2
发帖数: 21240
1
感觉不同背景写出来的code风格会很不一样。
go是怎么解决这个问题的?
c*******0
发帖数: 5247
2
你举个例子吧,怎么用三种不同的paradigm写同一个go程序
p*****2
发帖数: 21240
3
比如C出身的,可能就是function,struct,pointer了。
Java出身的就是method, interface这些了。
FP出身的就是higher order function, lambda, closure这些了。
c*******0
发帖数: 5247
4
go里面function就一种,就是可以当作value的function
struct和interface看看不就明白了,method也是。
这些概念都是超直白的,加起来撑死就是两种写法,用method和不用method(纯c)。
p*****2
发帖数: 21240
5
我觉得可以写成functional的 写成declarative的 当然工作要多点
可能很少fp的人用go吧
就method来说 一般推荐是怎么玩? oop还是pp?

【在 c*******0 的大作中提到】
: go里面function就一种,就是可以当作value的function
: struct和interface看看不就明白了,method也是。
: 这些概念都是超直白的,加起来撑死就是两种写法,用method和不用method(纯c)。

c*******0
发帖数: 5247
6

就是最直白的method用法,Go不算正统oop,也就是struct包struct可以搞类似于继承
的概念而已。你必须要method才能做到interface,所以其实method更多是用来给
interface用的。
你要想看method idiomatic的用法,http库是最好的选择
http://golang.org/pkg/net/http/

【在 p*****2 的大作中提到】
: 我觉得可以写成functional的 写成declarative的 当然工作要多点
: 可能很少fp的人用go吧
: 就method来说 一般推荐是怎么玩? oop还是pp?

p*****2
发帖数: 21240
7

其实现在OOP,比如Java也不推荐用继承,大量采用interface。有了method和
interface,Go的OO功能已经很很强大了。我估计纯C的写法,可能基本会是C出身不懂
OO的人会那么搞。大部分人就像你说的一样,但是FP背景的写法又会很不一样。
不过我的第一印象是Go的method和interface的设计解决了OO的很多问题。不过
interface貌似缺失一些功能,而且比较动态化,这个会导致代码重用有一定障碍,和
代码不易读。不知道你们遇到没有。

【在 c*******0 的大作中提到】
:
: 就是最直白的method用法,Go不算正统oop,也就是struct包struct可以搞类似于继承
: 的概念而已。你必须要method才能做到interface,所以其实method更多是用来给
: interface用的。
: 你要想看method idiomatic的用法,http库是最好的选择
: http://golang.org/pkg/net/http/

f*******t
发帖数: 7549
8
如果不往FP上靠,基本上只有一种写法。
type If interface {
func Foo() (Result, error)
}
type Impl struct {
}
func (i *Impl) Foo() (Result, error) {
...
}
我刚上手时概念混乱了好久。读别人的go代码,传object参数一般写指针,但如果是接
口,就不带那个*。
例子:
func Bar(i If) {
res, err := i.Foo()
...
}
i := Impl{}
Bar(&i)
后来我才理解,由于duck typing的存在,真正继承If的不是Impl,而是*Impl。实际应
用中会用这种写法避免object的复制(go是pass by value)。
p*****2
发帖数: 21240
9

多谢大牛。
另外,method只能定义给local type,这样就不能轻松extend 其他类型了。其实效果
就是OO的封装了。(我刚看还以为能更灵活一点呢)
interface不能有default implementation吧?这样就是Java 8 之前的状态了。

【在 f*******t 的大作中提到】
: 如果不往FP上靠,基本上只有一种写法。
: type If interface {
: func Foo() (Result, error)
: }
: type Impl struct {
: }
: func (i *Impl) Foo() (Result, error) {
: ...
: }
: 我刚上手时概念混乱了好久。读别人的go代码,传object参数一般写指针,但如果是接

f*******t
发帖数: 7549
10
可以通过这种方式实现default implementation吧:
type If interface {
func Foo()
}
func DefaultFoo() {
}
type Impl struct {
}
func (i *Impl) Foo() {
DefaultFoo()
}
go的理念是尽量避免语法糖,能用一种办法替代某个语法feature就绝不加第二种可能
。这是它区别于其它语言的特色,我觉得挺好的。
相关主题
从今天开始起,学C++!不是经常有人嚷嚷要contribute开源吗?
OOP里面的Object其实是actor面向数据的编程与面向对象的编程
函数式语言是不是特别费系统资源?FP的死穴还是性能
进入Programming版参与讨论
f*******t
发帖数: 7549
11
关于灵活地extend其它类型,这点确实做不到,不能只override一部分函数,想extend
就必须全定义一遍。
但我不认为这是必须的,总有work around。
p*****2
发帖数: 21240
12

extend
刚才看了看 pass by value 挺好的。使得fp更容易。

【在 f*******t 的大作中提到】
: 关于灵活地extend其它类型,这点确实做不到,不能只override一部分函数,想extend
: 就必须全定义一遍。
: 但我不认为这是必须的,总有work around。

p*****2
发帖数: 21240
13

这个可以,只是要自定义一下。
另外interface的实现是隐式的,这个对代码可读性有多大影响呢?

【在 f*******t 的大作中提到】
: 可以通过这种方式实现default implementation吧:
: type If interface {
: func Foo()
: }
: func DefaultFoo() {
: }
: type Impl struct {
: }
: func (i *Impl) Foo() {
: DefaultFoo()

p*****2
发帖数: 21240
14

这个用anonymous field应该也行吧?
就是定义一个default implementation of interface, 然后加入其他struct as
anonymous field. 感觉这样更OO一些。其他struct也不需要显式实现interface了。

【在 f*******t 的大作中提到】
: 可以通过这种方式实现default implementation吧:
: type If interface {
: func Foo()
: }
: func DefaultFoo() {
: }
: type Impl struct {
: }
: func (i *Impl) Foo() {
: DefaultFoo()

f*******t
发帖数: 7549
15
影响非常大,因为没有好的golang IDE!
我花了很多时间配置vim,装了vim-go和YCM。但vim-go里找caller的功能完全没法使用
,只有找definition可用。像一个类实现了另一个类/接口完全看不出来。
我觉得golang写东西简单迅速,语言本身没什么让人太不爽的,最重要的是高端IDE支
持。好不容易设计成static typing了,不把ide整强大点怎么行。

【在 p*****2 的大作中提到】
:
: 这个用anonymous field应该也行吧?
: 就是定义一个default implementation of interface, 然后加入其他struct as
: anonymous field. 感觉这样更OO一些。其他struct也不需要显式实现interface了。

l**********n
发帖数: 8443
16
看了下Go,感觉很糟糕。比Node差远了
p*****2
发帖数: 21240
17

就是几种paradigm大混合
比如array, slice, map这些貌似只能写成PP的,
struct可以写成OO的,而且看上边几个go大牛的意思基本也是这么写的
风格很不统一。
fp的人进去就会开始搞fp,只是现在懂fp的还不太多。
我感觉会有两个趋势,
一个是OOP,就是struct,method,interface这些
一个是FP,就是function,array, slice, map, struct, higher order function这些
不过fp的话,go确实还是太弱了,估计fp的人不会喜欢,所以估计主要会是OO,但是里
边要混杂pp,也挺麻烦的,除非array,slice,map这些可以加method。

【在 l**********n 的大作中提到】
: 看了下Go,感觉很糟糕。比Node差远了
p*****2
发帖数: 21240
18

我看中的是Go的async能力,不然完全提不起任何兴趣。

【在 l**********n 的大作中提到】
: 看了下Go,感觉很糟糕。比Node差远了
p*****2
发帖数: 21240
19
FP的话是不是要写成Clojure那样的了?
reduce(filter(map(xs, f1)), f2), f3)
或者要extend array,slice
myarray
.map(f1)
.filter(f2)
.reduce(f3)
l**********n
发帖数: 8443
20
确实。

【在 p*****2 的大作中提到】
: FP的话是不是要写成Clojure那样的了?
: reduce(filter(map(xs, f1)), f2), f3)
: 或者要extend array,slice
: myarray
: .map(f1)
: .filter(f2)
: .reduce(f3)

相关主题
学FP不是为了写代码, 而是为了优秀的架构.golang虽然不会一统江湖,但是,干掉python ,ruby是迟早的事情
对scala的误解玩go还是要玩OO
groovy 不错啊Pivotal Drops Groovy and Grails
进入Programming版参与讨论
t**r
发帖数: 3428
21
入门容易,以后大学里第一们语言要变成go了。
过去是c 后来是java, 然后是py,先一个是go.
初看影响不大。可是python这播毕业生已经工作几年了。他们用蟒蛇的兴趣非常大,而
且熟练程度也不错,我认为也是促使蟒蛇应用多起来的因素,虽说蟒蛇其实很烂。
所以,go未来发展能不能超过蟒蛇,我起码觉得,有可能,有机会。

【在 p*****2 的大作中提到】
: FP的话是不是要写成Clojure那样的了?
: reduce(filter(map(xs, f1)), f2), f3)
: 或者要extend array,slice
: myarray
: .map(f1)
: .filter(f2)
: .reduce(f3)

p*****2
发帖数: 21240
22

go几种paradigm都不典型,不太适合做第一门语言。

【在 t**r 的大作中提到】
: 入门容易,以后大学里第一们语言要变成go了。
: 过去是c 后来是java, 然后是py,先一个是go.
: 初看影响不大。可是python这播毕业生已经工作几年了。他们用蟒蛇的兴趣非常大,而
: 且熟练程度也不错,我认为也是促使蟒蛇应用多起来的因素,虽说蟒蛇其实很烂。
: 所以,go未来发展能不能超过蟒蛇,我起码觉得,有可能,有机会。

t**r
发帖数: 3428
23
我不认为学校教授管那么多。
mit, cmu等学校的课程2,3年前就开始普及go了。

【在 p*****2 的大作中提到】
:
: go几种paradigm都不典型,不太适合做第一门语言。

c*******0
发帖数: 5247
24

interface最大的问题是当你遇到一个变量的时候你不知道他到底满足哪些interface。
标准库里面的还好说,直接查很快,用多了也就记住了。第三方库的,代码多的,读起
来要记下note才不会忘记。这个Go Oracle这套工具在解决,目前来看很promising
代码重用肯定是有障碍的啦,没有generics就是这样的。但我们后台是纯应用,我不写
库,所以除了一些简单的max,min的东西自己包装一个util,其他目前还没遇到问题。
社区有人用go generate来解决generics,但这个思路不是我的菜,所以我暂时还没有用

【在 p*****2 的大作中提到】
:
: go几种paradigm都不典型,不太适合做第一门语言。

c*******0
发帖数: 5247
25

这两者都不是Go的风格
Go的风格就是不让你map,filter,reduce。就是要让你用显式的for loop去做。
举个例子,比如你有下面一个fp代码
input.filter(flagIsTrue)
.map(getCollection)
.fold(flatten, [])
.filter(costGt50)
.map(getCost)
.fold(sum, 0)
在Go里面你是不会这么写的,你会写成
var sum float64
for _, v := range input {
if !v.Flag {
continue
}
for _, u := range v.Collection {
if (u.Cost > 50) {
sum += u.Cost
}
}
}
那这就是喜欢Go和讨厌Go的来源了。讨厌Go的人,比如FP社区来的人,会觉得第一种风
格非常high level易懂。喜欢Go的人,比如C社区来的人,会觉得第二种易懂,又易控
易调试
总之这就是个人喜欢的问题。

【在 p*****2 的大作中提到】
: FP的话是不是要写成Clojure那样的了?
: reduce(filter(map(xs, f1)), f2), f3)
: 或者要extend array,slice
: myarray
: .map(f1)
: .filter(f2)
: .reduce(f3)

c*******0
发帖数: 5247
26

那是因为他们是distributed system的课程。
CS入门课还都是Python首选。
这点上我同意京二,Go不是一门好的general编程入门语言。我一直就觉得Go是一门很
niche的语言,就是cloud service后端。不适合UI,不适合DM/ML,不适合OS。Go是一
门不能再实际的语言,完全就是G家多年C++后台开发的经验累积起来的,在校学生不可
能理解Go design的tradeoff。

【在 t**r 的大作中提到】
: 我不认为学校教授管那么多。
: mit, cmu等学校的课程2,3年前就开始普及go了。

t**r
发帖数: 3428
27
“完全就是G家多年C++后台开发的经验累积起来的”
有见解。

【在 c*******0 的大作中提到】
:
: 那是因为他们是distributed system的课程。
: CS入门课还都是Python首选。
: 这点上我同意京二,Go不是一门好的general编程入门语言。我一直就觉得Go是一门很
: niche的语言,就是cloud service后端。不适合UI,不适合DM/ML,不适合OS。Go是一
: 门不能再实际的语言,完全就是G家多年C++后台开发的经验累积起来的,在校学生不可
: 能理解Go design的tradeoff。

t**r
发帖数: 3428
28
跑题一下,
个人感觉py的oo还没有java, c++直白好学呢。

【在 c*******0 的大作中提到】
:
: 那是因为他们是distributed system的课程。
: CS入门课还都是Python首选。
: 这点上我同意京二,Go不是一门好的general编程入门语言。我一直就觉得Go是一门很
: niche的语言,就是cloud service后端。不适合UI,不适合DM/ML,不适合OS。Go是一
: 门不能再实际的语言,完全就是G家多年C++后台开发的经验累积起来的,在校学生不可
: 能理解Go design的tradeoff。

c*******0
发帖数: 5247
29

如果你的目的是要给学生做CS入门,OO不是重点。多快能把一个cs的idea转成code是重
点。
一个csv文件让学生print第三列,python(没有任何优化)是
for line in open("file"):
print line.strip().split(",")[2]
这个你让c++/Java怎么比?
所以大家都去上python了。
cs第一门课的introduction to CS,OO内容很少的。完全就是CS所有领域的入门大杂烩
,python真的是不二选择

【在 t**r 的大作中提到】
: 跑题一下,
: 个人感觉py的oo还没有java, c++直白好学呢。

p*****2
发帖数: 21240
30

普及也好。省得让OO污染学生的心灵。

【在 t**r 的大作中提到】
: 我不认为学校教授管那么多。
: mit, cmu等学校的课程2,3年前就开始普及go了。

相关主题
到底golang性能如何啊?也谈OOP跟FP之争
现在脚本程序员在进入企业和web对 (im)mutability 的误解和深度理解
Python Q: function pass in struct pointer, come back with data filled这么说吧,fp不是否定变量,而是控制变量的范围
进入Programming版参与讨论
p*****2
发帖数: 21240
31

我觉得python对三种paradigm的表述都还可以。当然我不知道是不是会教这么多了。

【在 t**r 的大作中提到】
: 跑题一下,
: 个人感觉py的oo还没有java, c++直白好学呢。

z****e
发帖数: 54598
32
跑题一下,我觉得oo才是重点
绝大多数人,尤其是男孩子,学programming,都是冲着游戏去的
教java时候,经常第一个ppt就要说
这门课学完了之后并不能保证你能写出星际一样的游戏 etc.
以免给学生过多的期望,而只要说这个programming跟gaming有关
真的是趋之若鹜,而gaming跟oo关系极大
我感觉几乎都是oo,没有太多fp等其他paradigm的生存空间
因为直接用一个object对应一个player,是最直观和容易理解的方式
当然游戏跟学术又是两回事,学术过份倾向于数学的应用
导致什么最后都是数学,数学的深浅决定了这种应用的高度和深度

【在 c*******0 的大作中提到】
:
: 如果你的目的是要给学生做CS入门,OO不是重点。多快能把一个cs的idea转成code是重
: 点。
: 一个csv文件让学生print第三列,python(没有任何优化)是
: for line in open("file"):
: print line.strip().split(",")[2]
: 这个你让c++/Java怎么比?
: 所以大家都去上python了。
: cs第一门课的introduction to CS,OO内容很少的。完全就是CS所有领域的入门大杂烩
: ,python真的是不二选择

p*****2
发帖数: 21240
33

imperative的写法,更加强调的是高性能,这也是Go一直所看中的,所以很多设计都往
这个方向靠。
不过很多时候性能不是最重要的,比如go很多领域替换python,应该更看中
productivity。declarative就更适合了。
不知道go社区有没有人这么搞的,有没有什么好的library。
我的感觉应该可以写出一套functional的library。如果没人写过,我可能去试试。我
们productivity > performance。

【在 c*******0 的大作中提到】
:
: 如果你的目的是要给学生做CS入门,OO不是重点。多快能把一个cs的idea转成code是重
: 点。
: 一个csv文件让学生print第三列,python(没有任何优化)是
: for line in open("file"):
: print line.strip().split(",")[2]
: 这个你让c++/Java怎么比?
: 所以大家都去上python了。
: cs第一门课的introduction to CS,OO内容很少的。完全就是CS所有领域的入门大杂烩
: ,python真的是不二选择

c*******0
发帖数: 5247
34

这是一个tradeoff。我的看法是Go社区的人大部分会选择往imperative的方向靠。Go对
性能还是很重视的,从编译性能到运行性能,很多case里是比productivity更加重视。
Go到现在还没有generics
就是这个原因。
没有generics,你写map/filter的库要做很多reflection的工作,必然会导致速度变慢
。我个人感觉写出来耶没人用。你要实在有兴趣,看一看Rob Pike以前写的map/filter
/reduce库
https://github.com/robpike/filter
你看看源码就明白我说的意思了。
我这几年对Go的设计理念的理解是
simplicity > performance > readability > productivity
要比productivity,Go死都比不上Python/Ruby的。当然你的程序天天多核并行除外

【在 p*****2 的大作中提到】
:
: imperative的写法,更加强调的是高性能,这也是Go一直所看中的,所以很多设计都往
: 这个方向靠。
: 不过很多时候性能不是最重要的,比如go很多领域替换python,应该更看中
: productivity。declarative就更适合了。
: 不知道go社区有没有人这么搞的,有没有什么好的library。
: 我的感觉应该可以写出一套functional的library。如果没人写过,我可能去试试。我
: 们productivity > performance。

p*****2
发帖数: 21240
35

OO也是有很多种的。比如Go的OO设计就比Java灵活了很多。JS的OO设计也很有特点。学
生如果只学Java的OO的话毕业之后编程就很死板。
其实gaming跟OO的关系也不是那么强,也看游戏的复杂程度。OO是为了大程序设计的,
一个小游戏的话PP都可以,理解起来更简单。

【在 z****e 的大作中提到】
: 跑题一下,我觉得oo才是重点
: 绝大多数人,尤其是男孩子,学programming,都是冲着游戏去的
: 教java时候,经常第一个ppt就要说
: 这门课学完了之后并不能保证你能写出星际一样的游戏 etc.
: 以免给学生过多的期望,而只要说这个programming跟gaming有关
: 真的是趋之若鹜,而gaming跟oo关系极大
: 我感觉几乎都是oo,没有太多fp等其他paradigm的生存空间
: 因为直接用一个object对应一个player,是最直观和容易理解的方式
: 当然游戏跟学术又是两回事,学术过份倾向于数学的应用
: 导致什么最后都是数学,数学的深浅决定了这种应用的高度和深度

z****e
发帖数: 54598
36
no
我感觉js的oo很垃圾
js是一个broken language
java的oo跟swift几乎一摸一样
学完了其中任何一个,切换过去几乎不用怎么转换思想
go不知道

【在 p*****2 的大作中提到】
:
: OO也是有很多种的。比如Go的OO设计就比Java灵活了很多。JS的OO设计也很有特点。学
: 生如果只学Java的OO的话毕业之后编程就很死板。
: 其实gaming跟OO的关系也不是那么强,也看游戏的复杂程度。OO是为了大程序设计的,
: 一个小游戏的话PP都可以,理解起来更简单。

z****e
发帖数: 54598
37
oo的精华就在于你什么东西都要找到一个宿主和源头
而1st class func则是破坏这个模型的主因
就像玩个游戏,陡然发现有个上帝之手在操作
那搞啥
用一个最简单的例子
一辆坦克从a地开到b地
oo认为,这是坦克自己的动力驱使它开过去的
fp认为,这个是上帝的手推过去的
游戏要是不坚持oop的话,很快就精分了
所以python,js我都不喜欢,所有的脚本都很垃圾
脚本本质是反模型的,fp的模型主要是在数学解答上
而oop的模型则主要在simulation上
p*****2
发帖数: 21240
38

OO最大的问题就是strong coupling,所以Java后来的很多feature都是解耦用的。Java
就是自己把自己捆住,又想办法把自己打开。问题是很多人学了OO以后只是学到一个形
,没有学到本质,所以编程序就把自己捆起来了。
讽刺的是大部分OO语言的特点都是强调strong coupling的features。这点go算是搞的
不错,看到了问题。

【在 z****e 的大作中提到】
: no
: 我感觉js的oo很垃圾
: js是一个broken language
: java的oo跟swift几乎一摸一样
: 学完了其中任何一个,切换过去几乎不用怎么转换思想
: go不知道

z****e
发帖数: 54598
39
再跑题一下下
除开jdk的安装部分
python和ruby的simplicity肯定不能跟groovy相比
就看vert.x就知道
groovy的代码总是最短小精悍的
超过其他任何一个脚本,包括python, js, ruby这些
groovy经常了连require,import这些都不用写
groovy除了def我不是很喜欢以外,应该用var
其他没啥挑剔的

filter

【在 c*******0 的大作中提到】
:
: 这是一个tradeoff。我的看法是Go社区的人大部分会选择往imperative的方向靠。Go对
: 性能还是很重视的,从编译性能到运行性能,很多case里是比productivity更加重视。
: Go到现在还没有generics
: 就是这个原因。
: 没有generics,你写map/filter的库要做很多reflection的工作,必然会导致速度变慢
: 。我个人感觉写出来耶没人用。你要实在有兴趣,看一看Rob Pike以前写的map/filter
: /reduce库
: https://github.com/robpike/filter
: 你看看源码就明白我说的意思了。

p*****2
发帖数: 21240
40

filter
看了一下他的实现,感觉自己用没有必要搞的那么复杂,不过我也得写写才能感受到。
现在的想法是把OO和FP在Go中结合,写出declarative的code,PP就算了,Clojure最大
的问题就是这个了。
Go中对于higher-order functions一般是如何用的?如果不强调map/reduce的话。我觉
得map, reduce是higher order function和lambda的典型应用。closure倒不是特别的
用处大。

【在 c*******0 的大作中提到】
:
: 这是一个tradeoff。我的看法是Go社区的人大部分会选择往imperative的方向靠。Go对
: 性能还是很重视的,从编译性能到运行性能,很多case里是比productivity更加重视。
: Go到现在还没有generics
: 就是这个原因。
: 没有generics,你写map/filter的库要做很多reflection的工作,必然会导致速度变慢
: 。我个人感觉写出来耶没人用。你要实在有兴趣,看一看Rob Pike以前写的map/filter
: /reduce库
: https://github.com/robpike/filter
: 你看看源码就明白我说的意思了。

相关主题
这么说吧,fp不是否定变量,而是控制变量的范围OOP里面的Object其实是actor
FP更接近人的思维函数式语言是不是特别费系统资源?
从今天开始起,学C++!不是经常有人嚷嚷要contribute开源吗?
进入Programming版参与讨论
p*****2
发帖数: 21240
41

这个我说过,OO和FP并不矛盾呀。我也认为OO本身的写法还是很方便的,比PP和FP都更
易读,而且IDE也可以有强大支持,但这个只是OO的一个方面呀。Scala就把这个方面和
FP结合起来了。

【在 z****e 的大作中提到】
: oo的精华就在于你什么东西都要找到一个宿主和源头
: 而1st class func则是破坏这个模型的主因
: 就像玩个游戏,陡然发现有个上帝之手在操作
: 那搞啥
: 用一个最简单的例子
: 一辆坦克从a地开到b地
: oo认为,这是坦克自己的动力驱使它开过去的
: fp认为,这个是上帝的手推过去的
: 游戏要是不坚持oop的话,很快就精分了
: 所以python,js我都不喜欢,所有的脚本都很垃圾

p*****2
发帖数: 21240
42

groovy functional比python,ruby支持的更好吧?

【在 z****e 的大作中提到】
: 再跑题一下下
: 除开jdk的安装部分
: python和ruby的simplicity肯定不能跟groovy相比
: 就看vert.x就知道
: groovy的代码总是最短小精悍的
: 超过其他任何一个脚本,包括python, js, ruby这些
: groovy经常了连require,import这些都不用写
: groovy除了def我不是很喜欢以外,应该用var
: 其他没啥挑剔的
:

z****e
发帖数: 54598
43
object本身就应该是一个整体
不能随意拆分,就像一个人,你把人的手和人身体拆开,会有啥后果?
1st class func的想法是好的
但是因为缺乏宿主,会导致整个模型出现非常可怕的后果
一个完整的模型不应该有外力的介入,自身应该是完备的
而1st class func则提供了一个外来介入的机会
肯定会有傻瓜进来乱用,导致整个模型崩溃
所以一旦涉及到simulation,一律oo,哪怕是c也都很少用
用c++,而且强调c++的oo部分,swift也是当纯粹的oo来搞
swift的脚本部分我几乎都不用,也有性能上的考虑
dynamic远比static难维护性能也差

Java

【在 p*****2 的大作中提到】
:
: groovy functional比python,ruby支持的更好吧?

z****e
发帖数: 54598
44
其实有这一方面之后,很多人就可以开始动手干活了
比如app的开发,当然func搞久了可以上来就动手搞big data这些
但是big data太高大上了,显得没啥搞头,绝大多数人还是app的搞法
oo很容易搞,而且也很直观,所以适合作为入门

【在 p*****2 的大作中提到】
:
: groovy functional比python,ruby支持的更好吧?

c*******0
发帖数: 5247
45

Go对于full closures和first-class functions的使用和js没什么大的区别啊。http库
里面几乎都在使用first-class function。
higher-order functions最典型的应用就是做middleware。不过目前大部分都是和
interface配合用的。
我还是建议如果要深入了解Go的idiomatic用法,一定要读一下http库的源码。Brad
Fitzpatrick的code非常清晰,对Go特性的使用也是淋漓尽致

【在 p*****2 的大作中提到】
:
: groovy functional比python,ruby支持的更好吧?

z****e
发帖数: 54598
46

对啊,groovy感觉把脚本的各种偷懒做到了极致
什么脚本说,怎么写最简单,最不繁琐,跟groovy一比
嗯,还是groovy简洁

【在 p*****2 的大作中提到】
:
: groovy functional比python,ruby支持的更好吧?

L***s
发帖数: 1148
47
py程序员换go主要考虑是static typing,说白了就是
1. 性能
2. 更好的IDE support的potential
但go终究靠底层一些,没有py这么expressive和好读

【在 p*****2 的大作中提到】
:
: groovy functional比python,ruby支持的更好吧?

z****e
发帖数: 54598
48

嗯,就是ejb2的搞法

【在 c*******0 的大作中提到】
:
: Go对于full closures和first-class functions的使用和js没什么大的区别啊。http库
: 里面几乎都在使用first-class function。
: higher-order functions最典型的应用就是做middleware。不过目前大部分都是和
: interface配合用的。
: 我还是建议如果要深入了解Go的idiomatic用法,一定要读一下http库的源码。Brad
: Fitzpatrick的code非常清晰,对Go特性的使用也是淋漓尽致

z****e
发帖数: 54598
49

跟groovy一比,你们都是渣
vert.x乃神器也
说回vert.x,现在vert.x都放弃了什么ide support了
直接在verticle里面放main函数和做测试
如果对j2ee了解的话,今天很多语言做的事
其实就是当年ejb在做的事,没啥太大区别
一样的

【在 L***s 的大作中提到】
: py程序员换go主要考虑是static typing,说白了就是
: 1. 性能
: 2. 更好的IDE support的potential
: 但go终究靠底层一些,没有py这么expressive和好读

L***s
发帖数: 1148
50
简单原始的imperative写法更容易性能优化,尤其是对于jit而言
比如pypy就提倡写原始的for loop,而不是搞高阶函数或者滥用itertools、functools
http://pypy.org/performance.html#insider-s-point-of-view
The itertools module is often “abused” in the sense that it is used for
the wrong purposes. From our point of view, itertools is great if you have
iterations over millions of items, but not for most other cases. It gives
you 3 lines in functional style that replace 10 lines of Python loops (
longer but arguably much easier to read).
The pure Python version is generally not slower even on CPython, and on PyPy
it allows the JIT to work much better – simple Python code is fast. The
same argument also applies to filter(), reduce(), and to some extend map() (
although the simple case is JITted), and to all usages of the operator
module we can think of.

filter

【在 c*******0 的大作中提到】
:
: Go对于full closures和first-class functions的使用和js没什么大的区别啊。http库
: 里面几乎都在使用first-class function。
: higher-order functions最典型的应用就是做middleware。不过目前大部分都是和
: interface配合用的。
: 我还是建议如果要深入了解Go的idiomatic用法,一定要读一下http库的源码。Brad
: Fitzpatrick的code非常清晰,对Go特性的使用也是淋漓尽致

相关主题
面向数据的编程与面向对象的编程对scala的误解
FP的死穴还是性能groovy 不错啊
学FP不是为了写代码, 而是为了优秀的架构.golang虽然不会一统江湖,但是,干掉python ,ruby是迟早的事情
进入Programming版参与讨论
p*****2
发帖数: 21240
51

数据应该封装,但是方法不一定要封装。你说的例子人的手和身体应该在一起,但是像
walk,sing,这些动词不一定要跟手,身体绑定在一起。更不要说什么getName,
getAddress了。本来物理世界,人也没有这些behaviors。

【在 z****e 的大作中提到】
: object本身就应该是一个整体
: 不能随意拆分,就像一个人,你把人的手和人身体拆开,会有啥后果?
: 1st class func的想法是好的
: 但是因为缺乏宿主,会导致整个模型出现非常可怕的后果
: 一个完整的模型不应该有外力的介入,自身应该是完备的
: 而1st class func则提供了一个外来介入的机会
: 肯定会有傻瓜进来乱用,导致整个模型崩溃
: 所以一旦涉及到simulation,一律oo,哪怕是c也都很少用
: 用c++,而且强调c++的oo部分,swift也是当纯粹的oo来搞
: swift的脚本部分我几乎都不用,也有性能上的考虑

g*******o
发帖数: 156
52
这个资料不错。也想看看能不能多用点go来代替scala

【在 c*******0 的大作中提到】
:
: Go对于full closures和first-class functions的使用和js没什么大的区别啊。http库
: 里面几乎都在使用first-class function。
: higher-order functions最典型的应用就是做middleware。不过目前大部分都是和
: interface配合用的。
: 我还是建议如果要深入了解Go的idiomatic用法,一定要读一下http库的源码。Brad
: Fitzpatrick的code非常清晰,对Go特性的使用也是淋漓尽致

z****e
发帖数: 54598
53
当然应该在一起
你sing并不代表其他东西也能够sing
你觉得是
sing(people);
好呢
还是
people.sing();
好?
前者把谓语提前,后者则非常符合主谓宾的顺序结构
set/get纯粹是为了多线程考虑
如果是public field的话,多线程很快就会出问题

【在 p*****2 的大作中提到】
:
: 数据应该封装,但是方法不一定要封装。你说的例子人的手和身体应该在一起,但是像
: walk,sing,这些动词不一定要跟手,身体绑定在一起。更不要说什么getName,
: getAddress了。本来物理世界,人也没有这些behaviors。

p*****2
发帖数: 21240
54
所以说这就是fp的优势 immutable 数据可以expose出来 多线程不会有问题
上边那个例子应该用接口来解决 而不是封装
接口才是现实世界更准确的抽象 所以fp里注重的是接口

【在 z****e 的大作中提到】
: 当然应该在一起
: 你sing并不代表其他东西也能够sing
: 你觉得是
: sing(people);
: 好呢
: 还是
: people.sing();
: 好?
: 前者把谓语提前,后者则非常符合主谓宾的顺序结构
: set/get纯粹是为了多线程考虑

z****e
发帖数: 54598
55
当然应该封装,然后通过代码实现来解决
而不是把这个问题回避掉
immutable不仅不适合建模,而且会导致内存的过度使用
以及gc的频繁触发,vert.x就不要求我搞成immutable
这让我想起韩复渠那个笑话
看到一堆人在打篮球,觉得太丢人了
说,我做主,你们一人去仓库领取一个篮球
然后每人玩一个,一堆人抢一个球实在是太穷酸了
现实中有些属性就不是immutable的

【在 p*****2 的大作中提到】
: 所以说这就是fp的优势 immutable 数据可以expose出来 多线程不会有问题
: 上边那个例子应该用接口来解决 而不是封装
: 接口才是现实世界更准确的抽象 所以fp里注重的是接口

l**********n
发帖数: 8443
56
go写起来真爽,像脚本一样。sublime做IDE,go是fp.而且异步比js强大多了,同时还是
静态类型语言。看来很有前途。

【在 z****e 的大作中提到】
: 当然应该封装,然后通过代码实现来解决
: 而不是把这个问题回避掉
: immutable不仅不适合建模,而且会导致内存的过度使用
: 以及gc的频繁触发,vert.x就不要求我搞成immutable
: 这让我想起韩复渠那个笑话
: 看到一堆人在打篮球,觉得太丢人了
: 说,我做主,你们一人去仓库领取一个篮球
: 然后每人玩一个,一堆人抢一个球实在是太穷酸了
: 现实中有些属性就不是immutable的

l**********n
发帖数: 8443
57
你不要把go当做oop就行了。就当fp好了。总而言之,不像scala,是嫁接在java上的。
写着写着,就变成oop,那叫一个难受。

【在 l**********n 的大作中提到】
: go写起来真爽,像脚本一样。sublime做IDE,go是fp.而且异步比js强大多了,同时还是
: 静态类型语言。看来很有前途。

p*****2
发帖数: 21240
58
封装就是strong coupling
现在java都在decouple

【在 z****e 的大作中提到】
: 当然应该封装,然后通过代码实现来解决
: 而不是把这个问题回避掉
: immutable不仅不适合建模,而且会导致内存的过度使用
: 以及gc的频繁触发,vert.x就不要求我搞成immutable
: 这让我想起韩复渠那个笑话
: 看到一堆人在打篮球,觉得太丢人了
: 说,我做主,你们一人去仓库领取一个篮球
: 然后每人玩一个,一堆人抢一个球实在是太穷酸了
: 现实中有些属性就不是immutable的

p*****2
发帖数: 21240
59
go不管oop应该不行
还是得oop结合fp
否则就变clojure那个样子了

【在 l**********n 的大作中提到】
: 你不要把go当做oop就行了。就当fp好了。总而言之,不像scala,是嫁接在java上的。
: 写着写着,就变成oop,那叫一个难受。

l**********n
发帖数: 8443
60
clojure就一脚本。

【在 p*****2 的大作中提到】
: go不管oop应该不行
: 还是得oop结合fp
: 否则就变clojure那个样子了

相关主题
玩go还是要玩OO现在脚本程序员在进入企业和web
Pivotal Drops Groovy and GrailsPython Q: function pass in struct pointer, come back with data filled
到底golang性能如何啊?也谈OOP跟FP之争
进入Programming版参与讨论
z****e
发帖数: 54598
61
no
封装是强行decoupling
如果不封装的话
散落在各处,反而无法decoupling
因为每一个mod都需要去不同地方拼凑

【在 p*****2 的大作中提到】
: 封装就是strong coupling
: 现在java都在decouple

p*****2
发帖数: 21240
62
我是说写起来的样子

【在 l**********n 的大作中提到】
: clojure就一脚本。
p*****2
发帖数: 21240
63
封装是data和function的强耦合
所以oop为了代码复用又搞出了继承 而加重了耦合
Java8的新feature主要是为了解耦用的 比如higher order function interface
default method

【在 z****e 的大作中提到】
: no
: 封装是强行decoupling
: 如果不封装的话
: 散落在各处,反而无法decoupling
: 因为每一个mod都需要去不同地方拼凑

z****e
发帖数: 54598
64
sublime算什么ide,你根本无法debug,看不到内存中变量的value
这对于复杂的开发来说是大忌,我经常写着写着就忘记了
然后需要打开debug模式,一步一步跟踪进去,看看到底是怎么回事
这个在app开发上显得尤为明显,建模时候最经常改动的就是各个var的值
你砍我一刀,我这里要掉血,但是突然改了某个地方,你不砍我了
为啥?不知道啊,很多种可能,可能是你的阵营归属错了
可能是ai里面有个bug,可能是你误认为我已经挂了,etc.
如果这个时候不能断点看值的话,那开发起来效率太低
需要改一点就做一遍回归测试,写死,而且启动又慢,等个几十s才跑起来
这样每次都等几十s,谁吃得消这种等待
我最近用android studio和xcode都是各种爽,没有任何意愿想回去用vi的感脚
脚本没啥意思,永远就是搬运数据,稍微复杂一点的建模就挂了
你这辈子难道就打算以写crud过活吗?

【在 l**********n 的大作中提到】
: go写起来真爽,像脚本一样。sublime做IDE,go是fp.而且异步比js强大多了,同时还是
: 静态类型语言。看来很有前途。

z****e
发帖数: 54598
65
no
大多数脚本都支持object
而且大多数脚本都是object和func的拼凑
java则偏向比较纯粹的oo
而lisp则偏向比较纯粹的func
脚本则多数介于两者之间
如果你非要认为lisp也是脚本的话
那有一点很明显不同
就是脚本一般不支持immutable
几乎所有的脚本使用的东东,都是var,而非val
在对付多线程上
java等纯粹oop会选择lock,或者说synchronised关键字
脚本选择了单线程,which is bad,very bad
fp则多数选择了immutable
当然互相之间未必冲突,但是可以明显从一些很简单的例子中看到不同

【在 l**********n 的大作中提到】
: clojure就一脚本。
z****e
发帖数: 54598
66
继承现在已经很少用了
spring等framework的出现已经解决了这种强耦合的问题
从vert.x的impl中可以明显感觉到
java的很多idea,比其他语言尤其是脚本,要领先大概2-3个generation
其他脚本多数还停留在ejb2的那个年代
来制造并定义出各种恶心的接口和配置,跟ejb本质上是一样的
npm其实就是一个war
这些迟早都要被淘汰掉,我们可以把事情做得更简单

【在 p*****2 的大作中提到】
: 封装是data和function的强耦合
: 所以oop为了代码复用又搞出了继承 而加重了耦合
: Java8的新feature主要是为了解耦用的 比如higher order function interface
: default method

z****e
发帖数: 54598
67
古德霸说他以前写过棋牌乐
你把棋牌乐在app和server上分别实现一下
很快就能感觉出来fp和script还有oop这些语言的差异了
你可以看出来为什么js不好用
clojure更糟糕,你试试就知道
我跟你说的很多其实就来自实践动手中遇到的困难
表只做web,web没啥意思,web无非一个crud而已了
甚至还包括你用ide,用过ide再也不想去用啥sublime
app才是future,而60%甚至更多的app是游戏
其实所谓游戏就是一个更高级的表现形式而已
没啥大不了的,web太简单了

【在 l**********n 的大作中提到】
: clojure就一脚本。
p*****2
发帖数: 21240
68
大牛简单谈谈这些先进的idea吧
这些是java的idea还是vert.x的?
另外我觉得最恶心的是java摒弃的东西 其他语言尤其是脚本反而拿过来炫耀
我觉得你也不反对原旨oo是强耦合的
java已经远离原旨oo了

【在 z****e 的大作中提到】
: 继承现在已经很少用了
: spring等framework的出现已经解决了这种强耦合的问题
: 从vert.x的impl中可以明显感觉到
: java的很多idea,比其他语言尤其是脚本,要领先大概2-3个generation
: 其他脚本多数还停留在ejb2的那个年代
: 来制造并定义出各种恶心的接口和配置,跟ejb本质上是一样的
: npm其实就是一个war
: 这些迟早都要被淘汰掉,我们可以把事情做得更简单

l**********n
发帖数: 8443
69
我还没找到一个好的go ide, 感觉go就得当脚本用。

【在 z****e 的大作中提到】
: sublime算什么ide,你根本无法debug,看不到内存中变量的value
: 这对于复杂的开发来说是大忌,我经常写着写着就忘记了
: 然后需要打开debug模式,一步一步跟踪进去,看看到底是怎么回事
: 这个在app开发上显得尤为明显,建模时候最经常改动的就是各个var的值
: 你砍我一刀,我这里要掉血,但是突然改了某个地方,你不砍我了
: 为啥?不知道啊,很多种可能,可能是你的阵营归属错了
: 可能是ai里面有个bug,可能是你误认为我已经挂了,etc.
: 如果这个时候不能断点看值的话,那开发起来效率太低
: 需要改一点就做一遍回归测试,写死,而且启动又慢,等个几十s才跑起来
: 这样每次都等几十s,谁吃得消这种等待

l**********n
发帖数: 8443
70
我写js, 都是test和代码一起写,所以不用debug. 异步的你怎么debug啊。

【在 l**********n 的大作中提到】
: 我还没找到一个好的go ide, 感觉go就得当脚本用。
相关主题
也谈OOP跟FP之争FP更接近人的思维
对 (im)mutability 的误解和深度理解从今天开始起,学C++!
这么说吧,fp不是否定变量,而是控制变量的范围OOP里面的Object其实是actor
进入Programming版参与讨论
z****e
发帖数: 54598
71
是这样的呀,不同的语言在不同的地方选择了不同的option
最后变成了不同的东西,以满足不同人物的需要
简单说就是oop部分是java(static+mutable),fp部分是clj(dynamic+immutable)
脚本部分是groovy(dynamic+mutable),scala部分是(static+immutable)
当然不是绝对,但是提倡时这样,很好玩啊,四个东西分开了
然后各种框架是j2ee那些,但是这里面scala最有野心
scala最好玩的就是尝试把这一切都给做了,做成一个super超集
变成java+clj+j2ee,甚至现在开始打算包括脚本了,结果很热闹
一切的争议其实都是围绕着object的存在感
object在fp中是被批判的,因为会隐藏其内部属性
所以建议都用map/list etc.
但是我不同意这种看法,我觉得object应该存在
因为diversity,把人简化成一个map/list
变成一组冷冰冰的数字和符号,那这个有些不太对
我相信从属关系才是本质,就像我们人这个皮囊包括了很多内脏一样
上帝造人的时候就是oop啊,细胞也是一个包一个
还有就是immutable,这个东西非常不适合用来描述动物,包括人
因为人总是在不停滴改变状态,本质是mutable
不能说过了几天,我飞到另外一个国家去,我就成另外一个人了
这个太抽象,变成哲学上的思考了,所以还是坚持认为是一个人就是了
如果要改变,直接改变其内存的value就好了,immutable适合来描述物体
没有生命的物体,比较适合用immutable,比如data, information
但是一切的一切,最终都要归咎于人,没有人的参与
这个系统其实是死的,而一旦人参与进来,尤其是人多多参与的话
mutable object就显得非常有必要了
所以一做游戏,fp就显得很蛋疼

【在 p*****2 的大作中提到】
: 大牛简单谈谈这些先进的idea吧
: 这些是java的idea还是vert.x的?
: 另外我觉得最恶心的是java摒弃的东西 其他语言尤其是脚本反而拿过来炫耀
: 我觉得你也不反对原旨oo是强耦合的
: java已经远离原旨oo了

z****e
发帖数: 54598
72
java - static type + mutable object
scala - static type + immutable object
groovy - dynamic type + mutable object
clojure - dynamic type + immutable object
你说说go最像哪一个,当然不绝对,尤其是后者
基本上所有语言都可以有选择地mutable,但是fp一般immutable是default
前者的话,swift和dart都是optional static/dynamic type
可以选择的type,所以swift&dart更像下一代的语言

【在 l**********n 的大作中提到】
: 我还没找到一个好的go ide, 感觉go就得当脚本用。
l**********n
发帖数: 8443
73
java有value type. 所以不是问题。

【在 z****e 的大作中提到】
: java - static type + mutable object
: scala - static type + immutable object
: groovy - dynamic type + mutable object
: clojure - dynamic type + immutable object
: 你说说go最像哪一个,当然不绝对,尤其是后者
: 基本上所有语言都可以有选择地mutable,但是fp一般immutable是default
: 前者的话,swift和dart都是optional static/dynamic type
: 可以选择的type,所以swift&dart更像下一代的语言

z****e
发帖数: 54598
74
你要是自己用reflection的话,没有什么是问题

【在 l**********n 的大作中提到】
: java有value type. 所以不是问题。
l**********n
发帖数: 8443
75
所以java是one suits all. reflection comes to your rescue

【在 z****e 的大作中提到】
: 你要是自己用reflection的话,没有什么是问题
s***o
发帖数: 2191
76
二爷又跟go纠结上了?
d****n
发帖数: 1637
77
LiteIDE已经是native golang的支持了

【在 l**********n 的大作中提到】
: 我还没找到一个好的go ide, 感觉go就得当脚本用。
N*****m
发帖数: 42603
78
intellij啊

【在 d****n 的大作中提到】
: LiteIDE已经是native golang的支持了
d****n
发帖数: 1637
79
那个是烙印写的plugin,还尼玛不支持多个gopath,抵制

【在 N*****m 的大作中提到】
: intellij啊
f*******t
发帖数: 7549
80
我试试

【在 d****n 的大作中提到】
: LiteIDE已经是native golang的支持了
相关主题
函数式语言是不是特别费系统资源?FP的死穴还是性能
不是经常有人嚷嚷要contribute开源吗?学FP不是为了写代码, 而是为了优秀的架构.
面向数据的编程与面向对象的编程对scala的误解
进入Programming版参与讨论
l**********n
发帖数: 8443
81
昨天搞了下intellij, 升级了go sdk, intellij居然throw exception了。找不到sdk了
。感觉go的命令行很强大啊。像是个脚本。

【在 N*****m 的大作中提到】
: intellij啊
d****n
发帖数: 1637
82
那个烙印好久没有更新go sdk的问题了。写个东西好多假设。烦。
我们公司烙印写的东西也那个吊味。人走了都没法维护。

【在 l**********n 的大作中提到】
: 昨天搞了下intellij, 升级了go sdk, intellij居然throw exception了。找不到sdk了
: 。感觉go的命令行很强大啊。像是个脚本。

N*****m
发帖数: 42603
83
看着不错

【在 d****n 的大作中提到】
: LiteIDE已经是native golang的支持了
d*******r
发帖数: 3299
84
那 go 最好的 IDE/Editor 到底是哪个?
https://github.com/visualfc/liteide
https://github.com/go-lang-plugin-org/go-lang-idea-plugin
Emacs + plugin
Sublime + plugin
我主要考虑精确的定义跳转(static typing 的主要优势之一)
d****n
发帖数: 1637
85
作为现代程序猿,不像浪费时间学emacs,不像等待sumlime给更好的更新支持,
当然选择liteIDE.
它不是完美的,但是是最懂golang的。
control->click go declaration
alt+arrow left key, go to last edit.
autocomplete,debug,cross compilte support. go sandbox, go test support, etc.
what else do you need?

【在 d*******r 的大作中提到】
: 那 go 最好的 IDE/Editor 到底是哪个?
: https://github.com/visualfc/liteide
: https://github.com/go-lang-plugin-org/go-lang-idea-plugin
: Emacs + plugin
: Sublime + plugin
: 我主要考虑精确的定义跳转(static typing 的主要优势之一)

p*****2
发帖数: 21240
86

我用的是liteide,感觉还成

【在 l**********n 的大作中提到】
: 我还没找到一个好的go ide, 感觉go就得当脚本用。
f*******t
发帖数: 7549
87
Intellij插件没法用,连sdk都找不到

【在 d*******r 的大作中提到】
: 那 go 最好的 IDE/Editor 到底是哪个?
: https://github.com/visualfc/liteide
: https://github.com/go-lang-plugin-org/go-lang-idea-plugin
: Emacs + plugin
: Sublime + plugin
: 我主要考虑精确的定义跳转(static typing 的主要优势之一)

d****n
发帖数: 1637
88
no wonder, made by Indian

【在 f*******t 的大作中提到】
: Intellij插件没法用,连sdk都找不到
d*******r
发帖数: 3299
89
多谢评测~~

etc.

【在 d****n 的大作中提到】
: 作为现代程序猿,不像浪费时间学emacs,不像等待sumlime给更好的更新支持,
: 当然选择liteIDE.
: 它不是完美的,但是是最懂golang的。
: control->click go declaration
: alt+arrow left key, go to last edit.
: autocomplete,debug,cross compilte support. go sandbox, go test support, etc.
: what else do you need?

h*****a
发帖数: 1718
90
所以OO也有static methods啊。而且方法也有需要封装的时候,这一点似乎不足以说OO
不好。

【在 p*****2 的大作中提到】
:
: 我用的是liteide,感觉还成

相关主题
groovy 不错啊Pivotal Drops Groovy and Grails
golang虽然不会一统江湖,但是,干掉python ,ruby是迟早的事情到底golang性能如何啊?
玩go还是要玩OO现在脚本程序员在进入企业和web
进入Programming版参与讨论
p*****2
发帖数: 21240
91
没说oo不好 oo肯定有oo的优势 但是不等于不需要fp。 两个结合才是王道。不然Java8
也按耐不住了

OO

【在 h*****a 的大作中提到】
: 所以OO也有static methods啊。而且方法也有需要封装的时候,这一点似乎不足以说OO
: 不好。

p*****2
发帖数: 21240
92

OO
有时间多聊一点。我的理解,static methods是workaround,根本原因是OO不承认
function的存在。否则static method理应是function。不知道大牛你们是如何把
static methods映射到现实世界的。
方法封装的问题是code reuse带来困难。所以OO出现了inheritance,又造就了更强的
耦合。所以更好的解决办法是用interface和function来解决。这样就可以decouple了
,而且code reuse也非常简单,现在Java明显就是这个方向发展的。当然你可以封装
methods,但是这可能不是普遍情况。

【在 h*****a 的大作中提到】
: 所以OO也有static methods啊。而且方法也有需要封装的时候,这一点似乎不足以说OO
: 不好。

z****e
发帖数: 54598
93

不映射,用spring直接干掉static
就是ejb2,ejb2很开心滴定义了一堆interface和functions,结果没人用
所以今天很多语言搞的东西都是被java证明过有问题的
spring这么古老的一个东西,居然还能在理念上横扫各个语言的eco
真的是很好笑啊,难怪vert.x那边要求加入spring和di的呼声很高
但是其他语言比如python, ruby等的作者都表示不太支持
因为其他语言没有这个东西,所以只能用比较落后的方式搞
我个人的初步想法是等vert.x3出来之后,再在vert.x上的基础之上做java的扩展
其他语言还是用ejb的方式去搞吧

【在 p*****2 的大作中提到】
:
: OO
: 有时间多聊一点。我的理解,static methods是workaround,根本原因是OO不承认
: function的存在。否则static method理应是function。不知道大牛你们是如何把
: static methods映射到现实世界的。
: 方法封装的问题是code reuse带来困难。所以OO出现了inheritance,又造就了更强的
: 耦合。所以更好的解决办法是用interface和function来解决。这样就可以decouple了
: ,而且code reuse也非常简单,现在Java明显就是这个方向发展的。当然你可以封装
: methods,但是这可能不是普遍情况。

p*****2
发帖数: 21240
94

你说的还是用framework解决语言的缺陷。并不是从纯语言角度去讨论的。

【在 z****e 的大作中提到】
:
: 不映射,用spring直接干掉static
: 就是ejb2,ejb2很开心滴定义了一堆interface和functions,结果没人用
: 所以今天很多语言搞的东西都是被java证明过有问题的
: spring这么古老的一个东西,居然还能在理念上横扫各个语言的eco
: 真的是很好笑啊,难怪vert.x那边要求加入spring和di的呼声很高
: 但是其他语言比如python, ruby等的作者都表示不太支持
: 因为其他语言没有这个东西,所以只能用比较落后的方式搞
: 我个人的初步想法是等vert.x3出来之后,再在vert.x上的基础之上做java的扩展
: 其他语言还是用ejb的方式去搞吧

z****e
发帖数: 54598
95
可以预见的是,随着接口的定义成型,这个接口的定义会越来越复杂
因为现实的复杂度是比较高的,导致很难用一些简单的接口来搞定所有问题
所以不停滴加接口,加各种函数定义,最后所有人都在这堆规则中游泳
如果这些规则是公开的标准,还凑合,如果是scope=company
下面的人很快就会造反,跳槽的会变多,因为这样等于把自身技术生命绑定到公司这艘
船上
都不是傻子,谁都会自己的前途着想,做螺丝钉没有太多人愿意
interface/protocol这些东西并不是特别好用
举个最简单的例子
比如你写了一个module,或者叫verticle/actor in vert.x/akka
是一个组件,你要plugin到这个系统中去
那么比较愚蠢的方式就是找个脚本
用container.deploy("module name");
同时当然你也需要定义好interface/protocol,让别人去impl这些interface
这种方式部署,因为这种方式要重新编译,很麻烦,不灵活
比较聪明的方式是找个config,写成

或者json
module: "module name",
这种方式部署,但是这个需要reflection支持,ejb最早就这么做
同时你当然还需要interface这些
比较合理的方式是用annotation
连配置文件都省了
你只需要在代码中标识
@Module
然后framework在启动时候自动扫描并plugin这些module就好了
这就是spring的方式,ejb现在也都做成这样了
这样做连interface都省略了,灵活度得到了最大的发挥
你要我去impl interface,好讨厌啊
其他语言比如脚本基本上还停留在最愚蠢最原始的方式上
但是限于语言性能,可能永远都无法突破这些限制
第三种目前在java eco里用得那叫一个如火如荼
但是我想来想去,至少第二种其他语言可以实现
所以等vert.x出来之后,先把所有语言给推高到第二种的高度上
第三种先照顾到java,其他可能永远都没有办法顾及到了
各个语言的发展上的差异导致的
因为有些语言,尤其是脚本不支持reflective paradigm
所以就只能用interface这种方式,而interface能想到最深入的简化就是用config了
然后基于config,各种可视化的东西就可以开始搞了
比如写一个ui tool,直接通过鼠标安装这些module酱紫
做到这一步之后,文科生就可以开始接手了,就不需要程序猿了
其实ide就是一个相对底层一点的ui tool,主要ide要照顾到太多的情况
所以还比较麻烦,但是如果只是web的话,容易很多
我觉得以后web开发搞不好就是拖控件,就像.net那样拖控件
z****e
发帖数: 54598
96

这种东西不应该由语言去完成,语言做那么多事干啥
如果通过一个lib能搞的就交给lib去做就好了

【在 p*****2 的大作中提到】
:
: 你说的还是用framework解决语言的缺陷。并不是从纯语言角度去讨论的。

g*****g
发帖数: 34805
97
OO跟FP是正交的,两者都有用是不错。解决的方案是OO加一点FP的feature,或者FP加
一点OO的feature。或者两者同时来。至于哪个最合适明显要看建模。这个世界的常识
是用牛顿物理建模的,而不是数学。这就意味着OO为主导是必然的。用数学建模更合适
的地方可以用FP。至于Scala的做法已经证明通用太复杂。

【在 p*****2 的大作中提到】
:
: 你说的还是用framework解决语言的缺陷。并不是从纯语言角度去讨论的。

p*****2
发帖数: 21240
98

big data的话,FP更适合
OO适合的是大型应用,当然OO怎么用又是另外一件事情了。各个语言的理解都不太一样
。传统的三元素争议也很大,很多DP被function和interface取代了。我看未来的趋势
就是decouple,所以封装,继承都不再重要。function和interface的比重会越来越大
。这点来看golang倒是顺应了潮流。
OO本身其实是个比较宽泛的定义。广义来说很有用,狭义来说可能会走极端。很多人做
OO就知道封装,继承和多态,这个在脚本语言中体现的很明显。

【在 g*****g 的大作中提到】
: OO跟FP是正交的,两者都有用是不错。解决的方案是OO加一点FP的feature,或者FP加
: 一点OO的feature。或者两者同时来。至于哪个最合适明显要看建模。这个世界的常识
: 是用牛顿物理建模的,而不是数学。这就意味着OO为主导是必然的。用数学建模更合适
: 的地方可以用FP。至于Scala的做法已经证明通用太复杂。

p*****2
发帖数: 21240
99

你说的是工作,我这里是纯语言的讨论。如果说抽象的话,functional combinators可
能是编程历史上抽象最好的pattern了。

【在 z****e 的大作中提到】
:
: 这种东西不应该由语言去完成,语言做那么多事干啥
: 如果通过一个lib能搞的就交给lib去做就好了

z****e
发帖数: 54598
100
对于big data来说,fp跟oop没有太大区别,简单说都不适合
最适合的是统计语言,像r一样的脚本才是最适合的
所以如何在现有基础之上建造一个r一样的引擎才是future
就像c不适合用来搞什么统计,但是c可以用来造r
类似的,工业界现在有什么,你就用什么造r engine,一样的
所以renjin这种东西大有可为

【在 p*****2 的大作中提到】
:
: 你说的是工作,我这里是纯语言的讨论。如果说抽象的话,functional combinators可
: 能是编程历史上抽象最好的pattern了。

相关主题
Python Q: function pass in struct pointer, come back with data filled这么说吧,fp不是否定变量,而是控制变量的范围
也谈OOP跟FP之争FP更接近人的思维
对 (im)mutability 的误解和深度理解从今天开始起,学C++!
进入Programming版参与讨论
z****e
发帖数: 54598
101
语言不是类库,不可能什么都让语言去实现
语言是一个平台,应该实现最基础的东西
剩下的交给类库去做
抽象没啥好的,太过于抽象的东西华而不实
比较适合忽悠,不适合解决实际问题
哲学最抽象,其次是数学,工程学是最不抽象的学科
在各个学科抽象程度上做排列的话

【在 p*****2 的大作中提到】
:
: 你说的是工作,我这里是纯语言的讨论。如果说抽象的话,functional combinators可
: 能是编程历史上抽象最好的pattern了。

p*****2
发帖数: 21240
102
语言不足有类库补也没什么意思
不然出java8干嘛
语言还是会发展的

【在 z****e 的大作中提到】
: 语言不是类库,不可能什么都让语言去实现
: 语言是一个平台,应该实现最基础的东西
: 剩下的交给类库去做
: 抽象没啥好的,太过于抽象的东西华而不实
: 比较适合忽悠,不适合解决实际问题
: 哲学最抽象,其次是数学,工程学是最不抽象的学科
: 在各个学科抽象程度上做排列的话

1 (共1页)
进入Programming版参与讨论
相关主题
玩go还是要玩OOFP更接近人的思维
Pivotal Drops Groovy and Grails从今天开始起,学C++!
到底golang性能如何啊?OOP里面的Object其实是actor
现在脚本程序员在进入企业和web函数式语言是不是特别费系统资源?
Python Q: function pass in struct pointer, come back with data filled不是经常有人嚷嚷要contribute开源吗?
也谈OOP跟FP之争面向数据的编程与面向对象的编程
对 (im)mutability 的误解和深度理解FP的死穴还是性能
这么说吧,fp不是否定变量,而是控制变量的范围学FP不是为了写代码, 而是为了优秀的架构.
相关话题的讨论汇总
话题: go话题: oo话题: fp话题: java话题: interface