n****1 发帖数: 1136 | 1 谢谢大神提点! 我想说服二爷的是nodejs的aio runtime可以提供同步api, 用来实现
python里面的sync IO库。 而这个是Erlang/Haskell已经做到了的, 所以我不觉得我的
结论错了。 欢迎拍砖!
这个我知道, 我还看过99年那篇"A Poor Man's Concurrency Monad". 但这也说明,
这个sugar可一点也不trivial。 如果js里没有加yield, 还真不一定有做node的人去读
这篇文章, 然后去写这个sugar.
我最喜欢的还是erlang模式, 也就是GHC现在的模式:GHC runtime对外IO都是异步的.
同时通过forkIO, 用少量的kernel thread来模拟大量的user thread, 而且runtime呈
现给user thread的IO api全是同步api(open/read/write). 就算是nodejs加了yield之
后也达不到这么好的语法糖效果。
我在python里面是大量用generator的(多线程有GIL, 讨厌多进程), 还折腾过些
stackless python/... 阅读全帖 |
|
n****1 发帖数: 1136 | 2 在讨论FP与OOP之争的时候, 动不动就会有人跳出来说拿市场占有率说事, 说拿接收程
度说事, 拿开发/执行效率说事. 我觉得这是站在士兵的角度, 而不是站在将军的角度
思考问题. 比如zhaoce等一帮人张嘴就来"我认为cs没有什么东西是不可以通过堆人力
搞定的", 这等同于"咱们人多,打战必胜". 观点基本是对的, 可是一个脑子里只想着堆
士兵数量的人能当将军么?
在我看来,FP最大贡献, 最吸引人的地方,在于它给出了很多模型的理论基础, 比如
monad/applicative functor之类的. 这些数学结构能够帮助我们识别出我们具体问题
的边界和局限.
举个例子, Applicative functor是和parallel computing紧密相连的. 如果我们需要
解决的实际问题能够被抽象为applicative functor, 那么不管我们用啥语言,都是多少
能够scale horizontally. 但如果不能, 你就算是用一个军团的OO程序猿也写不出
distributed solution. 因为理论一定能举出反例(翻译成程序猿语言叫一定能重现出
bug).... 阅读全帖 |
|
n****1 发帖数: 1136 | 3 良好的设计都是精心封装的, 连Haskell也很强调封装. 如果说SOA是OOP,那Haskell也
是OOP了. 这拿来主义论点也太牛逼了吧. |
|
n****1 发帖数: 1136 | 4 Go back to school and take some math course, and you can learn there is
something called time-series, where values are represented as X_t.
X_t != X_(t+1), but X_t itself is a immutable constant for every t.
This is the only formal way to model time-variant values. This is why people
invent calendar.
git is exactly using the lower index idea: the head keeps updating but each
snapshot is immutable. Git can even give a sense of multi-demensional time(
in the form of multiple branches). A naive muta... 阅读全帖 |
|
e*******o 发帖数: 4654 | 5 最近我也看了不少语言,我觉得 scala 和 lisp 是最值的学的。
关于haskell和scala 同意楼上,
Haskell 的难度在于怪异的syntax。
比如 Lists 的定义:
data [a] = [] | a : [a] deriving (Eq, Ord) 得半天才能看懂。
syntax 把 monad的学习的难度给增大了,或者说,syntax把monad 弄神秘了。
学 scala 的type,学起来也比较有意思。其它语言,基本用不到这些(我知道的)。 |
|
n****1 发帖数: 1136 | 6 其他语言里面的list大多都是language primitive,因为list本来就很难用一个library
来定义。 haskell能把list分离到语言之外已经很不错了。
如果要你在scala/java/python/c++里面实现自己的list, 而且不准用array,你准备怎
么定义?
C++还好, 有template和指针, C的实现基本只能用linked list+opaque pointer.
struct List {
void* payload;
List* next;
};
这个和haskell是等价的,都用到了循环定义。
其他几个我真不知道, 你写个java/scala的看看? |
|
c******o 发帖数: 1277 | 7 其实本质上fp, non-fp都是一样的,可以互相编译为对方。 (lambda calculus 和
turing machine 是等价的)
fp的好处就是你的思维必须要开始就是为了并行做准备的,(immutable, recursive,
no side effect, referential transparency).
不管怎么样,有精力的话学一门FP( 强类型的haskell/scala最好)肯定是好的。
其实CS最终都是算法,模型, pattern,语言还不是工具。 我觉得最好就是会Java +
Js + Haskell + Lisp, 后两者可以用更流行的scala/clojure替代 |
|
m******t 发帖数: 635 | 8 type system背后的理论他还是很懂得,他之前有个文章提到haskell作为根本的某理论
有致命缺陷,如果证实了的话,还是很有深度的。要是在奥术神座里,一群搞haskell
的,或者引申些搞scala都要爆头 |
|
a*****e 发帖数: 1700 | 9 HM 类型推导系统引入 let poly 的限制是为了保证推导无需任何类型注释,不仅
decidable 而且高效。这个缺陷只要是学过类型理论的都应该知道,搞得好像是自己了
不起的发现似的就只有王垠了。
以此来批评 Haskell 更是不知所谓,Haskell 的类型推导早就脱离了 HM 系统了。 |
|
n****1 发帖数: 1136 | 10 Haskell里面也有template haskell, 不过大多数人认为是坏处多于好处. 别的不说,
type inference全乱了, 而且C++ template编译错误时生成的信息简直是天书. |
|
n****1 发帖数: 1136 | 11 首先, 实际卖票逻辑比你形容的复杂多了. 譬如有列车:广州->武汉->郑州->北京. 车
上有个座位,广州->武汉卖掉了, 郑州->北京也卖掉了,那如果有个乘客需要武汉到郑州
的坐票, 你的业务逻辑能把这个座位卖个人家吗? 我还没提更复杂的联程票情况.
换句话说, 如果业务逻辑像你形容的这么简单, 那就是可以弱耦合了嘛!
你应该把你的数据模型写出来, 就像这个帖子一样:
http://www.mitbbs.com/article_t/Programming/31299459.html
然后大家才能看清这个模型是否强耦合,是否计算量像你说的那么简单.
其次, lockfree data/software transactional memory又不是啥新鲜玩意, 这早就是
haskell杀手应用, 那帮鸟人用haskell的STM写出的server比nodejs还快一倍. Java/C+
+里面也有类库实现类似的东西. 你别告诉我你的核心就是实现这个!
最后, 用单机的performance per dollar固然好, 可是这么复杂的逻辑, 这么大的运算
量, 单机承受力很值得怀疑. ... 阅读全帖 |
|
c*******9 发帖数: 9032 | 12 你们几个人做这个项目?我觉得人不多,统一一下风格用Scala问题不算大吧,不好用
特性的就不用了。
我有个项目还在决定是否用scala,还是java 8就够了. 看这里这么多人痛恨scala还是
有些奇怪。我个人
不太喜欢scala语法(和haskell比不够纯洁),不过喜欢和haskell一样的概念。
用。 |
|
c******o 发帖数: 1277 | 13 the author of this article seems like "cool" things, he likes Haskell and
does not like to slow down the changes.
Rod on the other hand comes from Java.
Java/Haskell are the 2 biggest roots scala comes from. |
|
c*******9 发帖数: 9032 | 14 en. 学了haskell在学scala容易很多,看了几天scala,对那些一开始看着庞杂的语法
适应了一些。
找haskell的工作不容易,我想找online game server 的open source framework自己
改改玩。 |
|
c*******9 发帖数: 9032 | 15 你搞的计算估计比较focus在单纯的统计,还有更多其他类别的计算。
我知道的是金融(数据分析和策略),图形图像处理(结合GPU计算)方面招haskell。
当然可以用的很广,什么web应用都可以,只不过招不到那么多haskell程序员,这些公
司一般不会用这个。
靠这个找工作估计不方便,主要是比较单纯适合学习FP编程基础,如果自己干,也可以
考虑用。 |
|
n****1 发帖数: 1136 | 16
Monad is the bread and butter in haskell. List is an example monad, "map" is
a function over monad. Monads are warm and fuzzy things.
You are talking about metaprogramming, not FP.
Even in terms of meta programming, C++ templates is not composition-friendly
. "Concepts" is yet to be added, while haskell could manipulate asm code
directly using llvm-bind in a composable way.
example:
https://github.com/bos/llvm/blob/master/examples/Array.hs |
|
L***n 发帖数: 6727 | 17 小众软件就算了,俺们不懂...牛逼属于主观印象,特别是
我们这些User,不是搞语言本身的,当然看用语言写的软件
大众不大众了,不过lisp作embedded language真心不错,
Haskell就不知道了,好像carmack最近不知吃错什么药了,
比较追捧,不过没见id大规模用Haskell做过项目 |
|
c*******9 发帖数: 9032 | 18 你这个什么时候的测试,新版的haskell又有提高,java比较稳定了,提高的余地估计
很小了。
haskell熟练了应该就开发数据处理来说应该会比java高不少,
写个解释器之类的轻轻松松。目前多数程序员不太习惯纯编程,但如果以后fp在性能上
有了优势,会有更多程序员加入。
java |
|
c*******9 发帖数: 9032 | 19 人小菊还知道从体系结构说明fp的不足之处。你的思维是低等的条件反射:只崇拜知名
的东西。应用知不知名,和语音好坏能有多数关联?haskell创始人有句话:要努力让
haskell不成功。这个估计你一辈子理解不了。
tesla如果只会盲目跟知名厂商的方案,还能造出tesla吗。 |
|
g*****g 发帖数: 34805 | 20 你丫不觉得羞愧吗?大嘴一张haskell性能强,把测试拉出来haskell被全面秒杀,现在
退回到有的测试强了。
性能强不强本来只是语言的一部分,一堆脚本语言如python性能不强照样大行其道。但
像你这样无知还装逼,被打脸是必然的。 |
|
|
g*****g 发帖数: 34805 | 22 你是来暴露智商的吗?你给的这个link,Haskell动不动2x java,可惜是time。就这还
证明Haskell比Java性能好?我老要是你这德性,早就没脸在这板上混了。 |
|
c*******9 发帖数: 9032 | 23 一方面要我“非web应用举几个haskell贡献大的例子”,另外一方面你说“ 语言就是
工具,最后系统牛不牛是何人有关,不是语言”。我还和你费什么尽头,我不否认你的
观点,但是这些牛系统和你普通程序员有多大关系,作为程序员当然是关系那个语言用
的舒服,而不是最终系统有多牛。你所谓的牛逼人是商界名人吧,那样的牛逼人有几个
自己写程序的。真写程序牛逼人你我知道的也屈指可数,估计那些支持haskell的Quake
作者在你眼里都不是牛人。 |
|
c*******9 发帖数: 9032 | 24 你那只X眼看我装牛逼了?
我写什么凭什么让你知道,你能出资支持一下?
谈语言就是谈语言特性本身,你扯这些不招边际的什么东西牛不牛,什么人牛不牛有用
吗。
好像一天没人夸你牛,你就座不住了,你牛不牛关别人屁事。
和小菊讨论就比较受益,人只从体系结构来说明语言的优缺点。
例子据来是为了讨论方便,也证明不了太多问题,我也没有要证明haskell完胜java,
只是说性能还算过的去。
看到个2x就你就条件反射说haskell完败,那java和c++比不是更完败了,你和别人辩论
c++ vs java适合可没这样,照这样java 无论速度,占用内寸都是完败。
还有,你处心积虑要打什么脸,我费力气打你脸对我有什么好处,除非你给钱让我打。 |
|
g*****g 发帖数: 34805 | 25 Java是不比C++快,所以我从来不宣扬Java比C++快,这叫做尊重事实。
你丫自己傻逼还有脸说?牛逼哄哄地说haskell比java性能好,自己找个数据java比
haskell快一倍。丢人了拉内存用得多出来死撑。这都什么德性?
你丫就不会说句我弄错了,谁都有弄错的时候,但你这样屁股决定脑袋,错了还死撑。
被一堆人嘲笑也就不奇怪了。 |
|
g*****g 发帖数: 34805 | 26 你自己打脸是嫌不够是吧?内存就是不重要,所以这个benchmark里只有4个测试给出内
存的比较。而且一个相当,两个haskell省内存,一个java省内存。就这个benchmark,
连haskell比java省内存都说明不了,你丫长脑子了吗?
现实应用中,真正需要很多内存的,都是大数据量,数据大小决定了内存使用的大小,
而不是语言那点编译代码,不同语言区别不大。你就一小屁孩,没任何经验,成天玩这
些屁股决定脑
袋的勾当。 |
|
|
c*******9 发帖数: 9032 | 28 1...5, ( _, a) 等学的haskell。唯一遗憾的是没有像scala那样支持traits(从而
更像haskell),当然这样也许增加编程难度,很多人不适应。
Ruby, |
|
c*******9 发帖数: 9032 | 29 刚看到楼主重要做统计,不清楚haskell的库是否全,可以看看Haskell Financial
Data Modeling and Predictive Analytics 那本书,如果够用就可以了。 |
|
n****1 发帖数: 1136 | 30 你要在投行做肯定可以主打haskell, 否则学haskell只是开眼界而已,难以当饭碗来端 |
|
a*****e 发帖数: 1700 | 31 在 Haskell 里面也就一行:
powerset = filterM (\_ -> [True,False])
这里用到的 filterM 来自 Control.Monad 库,从它的类型基本可以推断出它的功能:
filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
也就是通过一个 monadic 的条件 (a -> m Bool),筛选列表 [a],得到结果的类型为
m [a]。
这样看,filterM 是一个非常 generic 的函数,和 powerset 八杆子打不着边,那么
最上面的定义该怎么理解呢?在 scala 里面使用 monad 应该也能给出类似的定义。
这里学 Haskell 和 Scala 的那几位,谁能解释清楚了,我打赏 50 个包子 :-)
另:goodbug 那个 java 版本是 tautology,从中学不到任何知识,没意义。
= |
|
l*******e 发帖数: 309 | 32 我用emacs。写c++有个rtags模式,python有jedi,haskell有个structured haskell
mode都不错。 |
|
j****y 发帖数: 684 | 33 目标,这东西学了将来换工作的时候有用,工业界有些应用, 有些market的。
scala?clojure?erlang?haskell? 当然还有别的
我从github上搜了下〉1个star的repo的个数,其实都不多。。。
clojure 214
scala 559
Erlang 138
Haskell 406 |
|
b***e 发帖数: 1419 | 34 你这傻逼当年装逼到底说搞functional programming的都是freak, cannot think
straight。现在functional programming以各种形式进入各个language。Java的
generics和lambda都是直接从Haskell里抄的。Scala就更不用说了,根本就是Haskell
community的人做出来的。我眼光如何我倒是不太在乎。你丫这傻逼记住喽,想你丫这
种asshole是不可能有眼光的,因为屁眼有眼无珠。 |
|
p*****2 发帖数: 21240 | 35
我是说你说的这个情况。为什么要上Scalaz不上Haskell。
就是写起来有快感。你已经觉得写scala是一种享受了,如果写纯FP,快感会更强。
你会感觉精神都得到了生化。这就是为啥haskell有一批死忠。 |
|
p*****2 发帖数: 21240 | 36 就是学习Haskell太疯狂了,让人常常质疑为啥不直接上Haskell算了。 |
|
|
|
p*****2 发帖数: 21240 | 39 scala 有scalaz 但是一直美学
感觉比haskell难学 不学haskell基本不能理解
颦。 |
|
p*****2 发帖数: 21240 | 40 看了看,感觉主要的问题是Scala是OO的,Haskell是FP的。
本来Scala应该object.method, 但是搞了type class之后就变成了跟Haskell一样,
method object了,感觉怪怪的。 |
|
p*****2 发帖数: 21240 | 41 好问题 我觉得不学习haskell很难回答 学了之后基本不能回答了 所以想知道还是学学
haskell吧
基本上编程序变成数学推倒了 推导对了 程序基本上也没啥bug了
比普通的编程更抽象 当然也很难学习 水很深 |
|
p*****2 发帖数: 21240 | 42 all I know is:
after learning Haskell in the evenings/weekends for a few months, reading
language feature tutorials and writing a personal project, I understand
enough about enough typeclasses / GHC extensions / etc to write somewhat
abstract Haskell code without type errors, or to read those type errors and
grok them. the abstractions increase modularity, without decreasing
readability.
after the same time/effort with Scala, I know nothing about Scala's types,
or its errors. |
|
p*****2 发帖数: 21240 | 43 In my experience, Scala's is much more complicated. It has to be, in order
to interoperate with Java, include object-oriented programming, and
therefore use a lot of subtyping and attempt to impose principle on it.
Scala seems to be a bazaar in which concepts from Java and Haskell collide,
and there's even some Erlang thrown in (the actor model). Type-wise, these
sub-languages don't always get along well. For what it must do, Scala does a
good job. The problem is that its mandatory first-class s... 阅读全帖 |
|
p*****2 发帖数: 21240 | 44 我很难理解只学习一种语言就能精通,我的感受是,学习多种语言互相比较才能融会贯
通,对某一个语言的理解才能更深入
比如我学习Scala,OO部分一定要跟Java比较来学,FP部分一定要跟Haskell比较来学,
否则的话就很难学懂。像Scala的type system,一部分我可以比较Haskell,但是大部
分我没有语言做参照就学的很浅显,很难深入。 |
|
p*****2 发帖数: 21240 | 45 是呀 还得学haskell
理解一些问题要先用haskell理解 然后再转到scala 不然直接从scala来理解很乱 |
|
p*****2 发帖数: 21240 | 46 Haskell是用IO Monad来解决的。
Scala并没有一个标准吧?
走Haskell的路就用Scalaz,但是我在这一点上很保守,而且水平也确实不够。
现在体会如何把impure codes封装使得scope最小化。需要一段时间的体会。 |
|
c*******0 发帖数: 5247 | 47
事实上到目前为止,改头门第的人,来自Python和Ruby圈的最多。反而是因为Go的GC特
性让很多C/C++不愿意改投门第。
商业逻辑这方面转Go的确实少,Go本来也没打算在这方面和Java争。Go大部分是做
infra的。
个习惯问题,比如Swift style和Go类似,很多objc的人转了几周也就适应了。
我老早就在这里说了,Go不可能取代Java,Go的目标也不是取代Java。Java dominate
的地位,只要Android不倒,JVM不倒,是不会被动摇的。
同意
既然说到这了,我就多说几句。
Go是一门设计理念非常清晰但是顽固的语言。和别的语言不同,Go并不希望成为一个
one language rule them all。在一开始设计的时候,Go team的人的目标很简单,就
是满足Google内部做多team大规模infra的需求。注意,这个“多team大规模”是目标
,不是期盼。因为这个目标,所以才会有Go boring的语法,少得可怜的特性,和及其
简单的上手,以及超强的可读性。
Go社区的人喜欢Go,完全不是因为什么语言牛逼的特性,也不是什么best pe... 阅读全帖 |
|
|
g*****g 发帖数: 34805 | 49 我老写10倍是因为税前,跟现金去买就是10倍杠杆,税前5倍。我老patent没赚什么钱
,做出来的产品公司从三星拿到了两个亿,还是纯软件,你丫不服有用吗?还有我老从
来没读过ph.d,我老master做出来的paper好歹也发过IEEE journal。就你这小逼跟我
比能力。
哪次谈点技术你丫不是灰头土脸,到头来就他妈拼命想人身攻击转移视线。我老不装逼
,要不是
给人推荐工作,根本没人知道我是NFLX的。跟你这傻逼成天FPFP,死吹Haskell被爆菊
不在一个层次上。你丫再恼羞成怒,Haskell就牛逼了? |
|
a*****e 发帖数: 1700 | 50 你眼神不好,看的 seL4 的 github 吗?看见这句话了?
"haskell: Haskell model of the seL4 kernel, kept in sync with the C version."
缺了这个,根本没办法做 formal verification。想明白怎么回事就去读一下人家的论
文吧。 |
|