[转载] 同是JVM上的语言,Scala还没Clojure快

t0uch 2009-12-30
不转了,直接看
http://www.bestinclass.dk/index.php/2009/12/clojure-vs-ruby-scala-transient-newsgroups/
Eastsun 2009-12-30
你应该自己试试再下结论,至少应该把后面的评论看了
t0uch 2009-12-31
ls试过了吗?我不太会玩clojure所以没试。
不知道不同的人测试为何会有这样的差异,莫非是cpu个数。
刚刚看update2出来了。结果没有太大变化。但是多了个python,它是最快的。
night_stalker 2009-12-31
那帖子就是搞笑 …… Ruby 部分用了 19 行来实现一个 Dir.glob,嫌不够慢还是不够长?
而且 clojure 部分 loc 少,是因为没有像前面两段代码那样做一点事情写些注释,也没打印一些有用没用的信息 ……
Eastsun 2009-12-31
性能测试代码里面还有println,确实很囧
night_stalker 2010-01-05
clojure 很靠谱,只是这个帖子很不靠谱 ……
t0uch 2010-01-06
night_stalker 写道
clojure 很靠谱,只是这个帖子很不靠谱 ……

clojure大哥也有用过?STM和Actor在并发方面相比,有什么不同?比如说优势?劣势?或者适用场景。
night_stalker 2010-01-06
优劣势很难说,只是解决同一个问题的两种方法。haskell 上的 actor 库还是用 STM 实现的呢 …… 同理也能用 actor 实现 STM ……

STM 是类似乐观锁的东西(syncronized 类似于悲观锁),STM 的变量允许高速同时写入,但是可能会写入失败,如果对 transaction 比较熟悉,上手就很快。
robert 2010-01-06
night_stalker 写道
优劣势很难说,只是解决同一个问题的两种方法。haskell 上的 actor 库还是用 STM 实现的呢 …… 同理也能用 actor 实现 STM ……

STM 是类似乐观锁的东西(syncronized 类似于悲观锁),STM 的变量允许高速同时写入,但是可能会写入失败,如果对 transaction 比较熟悉,上手就很快。


没有查到过 haskell 上的 actor 是由 stm 实现,可有参考网址?谢谢。
从我看到的资料来看,actor 和 stm 是两种编程模型,程序员只能选择一种来处理自己的并行问题。似乎并非两个层次的东西。尽管理论上可以用一个来实现另一个,但看不出有什么好处。这是因为 actor 机制要求用消息传递来避免数据共享,而 stm 则是用类似乐观锁的方式来进行共享。因此基本思想是不同的。
actor 模型更为一般性,可以用来处理分布式编程,所以是 erlang 语言的并行机制。但 stm 则是只能用于同一机器,用在多核心间共享数据。据有资料说 clojure 是第一个从语言级别支持 stm 的语言。
stm 允许数据共享,因此在同一机器上,效率和内存使用上会较高。clojure 的 stm 实现利用了 clojure 的 fp 本质和它的持久化数据结构,因此非常容易使用,是 clojure 语言的主要卖点之一。
night_stalker 2010-01-06
唔 …… hackageDB 那个是用 Channel 实现 mailbox 队列的,不过也有用 STM.TChan 实现 mailbox 的,两种实现有微妙的不同 …… 我不确定用 Channel 会不会出现死锁。两个比较 old 的链接:
http://lstephen.wordpress.com/2007/09/08/the-actors-model-and-haskell/
http://sulzmann.blogspot.com/2008/10/actors-with-multi-headed-receive.html

STM 不限同一台机器吧? 代码形态很相似的,随便改改就是分布式了。built-in 不是什么优势,D 语言的 built-in 功能才多呢 …… 它们是帮助解决问题的工具,作为 library 存在才比较好 ……

顺便在此 mark 一些待看的,多核什么的现在也用不上,就算用也有很多别人写好的现成工具了,没有看的动力 ……
http://www.codecommit.com/blog/scala/software-transactional-memory-in-scala
Global site tag (gtag.js) - Google Analytics