avatar
FP更接近人的思维# Programming - 葵花宝典
a*u
1
【 以下文字转载自 WaterWorld 讨论区 】
发信人: wifi020 (wifi020), 信区: WaterWorld
标 题: 急问:一个OUT OF STATUS的问题
发信站: BBS 未名空间站 (Tue Feb 11 08:52:06 2014, 美东)
没有权限,只能先发在水世界,有人能帮转一下JOB HUNTING和VISA版吗?非常非常感

很急很急的才发现身份的一个问题,用CPT工作,因为家庭身体原因,九月后期在开学
前把
class drop off了,然后H1B 在10/1生效了.在class drop off 和生效期间没有工作
,但是这个时间段是不是已经out of status????
如果h1b transfer是有问题吗?
现在应该怎么做呢?
是不是应该一会问一下学校,如果他们没有及时report 给uicis, 是不是就没有问题?
因为是上课开始前drop off的,成绩单上没有记录,有问题吗?
如果真的学校也及时REPORT了,H1B TRANSFER会有什么影响吗?铁定会被拒吗?
长远看呢?
谢谢谢谢大家给我建议,马上要换工作了,才发现这个问题.
请大家不要再批评我了,当时真的没有认真考虑,HR也没问我,已经哭了一个晚上了,也
没有睡觉,啥都不能做了..
能帮我想想办法吗?
很着急很着急.谢谢大家了.
avatar
g*7
2
特长生正在走进历史。
近日,北京市教委相关负责人宣布2019年将“取消特长生招生”。这也意味着北京提前
一年实现教育部“要逐步压缩特长生招生规模,直至2020年前取消各类特长生招生”的
要求。
特长生招生在破解唯分数论,实施多元化选拔方面的确发挥过一定的作用,但在实践过
程中弊端凸显。不仅因为缺乏公开透明的招生流程,引发暗箱操作的质疑,也因为特长
生培养刺激了校外培训热,催生了“拼娃”游戏,加剧了基础教育领域的“军备竞赛”
而饱受诟病。而且,音体美等特长培养都需要家庭重金投入,由此也引发了新一轮教育
不公,对阶层流动、社会公平带来了影响。
实际上,特长生培养与招生在实践过程中也违背了素质教育的初衷。所谓的“特长”最
后沦为名校敲门砖,而不是学生的兴趣和爱好之所在。很多学生实现升学目标之后,便
把昔日培养起来的特长扔在一边。应试化、功利化的“特长”培养过程,不仅无法激发
个性与潜能,反而更像是扼杀天性。北京大学考试研究院原院长秦春华便曾批评那些简
历光鲜亮丽的学生,就像是模具打造的家具。
彻底取消特长生考试并不意外,它是近年来教育政策的延续。2014年,《国务院关于深
化考试招生制度改革的实施意见》便明确要求,减少和规范考试加分。大幅减少、严格
控制考试加分项目,2015年起取消体育、艺术等特长生加分项目。
取消特长生招生的意义不仅在于让特长培养与招生考生考试脱钩,摒弃“伪特长”“被
特长”,让兴趣爱好培养回归初衷、回归纯粹,实现个性化的全面发展。还在于它将与
正在进行的校外培训机构治理行动一起,从供需两个层面释放校外培训需求,纾解家长
的教育焦虑、缓解校外培训热,破解中小学生择校难题、优化基础教育生态。
不过,取消特长生招生要取得预期效果,还需要教育公平持续推进、优质教育资源均衡
布局作为基础。特长生培训热,根本原因在于它提供了一条升学捷径。特长生培训热的
背后其实是强烈的择校冲动,是对更高质量、更加公平的教育的普遍诉求。
取消特长生招生之后,公办中小学全面实现划片入学,民办学校招生也将被进一步纳入
规范,比如民办学校今后将与公办学校同步招生,不得考试,不得以各类竞赛、考级成
绩等作为招生依据等。但如果区域、校际差距仍然存在,不同区域、不同学校之间教育
水平仍然有“高原”“山峰”和“洼地”之分,择校冲动仍将强烈。届时,“拼娃”之
路被堵,学区房可能成为择校唯一通道,优质教育资源的获得越发成为“拼爹游戏”。
这对于广大家长来说,似乎是比特长培训更难以承受之重。
而对于各地来说,取消特长生招生,全面实施就近入学,也是对“扬峰填谷”、实现教
育公平化的巨大鞭策。
avatar
h*i
3
FP要更高层,更接近人的思维一些。IP更接近机器。
举一个手头上的例子,我正在用Clojure实现一个今年新出的文章里面的一个
clustering算法。现在发现我写的Clojure代码和文章里的假代码完全是一一对应的,
非常好懂。而原作者自己实现的的C++代码长很多倍不说,外人是完全不可能读懂的。
更奇怪的是,文章里的假代码完全是按imperative编程的写法写的,到处都是for loop
,mutation,assignment,但转成FP之后完全就是几乎行行对应,只需要把for loop变
成Clojure的map, reduce, iterate, 等等就行了。
avatar
p*2
4

loop
没错。fp比ip更高层。是ip的一种抽象。当然需要一定的智商去理解这种抽象。

【在 h*i 的大作中提到】
: FP要更高层,更接近人的思维一些。IP更接近机器。
: 举一个手头上的例子,我正在用Clojure实现一个今年新出的文章里面的一个
: clustering算法。现在发现我写的Clojure代码和文章里的假代码完全是一一对应的,
: 非常好懂。而原作者自己实现的的C++代码长很多倍不说,外人是完全不可能读懂的。
: 更奇怪的是,文章里的假代码完全是按imperative编程的写法写的,到处都是for loop
: ,mutation,assignment,但转成FP之后完全就是几乎行行对应,只需要把for loop变
: 成Clojure的map, reduce, iterate, 等等就行了。

avatar
p*2
5

loop
我正在实现一个functional golang,就是用go实现fp,不过确实代码很恶心就是了。

【在 h*i 的大作中提到】
: FP要更高层,更接近人的思维一些。IP更接近机器。
: 举一个手头上的例子,我正在用Clojure实现一个今年新出的文章里面的一个
: clustering算法。现在发现我写的Clojure代码和文章里的假代码完全是一一对应的,
: 非常好懂。而原作者自己实现的的C++代码长很多倍不说,外人是完全不可能读懂的。
: 更奇怪的是,文章里的假代码完全是按imperative编程的写法写的,到处都是for loop
: ,mutation,assignment,但转成FP之后完全就是几乎行行对应,只需要把for loop变
: 成Clojure的map, reduce, iterate, 等等就行了。

avatar
h*i
6
Admire. 有工作就是好 :-)

【在 p*****2 的大作中提到】
:
: loop
: 我正在实现一个functional golang,就是用go实现fp,不过确实代码很恶心就是了。

avatar
n*w
7
最近把一个纯 imperative 风格的400多行的c#程序用f#重写,代码减少一半多。也好
读很多。变量少很多。还实现了个 block queue 来控制并发数量 . 原来的程序没有并
发。

loop

【在 h*i 的大作中提到】
: FP要更高层,更接近人的思维一些。IP更接近机器。
: 举一个手头上的例子,我正在用Clojure实现一个今年新出的文章里面的一个
: clustering算法。现在发现我写的Clojure代码和文章里的假代码完全是一一对应的,
: 非常好懂。而原作者自己实现的的C++代码长很多倍不说,外人是完全不可能读懂的。
: 更奇怪的是,文章里的假代码完全是按imperative编程的写法写的,到处都是for loop
: ,mutation,assignment,但转成FP之后完全就是几乎行行对应,只需要把for loop变
: 成Clojure的map, reduce, iterate, 等等就行了。

avatar
g*g
8
因为只是个算法。做个系统就不一样了。数学和物理的区别。

loop

【在 h*i 的大作中提到】
: FP要更高层,更接近人的思维一些。IP更接近机器。
: 举一个手头上的例子,我正在用Clojure实现一个今年新出的文章里面的一个
: clustering算法。现在发现我写的Clojure代码和文章里的假代码完全是一一对应的,
: 非常好懂。而原作者自己实现的的C++代码长很多倍不说,外人是完全不可能读懂的。
: 更奇怪的是,文章里的假代码完全是按imperative编程的写法写的,到处都是for loop
: ,mutation,assignment,但转成FP之后完全就是几乎行行对应,只需要把for loop变
: 成Clojure的map, reduce, iterate, 等等就行了。

avatar
h*i
9
写系统的代码简单,用什么写都差不多。我用Clojure写系统的代码也一样,CRUD啥的
,都是些tedious shit,用什么写也写不出个花来,还是tedious shit。
写复杂的东西的时候就能看得出语言的区别来了。

【在 g*****g 的大作中提到】
: 因为只是个算法。做个系统就不一样了。数学和物理的区别。
:
: loop

avatar
g*e
10
牛逼

【在 p*****2 的大作中提到】
:
: loop
: 我正在实现一个functional golang,就是用go实现fp,不过确实代码很恶心就是了。

avatar
e*o
11
rust 可以搞FP, 周五就正式发布1.0了。
不过太复杂了, 尼玛有往 Haskell 发展的趋势.

【在 p*****2 的大作中提到】
:
: loop
: 我正在实现一个functional golang,就是用go实现fp,不过确实代码很恶心就是了。

avatar
p*2
12

太新的东西不可能在公司用呀。

【在 e*******o 的大作中提到】
: rust 可以搞FP, 周五就正式发布1.0了。
: 不过太复杂了, 尼玛有往 Haskell 发展的趋势.

avatar
g*g
13
因为你做的系统太简单了。有 1M 行的时候再讨论这个问题差不多。要有什么 clojure
应用到这个级别了我倒是很有兴趣读读他们的架构。

【在 h*i 的大作中提到】
: 写系统的代码简单,用什么写都差不多。我用Clojure写系统的代码也一样,CRUD啥的
: ,都是些tedious shit,用什么写也写不出个花来,还是tedious shit。
: 写复杂的东西的时候就能看得出语言的区别来了。

avatar
c*0
14

FP社区的人真是自我感觉良好。自己写的系统代码简单就觉得天下系统代码都简单。

【在 h*i 的大作中提到】
: 写系统的代码简单,用什么写都差不多。我用Clojure写系统的代码也一样,CRUD啥的
: ,都是些tedious shit,用什么写也写不出个花来,还是tedious shit。
: 写复杂的东西的时候就能看得出语言的区别来了。

avatar
c*0
15

lol,我觉得世界上还是像我们这种低智商程序员多一些,所以fp流行不起来的啦。
其实fp是世界上最牛逼的范式,就是对智商要求太高了。Haskel的目标就是“绝对不能
流行成为主流语言”,你看,就把我们这些人给抛弃了。
这么想,fp和ip程序员就能和谐生活在一起了。一边智商高,一边拿钱多。

【在 p*****2 的大作中提到】
:
: 太新的东西不可能在公司用呀。

avatar
p*2
16

fp的底层都是用ip来实现的。说fp更高层很准确。

【在 c*******0 的大作中提到】
:
: lol,我觉得世界上还是像我们这种低智商程序员多一些,所以fp流行不起来的啦。
: 其实fp是世界上最牛逼的范式,就是对智商要求太高了。Haskel的目标就是“绝对不能
: 流行成为主流语言”,你看,就把我们这些人给抛弃了。
: 这么想,fp和ip程序员就能和谐生活在一起了。一边智商高,一边拿钱多。

avatar
g*g
17
低层高层的我不介意呀,我就不同意FP更接近(大多数)人的思维而已。

【在 p*****2 的大作中提到】
:
: fp的底层都是用ip来实现的。说fp更高层很准确。

avatar
o*o
18
avatar
p*2
19

在数据处理方面,我觉得应该更接近人的思维。在表达一些算法上,ip更容易,尤其是
iterative的算法。

【在 g*****g 的大作中提到】
: 低层高层的我不介意呀,我就不同意FP更接近(大多数)人的思维而已。
avatar
e*o
20
都是训练出来的
fp 就是一个个套pattern
练的多了 就会觉得更接近自己的思维 lz 把自己当全人类了

【在 g*****g 的大作中提到】
: 低层高层的我不介意呀,我就不同意FP更接近(大多数)人的思维而已。
avatar
g*y
21
clustering 算法一般不都是iterative的EM类型的么,LZ说接近FP啊。

【在 p*****2 的大作中提到】
:
: 在数据处理方面,我觉得应该更接近人的思维。在表达一些算法上,ip更容易,尤其是
: iterative的算法。

avatar
e*o
22
数据一般是比较规整的 有模式
所以fp 的一些小pattern 可以套 不同函数组合就玩的好了
一定涉及比较杂乱的东西 纯fp就不行了

【在 p*****2 的大作中提到】
:
: 在数据处理方面,我觉得应该更接近人的思维。在表达一些算法上,ip更容易,尤其是
: iterative的算法。

avatar
p*2
23

总之各有各的优点了。

【在 e*******o 的大作中提到】
: 数据一般是比较规整的 有模式
: 所以fp 的一些小pattern 可以套 不同函数组合就玩的好了
: 一定涉及比较杂乱的东西 纯fp就不行了

avatar
e*o
24
对的
我写代码 oop 的method只是个壳 里面都是 尽可能的pure 函数

【在 p*****2 的大作中提到】
:
: 总之各有各的优点了。

avatar
p*2
25

你用什么语言?

【在 e*******o 的大作中提到】
: 对的
: 我写代码 oop 的method只是个壳 里面都是 尽可能的pure 函数

avatar
e*o
26
Perl 哈哈

【在 p*****2 的大作中提到】
:
: 你用什么语言?

avatar
n*3
27
PERL 更接近人的思维 !
because most ppl can not think clearly

【在 e*******o 的大作中提到】
: Perl 哈哈
avatar
h*i
28
修正一下:“FP更接近人的清楚的思维。”

【在 n*****3 的大作中提到】
: PERL 更接近人的思维 !
: because most ppl can not think clearly

avatar
h*i
29
我写的就是iterative的算法。在Clojure里面,这用一个iterate函数就行了。最简单
的,把每步需要变的东西放进一个map里面, iterate这个map就完了:
(take number-of-iteration
(iterate step {:alpha alpaha :beta beta ...}))
这儿step是主要干活的函数, (defn step [m] ....)

【在 p*****2 的大作中提到】
:
: 你用什么语言?

avatar
h*i
30
杂乱就说明没想清楚。

【在 e*******o 的大作中提到】
: 数据一般是比较规整的 有模式
: 所以fp 的一些小pattern 可以套 不同函数组合就玩的好了
: 一定涉及比较杂乱的东西 纯fp就不行了

avatar
b*e
31
作为一个被Perl深深的震精和折磨过的资深码农起义领袖, 我顶你.

【在 n*****3 的大作中提到】
: PERL 更接近人的思维 !
: because most ppl can not think clearly

avatar
h*i
32
作为当年用perl写过完整的社区软件的人,我其实蛮喜欢perl的,perl其实很FP.

【在 b***e 的大作中提到】
: 作为一个被Perl深深的震精和折磨过的资深码农起义领袖, 我顶你.
avatar
h*i
33
你是说1M行Java code吧?同样的系统估计用Clojure写最多十万行,更可能是几万行。
架构的话, 我说过,Clojure大的应用的架构和Java Spring架构差不多,主要是用
component(https://github.com/stuartsierra/component)来做DI. 具体可以看看
Walmart这个youtube:
https://www.youtube.com/watch?v=av9Xi6CNqq4

clojure

【在 g*****g 的大作中提到】
: 因为你做的系统太简单了。有 1M 行的时候再讨论这个问题差不多。要有什么 clojure
: 应用到这个级别了我倒是很有兴趣读读他们的架构。

avatar
h*i
34
我这个startup写的系统算是现在最红的这种big data analytics系统了,不知道这算
不算简单的系统,也不知道所谓复杂的系统又是些什么东东。
big data analytics startups选Clojure主打的我这不是第一家,更不是最后一家。
backtype, ruma这些都已经exit的公司都是,买了这些公司的Twitter, Walmart这些公
司的决策者都是很蠢的, 买些做简单系统的公司。嗯,还就是某些大公司底层打工的马
工最聪明。

【在 c*******0 的大作中提到】
:
: lol,我觉得世界上还是像我们这种低智商程序员多一些,所以fp流行不起来的啦。
: 其实fp是世界上最牛逼的范式,就是对智商要求太高了。Haskel的目标就是“绝对不能
: 流行成为主流语言”,你看,就把我们这些人给抛弃了。
: 这么想,fp和ip程序员就能和谐生活在一起了。一边智商高,一边拿钱多。

avatar
h*i
35
和我没关系。
原作者自己写的psuedo-code和FP代码对应,但和他自己实现的IP代码不对应。而且
psuedo-code是用IP风格写的,正说明他本身的高层思维其实是FP的,IP的训练只训出
了表皮的style而已。
当然你可以说这个作者也是怪物。那我没啥可说了。呵呵。 Suit yourself.

【在 e*******o 的大作中提到】
: 都是训练出来的
: fp 就是一个个套pattern
: 练的多了 就会觉得更接近自己的思维 lz 把自己当全人类了

avatar
g*g
36
So I read your link, is it just me or that you are using OO to write your
system? Did I not see encapulation, mutable, stateful there? Those ain't FP,
are they?
"
Large applications often consist of many stateful processes which must be
started and stopped in a particular order. The component model makes those
relationships explicit and declarative, instead of implicit in imperative
code.
Components provide some basic guidance for structuring a Clojure application
, with boundaries between different parts of a system. Components offer some
encapsulation, in the sense of grouping together related entities. Each
component receives references only to the things it needs, avoiding
unnecessary shared state. Instead of reaching through multiple levels of
nested maps, a component can have everything it needs at most one map lookup
away.
Instead of having mutable state (atoms, refs, etc.) scattered throughout
different namespaces, all the stateful parts of an application can be
gathered together. In some cases, using components may eliminate the need
for mutable references altogether, for example to store the "current"
connection to a resource such as a database. At the same time, having all
state reachable via a single "system" object makes it easy to reach in and
inspect any part of the application from the REPL."

【在 h*i 的大作中提到】
: 你是说1M行Java code吧?同样的系统估计用Clojure写最多十万行,更可能是几万行。
: 架构的话, 我说过,Clojure大的应用的架构和Java Spring架构差不多,主要是用
: component(https://github.com/stuartsierra/component)来做DI. 具体可以看看
: Walmart这个youtube:
: https://www.youtube.com/watch?v=av9Xi6CNqq4
:
: clojure

avatar
h*i
37
我一直就在说Clojure能做OOP,Clojure大应用的构架就是OOP啊。Clojure继承了Java
OOP好的一面(被鼓励的一面),抛弃了其他而已。问题是大的构架就那么点功能,
Clojure日常绝大多数代码都是FP的。
Clojure发展这么多年,最让整个社区吃惊的是,本来设计出来解决Stateful mutation
的STM机制很少被用到,唯一用到的就是最简单的atom,其他的复杂的mutable state的
机制,ref, agent啥的,几乎没人用。说明mutable state真的在绝大多数情况下都是
不需要的。

FP,
application
some

【在 g*****g 的大作中提到】
: So I read your link, is it just me or that you are using OO to write your
: system? Did I not see encapulation, mutable, stateful there? Those ain't FP,
: are they?
: "
: Large applications often consist of many stateful processes which must be
: started and stopped in a particular order. The component model makes those
: relationships explicit and declarative, instead of implicit in imperative
: code.
: Components provide some basic guidance for structuring a Clojure application
: , with boundaries between different parts of a system. Components offer some

avatar
p*2
38

拿个例子能证明啥?

【在 h*i 的大作中提到】
: 我写的就是iterative的算法。在Clojure里面,这用一个iterate函数就行了。最简单
: 的,把每步需要变的东西放进一个map里面, iterate这个map就完了:
: (take number-of-iteration
: (iterate step {:alpha alpaha :beta beta ...}))
: 这儿step是主要干活的函数, (defn step [m] ....)

avatar
h*i
39
对不起。我道歉。一个例子不能说明啥。删了。

【在 p*****2 的大作中提到】
:
: 拿个例子能证明啥?

avatar
w*g
40
FP搞的monad,arrow,high-order function之类的,是另一个层次上的反人类,
常人更本无法理解,更不用说reason performance。就是汇编语言恐怕也要
自愧不如。

loop

【在 h*i 的大作中提到】
: FP要更高层,更接近人的思维一些。IP更接近机器。
: 举一个手头上的例子,我正在用Clojure实现一个今年新出的文章里面的一个
: clustering算法。现在发现我写的Clojure代码和文章里的假代码完全是一一对应的,
: 非常好懂。而原作者自己实现的的C++代码长很多倍不说,外人是完全不可能读懂的。
: 更奇怪的是,文章里的假代码完全是按imperative编程的写法写的,到处都是for loop
: ,mutation,assignment,但转成FP之后完全就是几乎行行对应,只需要把for loop变
: 成Clojure的map, reduce, iterate, 等等就行了。

avatar
q*c
41
斯德哥尔摩 综合症
同学, 你需要看看大夫了。 哈哈哈

【在 h*i 的大作中提到】
: 作为当年用perl写过完整的社区软件的人,我其实蛮喜欢perl的,perl其实很FP.
avatar
g*g
42
你说这半天不就是系统架构还是得靠OOP,小模块实现可以用FP吗?就这你还好意思说
用FP写系统?

Java
mutation

【在 h*i 的大作中提到】
: 我一直就在说Clojure能做OOP,Clojure大应用的构架就是OOP啊。Clojure继承了Java
: OOP好的一面(被鼓励的一面),抛弃了其他而已。问题是大的构架就那么点功能,
: Clojure日常绝大多数代码都是FP的。
: Clojure发展这么多年,最让整个社区吃惊的是,本来设计出来解决Stateful mutation
: 的STM机制很少被用到,唯一用到的就是最简单的atom,其他的复杂的mutable state的
: 机制,ref, agent啥的,几乎没人用。说明mutable state真的在绝大多数情况下都是
: 不需要的。
:
: FP,
: application

avatar
h*i
43
是啥情况就用啥工具,要顺应自然。当年我写社区软件的时候连PHP都不存在的,用
perl CGI写社区软件难道不很正常么,要不用啥嘛?用C?

【在 q*c 的大作中提到】
: 斯德哥尔摩 综合症
: 同学, 你需要看看大夫了。 哈哈哈

avatar
h*i
44
Monad我真不懂,我只会Clojure用到的FP。Arrow是啥?是Category theory里面那个?
这个我真不敢说懂,我连《Conceptual Mathematics》这种入门书都看得很吃力,读了
一年都没读完的人,你就别笑我了。
high-order function倒是很简单。

【在 w***g 的大作中提到】
: FP搞的monad,arrow,high-order function之类的,是另一个层次上的反人类,
: 常人更本无法理解,更不用说reason performance。就是汇编语言恐怕也要
: 自愧不如。
:
: loop

avatar
h*i
45
是啊,系统绝大大部分代码都是FP的啊。OOP只是用来管很少的stateful的的事情:比
如各种数据库的链接是stateful的,web server自己的life cycle是stateful的,如此
而已。
你说的用FP写系统是啥意思嘛?没有mutable state?那你这不是自己树立个稻草人来打
么?

【在 g*****g 的大作中提到】
: 你说这半天不就是系统架构还是得靠OOP,小模块实现可以用FP吗?就这你还好意思说
: 用FP写系统?
:
: Java
: mutation

avatar
w*g
46
STM很少被用是因为太难用,不是因为mutable state不需要。
你这个mutable state不需要的claim太强了。
STM也不是只有closure才有。这东西05年左右被发明出来的时候是想取代
locking作为更高效简单的同步机制的,很多人认为是silver bullet。
当年paper里的evaluation都是拿C/C++做的,还有硬件实现。
现在看来也就是浮云。

Java
mutation

【在 h*i 的大作中提到】
: 我一直就在说Clojure能做OOP,Clojure大应用的构架就是OOP啊。Clojure继承了Java
: OOP好的一面(被鼓励的一面),抛弃了其他而已。问题是大的构架就那么点功能,
: Clojure日常绝大多数代码都是FP的。
: Clojure发展这么多年,最让整个社区吃惊的是,本来设计出来解决Stateful mutation
: 的STM机制很少被用到,唯一用到的就是最简单的atom,其他的复杂的mutable state的
: 机制,ref, agent啥的,几乎没人用。说明mutable state真的在绝大多数情况下都是
: 不需要的。
:
: FP,
: application

avatar
h*i
47
没说mutable state不需要,这不是还用atom的么, 还是需要mutable state的。
component好像就是用atom实现的。
只是大家都没想到需要的地方这么少。Rich Hickey没想到,其他的Clojure early
adopters也没想到。但Clojure应用这么几年下来,就是发现了这么一个现象。
和atom比起来,ref, agent这些的确更难用一些,但几乎没有人用。而Clojure其他难
用的,甚至都很难搞懂的东东,比如core.async, reducers, transducers这些玩意儿
,一出来就有很多人用,说明难易不是主要问题。

【在 w***g 的大作中提到】
: STM很少被用是因为太难用,不是因为mutable state不需要。
: 你这个mutable state不需要的claim太强了。
: STM也不是只有closure才有。这东西05年左右被发明出来的时候是想取代
: locking作为更高效简单的同步机制的,很多人认为是silver bullet。
: 当年paper里的evaluation都是拿C/C++做的,还有硬件实现。
: 现在看来也就是浮云。
:
: Java
: mutation

avatar
h*i
48
说明现实中没有太多用处呗。

【在 w***g 的大作中提到】
: STM很少被用是因为太难用,不是因为mutable state不需要。
: 你这个mutable state不需要的claim太强了。
: STM也不是只有closure才有。这东西05年左右被发明出来的时候是想取代
: locking作为更高效简单的同步机制的,很多人认为是silver bullet。
: 当年paper里的evaluation都是拿C/C++做的,还有硬件实现。
: 现在看来也就是浮云。
:
: Java
: mutation

avatar
p*2
49

agent挺好用吧?scala都学过去了。

【在 h*i 的大作中提到】
: 没说mutable state不需要,这不是还用atom的么, 还是需要mutable state的。
: component好像就是用atom实现的。
: 只是大家都没想到需要的地方这么少。Rich Hickey没想到,其他的Clojure early
: adopters也没想到。但Clojure应用这么几年下来,就是发现了这么一个现象。
: 和atom比起来,ref, agent这些的确更难用一些,但几乎没有人用。而Clojure其他难
: 用的,甚至都很难搞懂的东东,比如core.async, reducers, transducers这些玩意儿
: ,一出来就有很多人用,说明难易不是主要问题。

avatar
g*g
50
你整个系统是用OOP的思想来建模分块的,至于底下用什么语言实现不改变实质。
你不是喜欢说高底层吗?你的系统高层是OOP。
我老人家不是说过很多次,这年头流行Microservice,这个整个就是OOP
encapsulation精髓的延伸。你可以每个microservice都用fp,或者都用oop,甚至ip,
不会改变
架构的实质。

【在 h*i 的大作中提到】
: 是啊,系统绝大大部分代码都是FP的啊。OOP只是用来管很少的stateful的的事情:比
: 如各种数据库的链接是stateful的,web server自己的life cycle是stateful的,如此
: 而已。
: 你说的用FP写系统是啥意思嘛?没有mutable state?那你这不是自己树立个稻草人来打
: 么?

avatar
e*o
51
https://www.haskell.org/arrows/

【在 h*i 的大作中提到】
: Monad我真不懂,我只会Clojure用到的FP。Arrow是啥?是Category theory里面那个?
: 这个我真不敢说懂,我连《Conceptual Mathematics》这种入门书都看得很吃力,读了
: 一年都没读完的人,你就别笑我了。
: high-order function倒是很简单。

avatar
h*i
52
scala学了不说明就很实用啊。
agent, ref这些不是没人用,还是有人用的,比如写游戏的人用得多一些。只是用处
这么少出乎意料而已,毕竟这些是当年Clojure的selling points.

【在 p*****2 的大作中提到】
:
: agent挺好用吧?scala都学过去了。

avatar
h*i
53
从商业逻辑的角度来看高低层的话,我们用到OOP的地方都不是高层的地方,而是和底
层接触的地方,比如DB connection, Web server life cycle。这些都是系统底层实
现细节的特性,他们会决定一个系统的构架,但你不能说这些是高层。
我说的高层是商业逻辑的高层。

【在 g*****g 的大作中提到】
: 你整个系统是用OOP的思想来建模分块的,至于底下用什么语言实现不改变实质。
: 你不是喜欢说高底层吗?你的系统高层是OOP。
: 我老人家不是说过很多次,这年头流行Microservice,这个整个就是OOP
: encapsulation精髓的延伸。你可以每个microservice都用fp,或者都用oop,甚至ip,
: 不会改变
: 架构的实质。

avatar
c*o
54
这个我觉得啊, FP火就是因为 distributed/parallel processing
distributed/parallel processing本身“要求”尽量少耦合,FP的pure/no side
effect/immutable正好符合。
你无论拿啥写distributed/parallel processing都必须尽量少耦合,为啥不拿本身就
符合这个定义的FP呢?反正你c/c++/java写出来最后也是一样这种,还不如用设计来就
是这样的FP,思考起来容易些。
除了distributed/parallel processing以外,确实FP不是什么万用药。
要是整个组都能接受,fp少耦合适合大的,单一源码的项目。 不过micro service也能
做到。
avatar
g*g
55
你上来系统分析第一步就模块化,模块本身还有state,离FP就十万八千里了。这才叫
高层。模块就是你的Object,有状态,有behavior,典型的OOP。

【在 h*i 的大作中提到】
: 从商业逻辑的角度来看高低层的话,我们用到OOP的地方都不是高层的地方,而是和底
: 层接触的地方,比如DB connection, Web server life cycle。这些都是系统底层实
: 现细节的特性,他们会决定一个系统的构架,但你不能说这些是高层。
: 我说的高层是商业逻辑的高层。

avatar
h*i
56
模块有state不见得就不能FP。
想高层模块的时候难道不是首先想要有哪些模块,每个模块干什么的,它们的input,
output是什么? 这些都是What问题,而不是How的问题,这就已经是典型的FP思维了。

【在 g*****g 的大作中提到】
: 你上来系统分析第一步就模块化,模块本身还有state,离FP就十万八千里了。这才叫
: 高层。模块就是你的Object,有状态,有behavior,典型的OOP。

avatar
g*g
57
你这就死撑了。那些模块有state,调用那些模块有side effect。这还FP的话那你可以
叫OOP FP了。人的思维本来就是OOP的思维,就体现在系统建模上。至于具体模块我不
是说了吗,用IP一样可以。

【在 h*i 的大作中提到】
: 模块有state不见得就不能FP。
: 想高层模块的时候难道不是首先想要有哪些模块,每个模块干什么的,它们的input,
: output是什么? 这些都是What问题,而不是How的问题,这就已经是典型的FP思维了。

avatar
h*i
58
我从来就没有说过FP与OOP不是兼容的。OOP FP也好,FP OOP也好,叫啥我都没有意见。
一直是你和赵策在混淆视听,坚持认为OOP和FP是对立的。
OOP不一定非要和IP捆绑,我用一个immutable data structure来表示一个Object咋就
不可以了呢?

【在 g*****g 的大作中提到】
: 你这就死撑了。那些模块有state,调用那些模块有side effect。这还FP的话那你可以
: 叫OOP FP了。人的思维本来就是OOP的思维,就体现在系统建模上。至于具体模块我不
: 是说了吗,用IP一样可以。

avatar
g*g
59
我没说对立呀,我不赞同的是你明明系统架构是OOP的,你非要说是FP。side effect是
最明显的区别之一。你模块有side effect,模块之上就写不成fp。本质上就是系统拿
OOP写,个别模块拿FP写呗。

见。

【在 h*i 的大作中提到】
: 我从来就没有说过FP与OOP不是兼容的。OOP FP也好,FP OOP也好,叫啥我都没有意见。
: 一直是你和赵策在混淆视听,坚持认为OOP和FP是对立的。
: OOP不一定非要和IP捆绑,我用一个immutable data structure来表示一个Object咋就
: 不可以了呢?

avatar
h*i
60
不是个别模块,绝大部分模块。
算了,你们都没有纯用FP语言来作一个系统,我说什么你们都不信,这我没意见,但我
不喜欢你们误导小朋友,我以后是要招人的,小朋友都被你们误导了,我上哪去招人啊?

【在 g*****g 的大作中提到】
: 我没说对立呀,我不赞同的是你明明系统架构是OOP的,你非要说是FP。side effect是
: 最明显的区别之一。你模块有side effect,模块之上就写不成fp。本质上就是系统拿
: OOP写,个别模块拿FP写呗。
:
: 见。

avatar
g*g
61
得了吧,你不能拿clojure写就自动fp了。我还可以拿scala写纯OOP呢。FP的精髓就是
数据和方法分离,你这模块可都是带数据的。你不是把数据库传进去,你是模块维护数
据库,那是oop的精髓,encapsulation。

啊?

【在 h*i 的大作中提到】
: 不是个别模块,绝大部分模块。
: 算了,你们都没有纯用FP语言来作一个系统,我说什么你们都不信,这我没意见,但我
: 不喜欢你们误导小朋友,我以后是要招人的,小朋友都被你们误导了,我上哪去招人啊?

avatar
q*c
62
" 是啥情况就用啥工具"
这是一个很错误的, 但是在没经验的小孩子里面很流行的东西
有些工具, 比如 scala, 非常的复杂。 一旦用了这个工具, 就得一直维护, 而且不
时就有牛逼人要加花哨的东西进去, 让维护和扩展变的越来越麻烦。
这个工具也许在具体某个情况下提供的少许便利, 但是会在整个系统里面造成很大混
乱和维护负担。
不同的工具之间的冲突也是大问题。 比如号称 designed to be compatible 的 scala
和 java 库之间的互调, 说起来都是一把血泪。
这些东西小年轻哪里知道。
正确做法是,系统的基础越简单越单一越好,能用现有工具, 就别用新鲜玩意, 除非
新鲜玩意能带来长期的巨大回报。

【在 h*i 的大作中提到】
: 是啥情况就用啥工具,要顺应自然。当年我写社区软件的时候连PHP都不存在的,用
: perl CGI写社区软件难道不很正常么,要不用啥嘛?用C?

avatar
e*o
63
前辈啊

【在 h*i 的大作中提到】
: 是啥情况就用啥工具,要顺应自然。当年我写社区软件的时候连PHP都不存在的,用
: perl CGI写社区软件难道不很正常么,要不用啥嘛?用C?

avatar
h*i
64
在我看来,FP与IP语言的主要区别就是immutable data。如果缺省数据结构是
immutable的, 那就是FP,否则就是IP。所以Scala在我看来不是一个FP语言,不用拿来
给我说事。
用Clojure,想要不FP也可以,可以一切用var, atom, ref, agent, transcient, etc
,但现实项目中就没有人是这么写的。某些Clojure初学者倒是想这么写来着,但很快
就发现这是不可能的,太痛苦了。所以Clojure的真实世界的项目都是FP的。
要不你在github上找个非FP的Clojure项目来?

【在 g*****g 的大作中提到】
: 得了吧,你不能拿clojure写就自动fp了。我还可以拿scala写纯OOP呢。FP的精髓就是
: 数据和方法分离,你这模块可都是带数据的。你不是把数据库传进去,你是模块维护数
: 据库,那是oop的精髓,encapsulation。
:
: 啊?

avatar
h*i
65
这不是变相骂我老么?人是有点老,思想还是很新的哦。

【在 e*******o 的大作中提到】
: 前辈啊
avatar
h*i
66
我个人是不会让人用Scala的,我喜欢简单有效的东西。
但都不存在的东西,不能强求。比如我写社区软件的年代,PHP是不存在的,用perl其
实是很好的选择,简单,库也多啊,要啥有啥。

报。

【在 q*c 的大作中提到】
: " 是啥情况就用啥工具"
: 这是一个很错误的, 但是在没经验的小孩子里面很流行的东西
: 有些工具, 比如 scala, 非常的复杂。 一旦用了这个工具, 就得一直维护, 而且不
: 时就有牛逼人要加花哨的东西进去, 让维护和扩展变的越来越麻烦。
: 这个工具也许在具体某个情况下提供的少许便利, 但是会在整个系统里面造成很大混
: 乱和维护负担。
: 不同的工具之间的冲突也是大问题。 比如号称 designed to be compatible 的 scala
: 和 java 库之间的互调, 说起来都是一把血泪。
: 这些东西小年轻哪里知道。
: 正确做法是,系统的基础越简单越单一越好,能用现有工具, 就别用新鲜玩意, 除非

avatar
w*g
67
scala的container库by default是immutable的。
只不过immutable的东西大部分情况效率都很低,就是写FP的人一上实战也会
改mutable的版本。

etc

【在 h*i 的大作中提到】
: 在我看来,FP与IP语言的主要区别就是immutable data。如果缺省数据结构是
: immutable的, 那就是FP,否则就是IP。所以Scala在我看来不是一个FP语言,不用拿来
: 给我说事。
: 用Clojure,想要不FP也可以,可以一切用var, atom, ref, agent, transcient, etc
: ,但现实项目中就没有人是这么写的。某些Clojure初学者倒是想这么写来着,但很快
: 就发现这是不可能的,太痛苦了。所以Clojure的真实世界的项目都是FP的。
: 要不你在github上找个非FP的Clojure项目来?

avatar
h*i
68
啥叫上实战?那么多公司用Clojure的都不是实战?
我这startup全是用的Clojure immutable DS, 上线test的时候CEO高兴坏了,咋这么快
啊,以前在大公司的时候一个team用Java写的类似的东东慢得不好意思给人demo。我说
“那你要看是谁写的啊”。
我说大部分低效率都是incompetence造成的,拉不出屎不能怪马桶。immutable DS是有
overhead, 但和incompetence比起来,这个overhead可以忽略不计。

【在 w***g 的大作中提到】
: scala的container库by default是immutable的。
: 只不过immutable的东西大部分情况效率都很低,就是写FP的人一上实战也会
: 改mutable的版本。
:
: etc

avatar
q*c
69
大部分低效率不是 incompetence. 是 politics and/or infrastructure
你这提 closure 就快 java 就慢, 显得毫无真实经验。大多数情况下语言本身影响不大
你这小 startup 和大公司无数的 process, reviewer, blah blah 有啥可比性?

【在 h*i 的大作中提到】
: 啥叫上实战?那么多公司用Clojure的都不是实战?
: 我这startup全是用的Clojure immutable DS, 上线test的时候CEO高兴坏了,咋这么快
: 啊,以前在大公司的时候一个team用Java写的类似的东东慢得不好意思给人demo。我说
: “那你要看是谁写的啊”。
: 我说大部分低效率都是incompetence造成的,拉不出屎不能怪马桶。immutable DS是有
: overhead, 但和incompetence比起来,这个overhead可以忽略不计。

avatar
g*g
70
要谈效率高低还是拿业界著名例子综合看,自身经历往往是误导盲人摸象。clojure拿
出来跟Java比提鞋都不配,说clojure效率就高,java效率就低太扯淡了。

不大

【在 q*c 的大作中提到】
: 大部分低效率不是 incompetence. 是 politics and/or infrastructure
: 你这提 closure 就快 java 就慢, 显得毫无真实经验。大多数情况下语言本身影响不大
: 你这小 startup 和大公司无数的 process, reviewer, blah blah 有啥可比性?

avatar
h*i
71
You made my point.
一个公司被"politics and/or infrastructure"搞得项目作得很烂,那不是
incompetence是什么?
It is what it is. Incompetence. 如果大公司不是incompetent, 我们作starups还有
活路么?Thankfully, they are.

不大

【在 q*c 的大作中提到】
: 大部分低效率不是 incompetence. 是 politics and/or infrastructure
: 你这提 closure 就快 java 就慢, 显得毫无真实经验。大多数情况下语言本身影响不大
: 你这小 startup 和大公司无数的 process, reviewer, blah blah 有啥可比性?

avatar
h*i
72
It's about people, not about languages.

【在 g*****g 的大作中提到】
: 要谈效率高低还是拿业界著名例子综合看,自身经历往往是误导盲人摸象。clojure拿
: 出来跟Java比提鞋都不配,说clojure效率就高,java效率就低太扯淡了。
:
: 不大

avatar
p*2
73

etc
我觉得你对FP的理解还不够。

【在 h*i 的大作中提到】
: 在我看来,FP与IP语言的主要区别就是immutable data。如果缺省数据结构是
: immutable的, 那就是FP,否则就是IP。所以Scala在我看来不是一个FP语言,不用拿来
: 给我说事。
: 用Clojure,想要不FP也可以,可以一切用var, atom, ref, agent, transcient, etc
: ,但现实项目中就没有人是这么写的。某些Clojure初学者倒是想这么写来着,但很快
: 就发现这是不可能的,太痛苦了。所以Clojure的真实世界的项目都是FP的。
: 要不你在github上找个非FP的Clojure项目来?

avatar
h*i
74
粗粗看上去有点像Clojure里面的transducer,可能transducer是Arrows的一种特例?
比较高深哦,等我退休了来研究吧。category theory, quantum computing, 还有啥
geometric algebra, 都是高大上的,我研究了一下没有入门,决定放入我的退休研究项
目单的东东。呵呵。

【在 e*******o 的大作中提到】
: https://www.haskell.org/arrows/
avatar
h*i
75
很可能吧。
我对计算机科学是完全采取庸俗的实用主义态度的,本人对CS没有任何的高大上的企望
, 和你们科班出身的观点不同是很自然的。
不过欢迎你们来教育我,我都中年了还学了FP,还用来换饭,可见我还是很好学的。

【在 p*****2 的大作中提到】
:
: etc
: 我觉得你对FP的理解还不够。

avatar
q*c
76
你太简单化了, 很多时候是人性的必然, 并非你就 competent, 只是你的规模面对的
问题不一样。
你不能说老鼠就比 大象 competent. 面对的问题不一样, 问题的优先级不同罢了。
你这种简单思维习惯也是左派的最爱 :-)

【在 h*i 的大作中提到】
: You made my point.
: 一个公司被"politics and/or infrastructure"搞得项目作得很烂,那不是
: incompetence是什么?
: It is what it is. Incompetence. 如果大公司不是incompetent, 我们作starups还有
: 活路么?Thankfully, they are.
:
: 不大

avatar
h*i
77
大公司里面competent的人还是有的,但公司整体上是incompetent,这也是事实,我从
大公司里面出来作的,这个很清楚。
我自己的公司如果作大了,必然也会incompetent, 我也很清楚这个,不过到那时我都
退休了,可以去研究啥Arrows之类的高大上问题。

【在 q*c 的大作中提到】
: 你太简单化了, 很多时候是人性的必然, 并非你就 competent, 只是你的规模面对的
: 问题不一样。
: 你不能说老鼠就比 大象 competent. 面对的问题不一样, 问题的优先级不同罢了。
: 你这种简单思维习惯也是左派的最爱 :-)

avatar
p*2
78
我觉得fp最有用的是higher order function 其次是monad 也是对ip影响最大的
immutability好坏参半

【在 h*i 的大作中提到】
: 很可能吧。
: 我对计算机科学是完全采取庸俗的实用主义态度的,本人对CS没有任何的高大上的企望
: , 和你们科班出身的观点不同是很自然的。
: 不过欢迎你们来教育我,我都中年了还学了FP,还用来换饭,可见我还是很好学的。

avatar
h*i
79
我不懂Monad, 看过几次,还没搞明白什么意思。我同意higher order function很重要
,也许是在计算机理论上是FP最重要的特性。
但没有immutability, FP是不能被enforced。 我的一个“名言”是“You can always
count on people's stupidity, but you can never count on people's smartness"
. (Copyright by hci, all rights reserved, do not quote。 Proof that I can
never be a liberal)
所以在我看来, immutability起的作用更多是enforcement,就和取消goto起的作用类
似,也许在理论上不是最重要的,但在社会实践上是最重要的。
而我是个庸俗的实用主义者,所以我认为immutability是FP最重要的特征。

【在 p*****2 的大作中提到】
: 我觉得fp最有用的是higher order function 其次是monad 也是对ip影响最大的
: immutability好坏参半

avatar
p*2
80

always
smartness"
immutability对性能影响很大。

【在 h*i 的大作中提到】
: 我不懂Monad, 看过几次,还没搞明白什么意思。我同意higher order function很重要
: ,也许是在计算机理论上是FP最重要的特性。
: 但没有immutability, FP是不能被enforced。 我的一个“名言”是“You can always
: count on people's stupidity, but you can never count on people's smartness"
: . (Copyright by hci, all rights reserved, do not quote。 Proof that I can
: never be a liberal)
: 所以在我看来, immutability起的作用更多是enforcement,就和取消goto起的作用类
: 似,也许在理论上不是最重要的,但在社会实践上是最重要的。
: 而我是个庸俗的实用主义者,所以我认为immutability是FP最重要的特征。

avatar
h*i
81
还是要实践出真知的。
immutability对性能影响没有一般人想象的那么大。我一开始作这个startup的时候,
很多东西都是写了Java和Clojure两个版本来比较性能的,结果发现Clojure的不比Java
的慢,只是内存开销更大些而已。但用Clojure写,在productivity上比Java实在是强
太多了,后来我就完全用Clojure写了。
内存开销其实也还可以承受,我很多Clojure写的microserive在t2 micro跑, 1G内存足
够了。反正瓶颈是在CPU和网络,就算用其他语言写,一个t2 micro也跑不了两个
services, 何必呢。

【在 p*****2 的大作中提到】
:
: always
: smartness"
: immutability对性能影响很大。

avatar
p*2
82

Java
如果实现树的算法,增加,删除节点什么的,你觉得immutability好用吗?

【在 h*i 的大作中提到】
: 还是要实践出真知的。
: immutability对性能影响没有一般人想象的那么大。我一开始作这个startup的时候,
: 很多东西都是写了Java和Clojure两个版本来比较性能的,结果发现Clojure的不比Java
: 的慢,只是内存开销更大些而已。但用Clojure写,在productivity上比Java实在是强
: 太多了,后来我就完全用Clojure写了。
: 内存开销其实也还可以承受,我很多Clojure写的microserive在t2 micro跑, 1G内存足
: 够了。反正瓶颈是在CPU和网络,就算用其他语言写,一个t2 micro也跑不了两个
: services, 何必呢。

avatar
h*i
83
目前我还没有遇到什么困难。
只是增加,删除节点这种树和图算法很容易用immutable结构来实现的,Rich Hickey
did the hard work, 各种sequence function直接用,不用自己写。比如修改节点用
update-in之类的函数很容易作。有的数据结构甚至是Clojure自带的,比如我需要一个
prefix trie来match words,而Clojure自己的数据结构就是trie,所以几乎是免费的
,几行代码就搞定了,性能和我用Java写的一样快。当然,不是所有树,图的算法都容
易写,看过一个blog好像有人写Fibonacci priority heap费了很大劲。我没写过,但
我怀疑她没有真正理解那个算法,完全照翻IP算法引起的。矩阵类算法和其他Java代码
一样,底下都是用的jBLAS啥的,无非Clojure包装好了,写起来感觉和immutable code
一样。
总的说来,我觉得还是很好用的。

【在 p*****2 的大作中提到】
:
: Java
: 如果实现树的算法,增加,删除节点什么的,你觉得immutability好用吗?

avatar
p*2
84
你觉得比ip容易吗
你比较过两边的代码吗

code

【在 h*i 的大作中提到】
: 目前我还没有遇到什么困难。
: 只是增加,删除节点这种树和图算法很容易用immutable结构来实现的,Rich Hickey
: did the hard work, 各种sequence function直接用,不用自己写。比如修改节点用
: update-in之类的函数很容易作。有的数据结构甚至是Clojure自带的,比如我需要一个
: prefix trie来match words,而Clojure自己的数据结构就是trie,所以几乎是免费的
: ,几行代码就搞定了,性能和我用Java写的一样快。当然,不是所有树,图的算法都容
: 易写,看过一个blog好像有人写Fibonacci priority heap费了很大劲。我没写过,但
: 我怀疑她没有真正理解那个算法,完全照翻IP算法引起的。矩阵类算法和其他Java代码
: 一样,底下都是用的jBLAS啥的,无非Clojure包装好了,写起来感觉和immutable code
: 一样。

avatar
w*g
85
这有啥奇怪的。多少公司IPO了以后还能做出来像样的东西,不都是一个接一个地买小
公司。Google做出来了吗?还不都是买的小team。这东西跟炒股似的,1w变10w运气好
了也就是一两年的事情。1billion变10billion不可能。大公司就是拿了1billion在
炒股,10年翻一倍就超级了不起了。

【在 h*i 的大作中提到】
: You made my point.
: 一个公司被"politics and/or infrastructure"搞得项目作得很烂,那不是
: incompetence是什么?
: It is what it is. Incompetence. 如果大公司不是incompetent, 我们作starups还有
: 活路么?Thankfully, they are.
:
: 不大

avatar
w*g
86
immutable了我觉得就只能增加了。怎么删除?我也是拍脑子想的,你要有例子给我一
个。不用树,线性表的就行。比如ABCDE,要删除C,我觉得得重新构造A'B'DE (或者
ABD'E'),然后使得A和A',B和B'指向同一个东西,然后原来的AB等着GC回收。
这个开销我觉得有点太大了。而且,这个实在不能叫删除。

【在 p*****2 的大作中提到】
: 你觉得比ip容易吗
: 你比较过两边的代码吗
:
: code

avatar
c*0
87

典型的FP社区的自大在你这段话里面体现得淋漓尽致。
首先,big data analytics做得startup多如牛毛,新的公司选Scala和Java的占绝大多
数,你们当然不是第一家也不是最后一家选Clojure的,问题是你们是big data
analytics startup的典型么?标杆么?
其次,我们是在说复杂系统,不是复杂big data analytics系统。startup world里big
data analytics只是很小很小一部分,你应该把眼界放开一些,看看外面的世界是什么
样的,而不是自己的小startup做个啥就觉得算是IT业界牛逼的复杂系统了。
其三,大公司购买startup的原因有很多种,比如system acquisition,talent
acquisition,market acquisition,startup的系统简单还是复杂既不是决定性因素,
也不是唯一因素。
其四,你根本就不知道和你talk的人背景就假设所有反对你的人都是某些大公司底层打
工的码农。万一这个人也是做startup的?万一这个人不仅仅是startup早期员工,更是
founder+CTO?对业内技术趋势比你了解的多?万一这个人的startup比你的startup规模
更大更有前途?用人的背景猜测来判断他的话语是不是smart是bbs上最愚蠢的事情,因
为你所有讨论都是对人不对事了,而且随时都有可能遇到一个背景比你强的人抽你脸。
典型的FP论调,就是任何不喜欢或者不支持FP的人,都是没有用过FP或者没有"get it"
的人。只要你用过FP,一定爱上FP,一定会认为FP就是比别的都好。可悲的不仅仅是在
FP社区里面这么做,而是有的人把这种思维带到了其他需要客观判断的领域。
最后说一句,我虽然也不知道你们公司的背景,但我是几乎可以肯定的说,Google里面
随便就能找5个C++项目出来都比你们公司系统复杂。Linkedin里面随便找5个Java项目
也能比你们系统复杂。这直接就把你最初的论点弊了。

【在 h*i 的大作中提到】
: 我这个startup写的系统算是现在最红的这种big data analytics系统了,不知道这算
: 不算简单的系统,也不知道所谓复杂的系统又是些什么东东。
: big data analytics startups选Clojure主打的我这不是第一家,更不是最后一家。
: backtype, ruma这些都已经exit的公司都是,买了这些公司的Twitter, Walmart这些公
: 司的决策者都是很蠢的, 买些做简单系统的公司。嗯,还就是某些大公司底层打工的马
: 工最聪明。

avatar
p*2
88

我没有具体研究过。只是感觉这种算法fp不如ip直接清晰。做的话至少可以copy整个
tree,return一个新tree

【在 w***g 的大作中提到】
: immutable了我觉得就只能增加了。怎么删除?我也是拍脑子想的,你要有例子给我一
: 个。不用树,线性表的就行。比如ABCDE,要删除C,我觉得得重新构造A'B'DE (或者
: ABD'E'),然后使得A和A',B和B'指向同一个东西,然后原来的AB等着GC回收。
: 这个开销我觉得有点太大了。而且,这个实在不能叫删除。

avatar
w*g
89
我查了一下,要copy所有的ancester。IP的话tree一般就是用指针实现了,删除操作可
以有效得多。immutable的牛B之处是没有同步问题。当然不能纯immutable。但是
按immutable的套路做data structure,几乎可以做到lock free。C++要有个
immutable的container库就好了。

【在 p*****2 的大作中提到】
:
: 我没有具体研究过。只是感觉这种算法fp不如ip直接清晰。做的话至少可以copy整个
: tree,return一个新tree

avatar
h*i
90
当然比较过,一开始我同一个东西写两个版本的。我觉得是Clojure的代码容易写容易
读,所以我才完全转了。其实我写Java的年头比写Clojure的年头多一个数量级。不光
是代码量的问题,Clojure更容易写得正确。
主要是思维方式不同。写Java我一般是top down, 先把框架搭好,写很多注释,感觉在
写英文文章,再填内容,经常是写了几天了,还一次都没run过,特别是复杂的代码。
我觉得是因为Java是closely coupled,需要花大精力来搭框架,写完很容易觉得自己
是个architect。东西改起来很难,复杂的代码reason起来比较难。
Clojure是先写小的容易的函数,按快捷键马上测试,然后copy & paste到test里面。
搞定了一个函数,再写下一个。小函数组装成大函数,最后自然而然就完工了。改起来
不觉得有啥困难,主要是loosely coupled。写的过程很爽,感觉一直在玩puzzle游戏,
有joy的感觉,写了还想写。
还有就是容易读,别人写的clojure code很容易理解,主要是代码短而集中吧,一般要
用什么库的话直接去读代码。Java的话,要花比较多的时间来理解别人的API设计,各
种概念,不容易上手。
其他就是FP大家都提到的优势,变量少, bug比较少,容易写并发啊,等等,其实都没
那么重要。

【在 p*****2 的大作中提到】
: 你觉得比ip容易吗
: 你比较过两边的代码吗
:
: code

avatar
l*t
91
维护的时候更会发现immutable的重要性

,

【在 h*i 的大作中提到】
: 当然比较过,一开始我同一个东西写两个版本的。我觉得是Clojure的代码容易写容易
: 读,所以我才完全转了。其实我写Java的年头比写Clojure的年头多一个数量级。不光
: 是代码量的问题,Clojure更容易写得正确。
: 主要是思维方式不同。写Java我一般是top down, 先把框架搭好,写很多注释,感觉在
: 写英文文章,再填内容,经常是写了几天了,还一次都没run过,特别是复杂的代码。
: 我觉得是因为Java是closely coupled,需要花大精力来搭框架,写完很容易觉得自己
: 是个architect。东西改起来很难,复杂的代码reason起来比较难。
: Clojure是先写小的容易的函数,按快捷键马上测试,然后copy & paste到test里面。
: 搞定了一个函数,再写下一个。小函数组装成大函数,最后自然而然就完工了。改起来
: 不觉得有啥困难,主要是loosely coupled。写的过程很爽,感觉一直在玩puzzle游戏,

avatar
a*D
92
immutable真能解决大部分的软件问题? 这个我是持怀疑态度的。其实关键的是理解软
件设计思想,大部分的OOP/FP的概念也应该能用C/IP实现。
FP不会是silver bullet.

【在 l******t 的大作中提到】
: 维护的时候更会发现immutable的重要性
:
: ,

avatar
c*9
93
大公司的人喜欢把简单的事搞复杂,不知是不是为保工作。google的一个十万行3D开源
java代码,我用objc也就2,3千行就实现了。google的有好几个上千行的函数绕来绕去
就实现个简单功能。

big

【在 c*******0 的大作中提到】
:
: 典型的FP社区的自大在你这段话里面体现得淋漓尽致。
: 首先,big data analytics做得startup多如牛毛,新的公司选Scala和Java的占绝大多
: 数,你们当然不是第一家也不是最后一家选Clojure的,问题是你们是big data
: analytics startup的典型么?标杆么?
: 其次,我们是在说复杂系统,不是复杂big data analytics系统。startup world里big
: data analytics只是很小很小一部分,你应该把眼界放开一些,看看外面的世界是什么
: 样的,而不是自己的小startup做个啥就觉得算是IT业界牛逼的复杂系统了。
: 其三,大公司购买startup的原因有很多种,比如system acquisition,talent
: acquisition,market acquisition,startup的系统简单还是复杂既不是决定性因素,

avatar
h*i
94
问题是,我说这些都是用来反驳别人说的话,是别人想当然的认为用Clojure的就不是
写复杂系统的,我从来没有攻击用别的语言的人,没说过他们写的都是简单系统啥。
所以你这些话拿去反驳那些人比较好。

big

【在 c*******0 的大作中提到】
:
: 典型的FP社区的自大在你这段话里面体现得淋漓尽致。
: 首先,big data analytics做得startup多如牛毛,新的公司选Scala和Java的占绝大多
: 数,你们当然不是第一家也不是最后一家选Clojure的,问题是你们是big data
: analytics startup的典型么?标杆么?
: 其次,我们是在说复杂系统,不是复杂big data analytics系统。startup world里big
: data analytics只是很小很小一部分,你应该把眼界放开一些,看看外面的世界是什么
: 样的,而不是自己的小startup做个啥就觉得算是IT业界牛逼的复杂系统了。
: 其三,大公司购买startup的原因有很多种,比如system acquisition,talent
: acquisition,market acquisition,startup的系统简单还是复杂既不是决定性因素,

avatar
h*i
95
从概念上说,每次操作都得到一个新的数据结构当然最清晰,没有比这更清晰的了,推
理起来最简单。
当然实现起来,不能这么实现,性能太差了。所以Clojure搞出一些immutable数据结构
来,让用户感觉是每次得到一个新的数据结构,实际上只有部分是新的。比如D>A这么一个树,B是root, 现在要把C删了,Clojure的做法是返回一个新的树,D
A,原来的树DA还在。只有B'是新的。这实际上就变成了一个trie。Clojure的
trie有32个分支,是很宽的,所以性能在实际应用中还不错。
具体可以看看这个解释:
http://hypirion.com/musings/understanding-persistent-vector-pt-

【在 p*****2 的大作中提到】
:
: 我没有具体研究过。只是感觉这种算法fp不如ip直接清晰。做的话至少可以copy整个
: tree,return一个新tree

avatar
h*i
96
是啊,就是改起来容易,放心。

【在 l******t 的大作中提到】
: 维护的时候更会发现immutable的重要性
:
: ,

avatar
l*n
97
其实FP很容易理解,但是发明那么多DSL就反人类了。举个例子说,js的promise很容易
理解,但是async这个library就是一坨屎。promise的standard的api看去一目了然。
avatar
h*i
98
是的,ancester都要copy, 但Clojure用的很宽的trie(branching factor=32), 所以
结构很浅,一般没有几个ancester需要copy,比如一个有4 billion节点的结构也就六
层。
还有,immutable也不是总比mutable慢,看是什么算法。有些算法,比如react.js里面
的diffing, immutable就更快,所以现在clojurescript很火。

【在 w***g 的大作中提到】
: 我查了一下,要copy所有的ancester。IP的话tree一般就是用指针实现了,删除操作可
: 以有效得多。immutable的牛B之处是没有同步问题。当然不能纯immutable。但是
: 按immutable的套路做data structure,几乎可以做到lock free。C++要有个
: immutable的container库就好了。

avatar
h*i
99
FP is the next evolution of programming, enabled by advances in hardware,
and pushed by higher level demand. That's it.
说“XX也能用YY实现”的人完全没有get the point。
语言的发展是反方向的,不要问什么能被实现,而要问什么不能被实现了:一切都能用
汇编实现,而越来越多的能用汇编实现的功能,现在不能被越来越高级的语言实现了。
这才是语言发展的方向。
是不是感到世界观被颠覆了? 哈哈。

【在 a**D 的大作中提到】
: immutable真能解决大部分的软件问题? 这个我是持怀疑态度的。其实关键的是理解软
: 件设计思想,大部分的OOP/FP的概念也应该能用C/IP实现。
: FP不会是silver bullet.

avatar
n*w
100
这段提到的点我也是有相同的感觉。我是同样的几个项目用f#重新实现。

,

【在 h*i 的大作中提到】
: 当然比较过,一开始我同一个东西写两个版本的。我觉得是Clojure的代码容易写容易
: 读,所以我才完全转了。其实我写Java的年头比写Clojure的年头多一个数量级。不光
: 是代码量的问题,Clojure更容易写得正确。
: 主要是思维方式不同。写Java我一般是top down, 先把框架搭好,写很多注释,感觉在
: 写英文文章,再填内容,经常是写了几天了,还一次都没run过,特别是复杂的代码。
: 我觉得是因为Java是closely coupled,需要花大精力来搭框架,写完很容易觉得自己
: 是个architect。东西改起来很难,复杂的代码reason起来比较难。
: Clojure是先写小的容易的函数,按快捷键马上测试,然后copy & paste到test里面。
: 搞定了一个函数,再写下一个。小函数组装成大函数,最后自然而然就完工了。改起来
: 不觉得有啥困难,主要是loosely coupled。写的过程很爽,感觉一直在玩puzzle游戏,

avatar
c*0
101

论纯行数,十万行在Google那是小到不能再小的项目,这么给你说你就理解了,一个
Android上的原生时钟程序大概源代码是5w行级别。
上千行的函数你几十行实现的情况是有可能的,比如有种case是这个函数之前要和他们
内部的几个系统联所以很多无关的代码,后来想开源了光把内部系统的代码去了,无关
代码没影响功能没去。你从头写自然要精简多。还有可能就是你用了一些轮子,别人没
用。

【在 c*******9 的大作中提到】
: 大公司的人喜欢把简单的事搞复杂,不知是不是为保工作。google的一个十万行3D开源
: java代码,我用objc也就2,3千行就实现了。google的有好几个上千行的函数绕来绕去
: 就实现个简单功能。
:
: big

avatar
a*D
102
我同意FP是比IP更高一层的抽象。
但就象Linus说的,认为可以从编程语言的层面去解决一些fundermentally hard
issues, such as parallelism/concurrency/distributed computing, 就是kidding
yourself.
软件编程的困难是essential的,基本上大部分人都是push complexity around.

【在 h*i 的大作中提到】
: FP is the next evolution of programming, enabled by advances in hardware,
: and pushed by higher level demand. That's it.
: 说“XX也能用YY实现”的人完全没有get the point。
: 语言的发展是反方向的,不要问什么能被实现,而要问什么不能被实现了:一切都能用
: 汇编实现,而越来越多的能用汇编实现的功能,现在不能被越来越高级的语言实现了。
: 这才是语言发展的方向。
: 是不是感到世界观被颠覆了? 哈哈。

avatar
c*0
103

这个不是你提出来的?复杂系统FP更适合?
事实就是FP这么多年了,没有几个真正意义上的复杂系统是FP写的。
我没兴趣卷入FP vs. IP的争论,我两者理念都认同。但FP的人总是把FP作为银弹,这
就搞笑了。FP在一个人写东西的时候可能比比IP高效几倍,这个我相信。可惜这个世界
上的复杂系统都不是一个人或者几个人做出来的。

【在 h*i 的大作中提到】
: 问题是,我说这些都是用来反驳别人说的话,是别人想当然的认为用Clojure的就不是
: 写复杂系统的,我从来没有攻击用别的语言的人,没说过他们写的都是简单系统啥。
: 所以你这些话拿去反驳那些人比较好。
:
: big

avatar
x*u
104
比起MS一个关机按钮花几亿如何?

【在 c*******0 的大作中提到】
:
: 这个不是你提出来的?复杂系统FP更适合?
: 事实就是FP这么多年了,没有几个真正意义上的复杂系统是FP写的。
: 我没兴趣卷入FP vs. IP的争论,我两者理念都认同。但FP的人总是把FP作为银弹,这
: 就搞笑了。FP在一个人写东西的时候可能比比IP高效几倍,这个我相信。可惜这个世界
: 上的复杂系统都不是一个人或者几个人做出来的。

avatar
h*i
105
除了编程问题本身的essential complexity, 还有很多incidental complexity, 这就
是程序语言自己带来不必要的complexity.
FP试图去解决掉一些后者。
http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

【在 a**D 的大作中提到】
: 我同意FP是比IP更高一层的抽象。
: 但就象Linus说的,认为可以从编程语言的层面去解决一些fundermentally hard
: issues, such as parallelism/concurrency/distributed computing, 就是kidding
: yourself.
: 软件编程的困难是essential的,基本上大部分人都是push complexity around.

avatar
h*i
106
我什么时候说了“复杂系统FP更适合”?

【在 c*******0 的大作中提到】
:
: 这个不是你提出来的?复杂系统FP更适合?
: 事实就是FP这么多年了,没有几个真正意义上的复杂系统是FP写的。
: 我没兴趣卷入FP vs. IP的争论,我两者理念都认同。但FP的人总是把FP作为银弹,这
: 就搞笑了。FP在一个人写东西的时候可能比比IP高效几倍,这个我相信。可惜这个世界
: 上的复杂系统都不是一个人或者几个人做出来的。

avatar
h*i
107
这些都是些老得不能再老的论点,半个世纪前就有人用来反对fortran了,还是没能阻
止计算机语言越来越远离机器的现实。
要顺应自然,不要坚持这些religious freak式的观点。是的,冯纽曼计算机是
imperative的,这又如何?
计算机语言的发展是个社会现象,这不是机器决定的,而是由人的社会性决定的。社会
规律也是铁的规律,所以各位不要螳臂当车,要顺应潮流。
avatar
p*2
108
fp的影响确实很大 新的语言一般都支持higher order functions 像go这么保守的也支
持 java就更不用说了
我觉得是个大趋势 程序员会越来越熟悉

【在 h*i 的大作中提到】
: 这些都是些老得不能再老的论点,半个世纪前就有人用来反对fortran了,还是没能阻
: 止计算机语言越来越远离机器的现实。
: 要顺应自然,不要坚持这些religious freak式的观点。是的,冯纽曼计算机是
: imperative的,这又如何?
: 计算机语言的发展是个社会现象,这不是机器决定的,而是由人的社会性决定的。社会
: 规律也是铁的规律,所以各位不要螳臂当车,要顺应潮流。

avatar
q*c
109
这是显然的,所谓的 immutable 可以并行,其实不过是用 inconsistency 来换
locking 而已。
问题本身怎么能因为换个语言就消失了?

【在 a**D 的大作中提到】
: 我同意FP是比IP更高一层的抽象。
: 但就象Linus说的,认为可以从编程语言的层面去解决一些fundermentally hard
: issues, such as parallelism/concurrency/distributed computing, 就是kidding
: yourself.
: 软件编程的困难是essential的,基本上大部分人都是push complexity around.

avatar
g*g
110
FP又不是春天的鸡,要飞几十年前就该飞了,也不会被 C类语言一路下来打得满地找牙
。今天因为一些复杂并发的需要产生了几个优秀类库,但除此之外几无建树。这才是客
观的现状。
avatar
c*9
111
如何inconsistency? immutable 把并行简化了很多,想haskell的一个并行库可以让
以前没有并行的code基本不用改动,加一条标记让它并行就并行。

【在 q*c 的大作中提到】
: 这是显然的,所谓的 immutable 可以并行,其实不过是用 inconsistency 来换
: locking 而已。
: 问题本身怎么能因为换个语言就消失了?

avatar
c*9
112
Linus是从操作系统的角度来说的吧。作为应用程序,别人已经解决的问题,就不要总
是重复了。要做到这点,语言的关系很大。

【在 a**D 的大作中提到】
: 我同意FP是比IP更高一层的抽象。
: 但就象Linus说的,认为可以从编程语言的层面去解决一些fundermentally hard
: issues, such as parallelism/concurrency/distributed computing, 就是kidding
: yourself.
: 软件编程的困难是essential的,基本上大部分人都是push complexity around.

avatar
c*9
113
这种思维有些刻舟求剑了,如果总成立,买股票就简单了,涨就买,跌就买,都不会血
本无归了。

【在 g*****g 的大作中提到】
: FP又不是春天的鸡,要飞几十年前就该飞了,也不会被 C类语言一路下来打得满地找牙
: 。今天因为一些复杂并发的需要产生了几个优秀类库,但除此之外几无建树。这才是客
: 观的现状。

avatar
l*s
114
:-)

【在 h*i 的大作中提到】
: 这不是变相骂我老么?人是有点老,思想还是很新的哦。
avatar
h*i
115
几十年前没有现在的硬件,几十年前硬件的价格和现在硬件的价格也不是一个概念。
以前是机器比人贵,让人来为机器服务没有问题,但那是没有办法的事情。本质上,人
制造机器是为了给自己服务的,以前被服务的对象只包括用户。现在,程序员也要求被
服务了,这是由人性决定的, 也是经济关系决定的,现在程序员更贵。
“Are WE being well served?" Rich Hickey一上来就问这个。这儿的We是程序员。
http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

【在 g*****g 的大作中提到】
: FP又不是春天的鸡,要飞几十年前就该飞了,也不会被 C类语言一路下来打得满地找牙
: 。今天因为一些复杂并发的需要产生了几个优秀类库,但除此之外几无建树。这才是客
: 观的现状。

avatar
n*w
116
excellent presentation.

【在 h*i 的大作中提到】
: 几十年前没有现在的硬件,几十年前硬件的价格和现在硬件的价格也不是一个概念。
: 以前是机器比人贵,让人来为机器服务没有问题,但那是没有办法的事情。本质上,人
: 制造机器是为了给自己服务的,以前被服务的对象只包括用户。现在,程序员也要求被
: 服务了,这是由人性决定的, 也是经济关系决定的,现在程序员更贵。
: “Are WE being well served?" Rich Hickey一上来就问这个。这儿的We是程序员。
: http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

avatar
g*g
117
供求关系造成编程人员短缺,这就更决定了流行的语言是简单的,无歧义的,这样编程
门槛低。而简洁根本是无关紧要的。这就如白话文对比文言文。
并发对FP的需要被人为夸大了。高用户数的高并发并不等于并发复杂,因为大多数互联
网应
用里用户之间没有协作关系,没有调度的问题。今天有C*之类的轮子在,scale out不
说简单,但是有规范化的做法。在Spark之类的类库上写点脚本的,根本跟高并发全无
关系。当然还是得有人去写Spark,写这样的类库FP还是有优势,但这个是极小的一个
市场。

【在 h*i 的大作中提到】
: 几十年前没有现在的硬件,几十年前硬件的价格和现在硬件的价格也不是一个概念。
: 以前是机器比人贵,让人来为机器服务没有问题,但那是没有办法的事情。本质上,人
: 制造机器是为了给自己服务的,以前被服务的对象只包括用户。现在,程序员也要求被
: 服务了,这是由人性决定的, 也是经济关系决定的,现在程序员更贵。
: “Are WE being well served?" Rich Hickey一上来就问这个。这儿的We是程序员。
: http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

avatar
g*g
118
这就是个概率问题,一个科技公司如果上市10年还不死不活,你觉得日后成长为Google
的概率有多大?以其说我刻舟求剑,不如说你wishful thinking.

【在 c*******9 的大作中提到】
: 这种思维有些刻舟求剑了,如果总成立,买股票就简单了,涨就买,跌就买,都不会血
: 本无归了。

avatar
c*9
119
一个科技公司活蹦乱跳,日后成长为Google的概率也接近0.
发展没发展要自己和自己比。对程序猿来说,机会也不等于用最流行的东西。

Google

【在 g*****g 的大作中提到】
: 这就是个概率问题,一个科技公司如果上市10年还不死不活,你觉得日后成长为Google
: 的概率有多大?以其说我刻舟求剑,不如说你wishful thinking.

avatar
q*c
120
但是A科技公司活蹦乱跳, B 公司10 年不死不活
呆在 A 里面有前/钱途的概率, 比 B 公司大了 100/1000 倍。
在不知道下个 google 是谁的情况下, 你投奔哪个?
经常看到这种简单逻辑混乱的人。 我考了 10 分, 你靠了 70 分, 反正大家都不是
100, 没啥区别。 lol

【在 c*******9 的大作中提到】
: 一个科技公司活蹦乱跳,日后成长为Google的概率也接近0.
: 发展没发展要自己和自己比。对程序猿来说,机会也不等于用最流行的东西。
:
: Google

avatar
c*9
121
活蹦乱跳的公司一下子垮的也不少。当然换工作也许很容易,不用付出太高代价。用炒
股被套牢的例子更说明问题。
我考了 0 分, 你靠了 59 分,往往结果是没区别的。



【在 q*c 的大作中提到】
: 但是A科技公司活蹦乱跳, B 公司10 年不死不活
: 呆在 A 里面有前/钱途的概率, 比 B 公司大了 100/1000 倍。
: 在不知道下个 google 是谁的情况下, 你投奔哪个?
: 经常看到这种简单逻辑混乱的人。 我考了 10 分, 你靠了 70 分, 反正大家都不是
: 100, 没啥区别。 lol

avatar
g*g
122
区别大了,59可以割肉,0分割不割有区别吗?

【在 c*******9 的大作中提到】
: 活蹦乱跳的公司一下子垮的也不少。当然换工作也许很容易,不用付出太高代价。用炒
: 股被套牢的例子更说明问题。
: 我考了 0 分, 你靠了 59 分,往往结果是没区别的。
:
: 是

avatar
q*c
123
开玩笑,现实世界是二进制的?!

【在 c*******9 的大作中提到】
: 活蹦乱跳的公司一下子垮的也不少。当然换工作也许很容易,不用付出太高代价。用炒
: 股被套牢的例子更说明问题。
: 我考了 0 分, 你靠了 59 分,往往结果是没区别的。
:
: 是

avatar
c*9
124
这种情况不少见。

【在 q*c 的大作中提到】
: 开玩笑,现实世界是二进制的?!
avatar
q*c
125
你当左派多少年了? 左派混谣各种技能如此熟练啊!简直就要满技能度了。
不少, 很多时候, 差不多, 呵呵呵呵。
简直张嘴就来, 各种和稀泥, 只要不眼前伤害你自己的利益, 哇哈哈。

【在 c*******9 的大作中提到】
: 这种情况不少见。
avatar
g*g
126

这个本身就不是二进制呀。。。

【在 q*c 的大作中提到】
: 你当左派多少年了? 左派混谣各种技能如此熟练啊!简直就要满技能度了。
: 不少, 很多时候, 差不多, 呵呵呵呵。
: 简直张嘴就来, 各种和稀泥, 只要不眼前伤害你自己的利益, 哇哈哈。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。