p*****2 发帖数: 21240 | 1 传说性能跟java差不多,结果发现跟ruby差不多,今天做了两题
第一题,ruby死活过不了,scala将将过
第二题,ruby,scala全部超时2000ms, java 600多ms通过
两道题python都可以通过,第二题用时大约1500ms
可见scala性能跟java相差还是很远的,连python也不如,跟ruby八斤八两,强点有限
。白花一天时间学习了,没什么用武之地。
另外请教以下大牛们,以下语言性能如何,应用广泛吗?
Haskell
Ocaml |
h****n 发帖数: 1093 | |
c********t 发帖数: 5706 | 3 性能很重要吗?
我觉得scala是比java又高了一级的语言。
scala比java慢,java比c++慢很多很多,C++当然比不过汇编语言。所以我觉得做
application,尤其是scalable network/web application,似乎语言本身执行快慢不是
太重要。而是扩展性和鲁棒性最重要。
【在 p*****2 的大作中提到】 : 传说性能跟java差不多,结果发现跟ruby差不多,今天做了两题 : 第一题,ruby死活过不了,scala将将过 : 第二题,ruby,scala全部超时2000ms, java 600多ms通过 : 两道题python都可以通过,第二题用时大约1500ms : 可见scala性能跟java相差还是很远的,连python也不如,跟ruby八斤八两,强点有限 : 。白花一天时间学习了,没什么用武之地。 : 另外请教以下大牛们,以下语言性能如何,应用广泛吗? : Haskell : Ocaml
|
B*******1 发帖数: 2454 | 4 太牛了,膜拜。
【在 p*****2 的大作中提到】 : 传说性能跟java差不多,结果发现跟ruby差不多,今天做了两题 : 第一题,ruby死活过不了,scala将将过 : 第二题,ruby,scala全部超时2000ms, java 600多ms通过 : 两道题python都可以通过,第二题用时大约1500ms : 可见scala性能跟java相差还是很远的,连python也不如,跟ruby八斤八两,强点有限 : 。白花一天时间学习了,没什么用武之地。 : 另外请教以下大牛们,以下语言性能如何,应用广泛吗? : Haskell : Ocaml
|
l*******b 发帖数: 2586 | 5 嗯scala编译阶段感觉非常慢。编译成.class以后运行好像还行。不知道是不是这个原
因 |
p*****2 发帖数: 21240 | 6
没有了。昨天发现ruby性能不行,做题过不去,所以想找个其他语言。结果凌晨2点发
现scala评价不错就看了看。一直看到4点才睡觉。
【在 h****n 的大作中提到】 : 太牛了,一天学会scala。。
|
p*****2 发帖数: 21240 | 7
C++ 400多ms,java没有慢太多。主要是看了很多文章都说scala的优点是性能跟java
差不多。
【在 c********t 的大作中提到】 : 性能很重要吗? : 我觉得scala是比java又高了一级的语言。 : scala比java慢,java比c++慢很多很多,C++当然比不过汇编语言。所以我觉得做 : application,尤其是scalable network/web application,似乎语言本身执行快慢不是 : 太重要。而是扩展性和鲁棒性最重要。
|
p*****2 发帖数: 21240 | 8
估计是这个原因。编译成class应该就跟java差不多了。这么说来,在工程上确实跟
java接近。但是做题的话,编译时间也就算上了,因此吃亏了。
【在 l*******b 的大作中提到】 : 嗯scala编译阶段感觉非常慢。编译成.class以后运行好像还行。不知道是不是这个原 : 因
|
p*****2 发帖数: 21240 | 9 刚从网上搜到的。看来真是编译,启动时间太慢了。
3. 启动速度较慢。虽然Scala也提供shell方式运行,也能用脚本方式直接编译运行*.
scala的程序,但是和python比,都要慢。这主要是慢在启动和编译的速度上,还好执
行效率还是很高的,但是做脚本来用,总是有那么一点点不爽。 |
p*****2 发帖数: 21240 | 10 写过Scala程序的人可能都有一种感觉,编译scala源代码的速度比较慢。是的,
Scala编译源代码的速度确实较慢。
Martin Odersky对此作出了解释:http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly/3612212#3612212
主要有四点:
类型推断是耗时的操作,尤其需要搜索隐式转换(Type inference is costly, in
particular if it involves implicit search.)
Scalac需要做两次类型检查,第一次是针对scala类型规则,第二次是针对Java类型规
则(Scalac has to do type checking twice; once according to Scala's rules
and a second time after erasure according to Java's rules.)
从Scala到Java需要大约15次转换(Besides type checking there are about 15
transformation steps to go from Scala to Java, which all take time.)
在源文件大小同等的情况下,Scala编译器通常会生成更多的类,尤其是使用了函数式
特性(Scala typically generates many more classes per given file size than
Java, in particular if functional idioms are heavily used. Bytecode
generation and class writing takes time.) |
|
|
l*******b 发帖数: 2586 | 11 有意思,看一看
【在 p*****2 的大作中提到】 : 写过Scala程序的人可能都有一种感觉,编译scala源代码的速度比较慢。是的, : Scala编译源代码的速度确实较慢。 : Martin Odersky对此作出了解释:http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly/3612212#3612212 : 主要有四点: : 类型推断是耗时的操作,尤其需要搜索隐式转换(Type inference is costly, in : particular if it involves implicit search.) : Scalac需要做两次类型检查,第一次是针对scala类型规则,第二次是针对Java类型规 : 则(Scalac has to do type checking twice; once according to Scala's rules : and a second time after erasure according to Java's rules.) : 从Scala到Java需要大约15次转换(Besides type checking there are about 15
|
c********t 发帖数: 5706 | 12 哦,为啥米java和C在leetcode上的运行速度差很多啊?
【在 p*****2 的大作中提到】 : 写过Scala程序的人可能都有一种感觉,编译scala源代码的速度比较慢。是的, : Scala编译源代码的速度确实较慢。 : Martin Odersky对此作出了解释:http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly/3612212#3612212 : 主要有四点: : 类型推断是耗时的操作,尤其需要搜索隐式转换(Type inference is costly, in : particular if it involves implicit search.) : Scalac需要做两次类型检查,第一次是针对scala类型规则,第二次是针对Java类型规 : 则(Scalac has to do type checking twice; once according to Scala's rules : and a second time after erasure according to Java's rules.) : 从Scala到Java需要大约15次转换(Besides type checking there are about 15
|
p*****2 发帖数: 21240 | |
t****a 发帖数: 1212 | 14 二爷,你说scala性能连python都比不过我是绝对不相信的。scala性能应该至少是
python/ruby之类的10倍到20倍以上。
一门语言学会怎么高效的写还是蛮难的,像scala这样内容丰富的语言就更不容易啊,
我想一不小心就掉坑里了。
看看这里把:
http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=
scala是目前job增长趋势最快的语言,业界的startup比如twitter早就把他们的系统从
ruby转成了scala。说它性能跟ruby差不多,这结论应该是有问题的。
【在 p*****2 的大作中提到】 : 传说性能跟java差不多,结果发现跟ruby差不多,今天做了两题 : 第一题,ruby死活过不了,scala将将过 : 第二题,ruby,scala全部超时2000ms, java 600多ms通过 : 两道题python都可以通过,第二题用时大约1500ms : 可见scala性能跟java相差还是很远的,连python也不如,跟ruby八斤八两,强点有限 : 。白花一天时间学习了,没什么用武之地。 : 另外请教以下大牛们,以下语言性能如何,应用广泛吗? : Haskell : Ocaml
|
c********t 发帖数: 5706 | 15 好像twitter都在转scala.
【在 p*****2 的大作中提到】 : Yammer从Scala转向Java : http://blog.csdn.net/ricohzhanglong/article/details/7226477
|
p*****2 发帖数: 21240 | 16
计时方式不一样吧。测试环境也不一样。
【在 c********t 的大作中提到】 : 哦,为啥米java和C在leetcode上的运行速度差很多啊?
|
t****a 发帖数: 1212 | 17 二爷你学各种语言不是专门来参加比赛用的吧?干活的话,编译慢点就慢点无所谓的了
。况且scala有个REPL可以解释执行,帮助调试的。
【在 p*****2 的大作中提到】 : : 计时方式不一样吧。测试环境也不一样。
|
p*****2 发帖数: 21240 | 18 不对。不是编译时间的问题。我看了是某个test case 超时了。而运行这个test case
的时候已经都编译好了。所以肯定不是编译的问题。那就真奇怪了。 |
p*****2 发帖数: 21240 | 19
好像yammer从scala转回java了。
【在 c********t 的大作中提到】 : 好像twitter都在转scala.
|
y*******g 发帖数: 6599 | 20 没换成c#?
【在 p*****2 的大作中提到】 : : 好像yammer从scala转回java了。
|
|
|
p*****2 发帖数: 21240 | 21
我工作不用呀。刚才看了一下,是某个test case超时了,所以不是编译的问题。计时
是计的那个test case。大牛帮我看看这个程序哪里可以提高一些?跟java的算法完全
一样。慢了那么多。
object test {
def main(args: Array[String]): Unit = {
val s=readLine
val a=new Array[Int](s.length())
var i=0
var j=s.length-1
for(k <- 0 to s.length-1)
if(s(k)=='l')
{
a(j)=k+1
j-=1
}
else
{
a(i)=k+1
i+=1
}
a.foreach(println)
}
}
void run() throws Exception
{
Scanner in = new Scanner(System.in);
out = new PrintWriter(System.out);
String s=in.nextLine();
int[] a=new int[s.length()];
int i=0;
int j=s.length()-1;
for(int k=0;k
{
if(s.charAt(k)=='l')
{
a[j]=k+1;
j-=1;
}
else
{
a[i]=k+1;
i+=1;
}
}
for(int x : a)
out.println(x);
out.close();
}
【在 t****a 的大作中提到】 : 二爷你学各种语言不是专门来参加比赛用的吧?干活的话,编译慢点就慢点无所谓的了 : 。况且scala有个REPL可以解释执行,帮助调试的。
|
l*******b 发帖数: 2586 | 22 这个循环的测试有些意思,在linux下for比while慢1倍。在windows下20倍。
不过用functional的写法比前两个都快很多
val start = System.currentTimeMillis()
var total = 0
for(i <- 0 until 100000) total += i
val end = System.currentTimeMillis()
println(end-start)
println(total)
val ss = System.currentTimeMillis()
var tt = 0
var i = 0
while(i < 100000) { i = i + 1; tt += i}
val ee = System.currentTimeMillis()
println(ee-ss)
println(tt)
def f(x: Int, sum: Int): Int = if(x == 0) sum else f(x - 1, sum + x)
val mm = System.currentTimeMillis()
val x = f(100000, 0)
val nn = System.currentTimeMillis()
println(nn-mm)
println(x)
【在 p*****2 的大作中提到】 : : 我工作不用呀。刚才看了一下,是某个test case超时了,所以不是编译的问题。计时 : 是计的那个test case。大牛帮我看看这个程序哪里可以提高一些?跟java的算法完全 : 一样。慢了那么多。 : object test { : def main(args: Array[String]): Unit = { : val s=readLine : val a=new Array[Int](s.length()) : var i=0 : var j=s.length-1
|
p*****2 发帖数: 21240 | 23
我上边怎么可以改成functional的写法呀?刚才改成while,还是过不去。
【在 l*******b 的大作中提到】 : 这个循环的测试有些意思,在linux下for比while慢1倍。在windows下20倍。 : 不过用functional的写法比前两个都快很多 : val start = System.currentTimeMillis() : var total = 0 : for(i <- 0 until 100000) total += i : val end = System.currentTimeMillis() : println(end-start) : println(total) : val ss = System.currentTimeMillis() : var tt = 0
|
t****a 发帖数: 1212 | 24 二爷我不懂scala诶,不好意思。不过我在想你是不是提交的jar? scala本身会不会要
load一堆东西使得启动变慢啊。
case
【在 p*****2 的大作中提到】 : 不对。不是编译时间的问题。我看了是某个test case 超时了。而运行这个test case : 的时候已经都编译好了。所以肯定不是编译的问题。那就真奇怪了。
|
p*****2 发帖数: 21240 | 25
Java Ruby Scala
1 46 15 281
2 46 31 218
26 156 218 515
27 140 234 609
30 140 203 656
31 656 2000 2000
收集了一些数据。Ruby小数据的时候比Java还快。但是数据增大是10倍,10倍的往上涨
。Java差不多4倍往上了,Scala增长跟Java差不多,但是一直比Java慢好几倍
【在 t****a 的大作中提到】 : 二爷我不懂scala诶,不好意思。不过我在想你是不是提交的jar? scala本身会不会要 : load一堆东西使得启动变慢啊。 : : case
|
c********t 发帖数: 5706 | 26 赞研究数据,俺交得你来工业界可惜了
【在 p*****2 的大作中提到】 : : Java Ruby Scala : 1 46 15 281 : 2 46 31 218 : 26 156 218 515 : 27 140 234 609 : 30 140 203 656 : 31 656 2000 2000 : 收集了一些数据。Ruby小数据的时候比Java还快。但是数据增大是10倍,10倍的往上涨 : 。Java差不多4倍往上了,Scala增长跟Java差不多,但是一直比Java慢好几倍
|
l*******b 发帖数: 2586 | 27 输出的时间算不? a.foreach(println) 改成 println(a.mkString("\n")) 可以省
一些输出的时间
【在 p*****2 的大作中提到】 : : Java Ruby Scala : 1 46 15 281 : 2 46 31 218 : 26 156 218 515 : 27 140 234 609 : 30 140 203 656 : 31 656 2000 2000 : 收集了一些数据。Ruby小数据的时候比Java还快。但是数据增大是10倍,10倍的往上涨 : 。Java差不多4倍往上了,Scala增长跟Java差不多,但是一直比Java慢好几倍
|
p*****2 发帖数: 21240 | 28
这样可以。还真过了time: 531 ms
for loop 640ms 差别不太大,看来这个是主因
Java Ruby Scala
1 46 31 265
2 46 31 281
26 156 171 328
27 140 156 312
30 140 187 327
31 656 2000 531
这是最新测试数据。经过菜鸟的优化之后scala明显性能提升很多。请问mkString的内
部实现机制是什么呢?我在Java里用StringBuffer先创建string,再print,可是耗时
更多,没有优化。Ruby经过优化以后性能也有提升,可是#31 test case还是超时。有
人帮看看ruby还有什么可以优化的吗?要这么看,scala还是有的玩了。
s=gets.chomp
a=[0]*s.length
i=0
j=s.length-1
s.length.times {|x|
if s[x]==?l
a[j]=x+1
j-=1
else
a[i]=x+1
i+=1
end
}
puts a.join("\n")
【在 l*******b 的大作中提到】 : 输出的时间算不? a.foreach(println) 改成 println(a.mkString("\n")) 可以省 : 一些输出的时间
|
g***i 发帖数: 408 | 29 mkString 用的是 StringBuilder |
g***i 发帖数: 408 | 30 StringBuilder的performance会好些,因为莫有sync
不过小批量区别不大
【在 p*****2 的大作中提到】 : : 这样可以。还真过了time: 531 ms : for loop 640ms 差别不太大,看来这个是主因 : Java Ruby Scala : 1 46 31 265 : 2 46 31 281 : 26 156 171 328 : 27 140 156 312 : 30 140 187 327 : 31 656 2000 531
|
|
|
y****n 发帖数: 743 | 31 大侠出山了!
【在 g***i 的大作中提到】 : StringBuilder的performance会好些,因为莫有sync : 不过小批量区别不大
|
h**********y 发帖数: 1293 | 32 学了sml才知道c++之流的设计是如此的丑陋。
语言设计大牛老师说:“sml is given by god.”
【在 p*****2 的大作中提到】 : 传说性能跟java差不多,结果发现跟ruby差不多,今天做了两题 : 第一题,ruby死活过不了,scala将将过 : 第二题,ruby,scala全部超时2000ms, java 600多ms通过 : 两道题python都可以通过,第二题用时大约1500ms : 可见scala性能跟java相差还是很远的,连python也不如,跟ruby八斤八两,强点有限 : 。白花一天时间学习了,没什么用武之地。 : 另外请教以下大牛们,以下语言性能如何,应用广泛吗? : Haskell : Ocaml
|
p*****2 发帖数: 21240 | 33
多谢。试了一下,好像也没啥区别。
【在 g***i 的大作中提到】 : StringBuilder的performance会好些,因为莫有sync : 不过小批量区别不大
|
p*****2 发帖数: 21240 | 34
sml是什么,只知道sm
【在 h**********y 的大作中提到】 : 学了sml才知道c++之流的设计是如此的丑陋。 : 语言设计大牛老师说:“sml is given by god.”
|
h**********y 发帖数: 1293 | 35 一种functional language
ocaml是其分支
【在 p*****2 的大作中提到】 : : sml是什么,只知道sm
|
l*******b 发帖数: 2586 | 36 研究了一下IO确实占主要部分,计算部分改成functional慢很多
100000个字符的输入下
Reading: ~20
Time: ~350
IO: ~1400
最开始循环的办法看起来最好 Time: ~30
for和while的区别也不大
object test2 extends App {
val beforeRead = System.currentTimeMillis
val s = readLine
val start = System.currentTimeMillis
val ss = s.zipWithIndex.partition(_._1 != 'l')
val a = ss._1.map(_._2 + 1).mkString("\n") +
ss._2.reverseMap(_._2 + 1).mkString("\n")
val end = System.currentTimeMillis
println(a)
val ioend = System.currentTimeMillis
println("Reading " + (start - beforeRead))
println("Time: " + (end - start))
println("IO: " + (ioend - end))
}
【在 p*****2 的大作中提到】 : : sml是什么,只知道sm
|
M********5 发帖数: 715 | 37 以后多向二爷学习啊。。。
【在 p*****2 的大作中提到】 : : sml是什么,只知道sm
|
p*****2 发帖数: 21240 | 38
试了一下跟你结果差不多,花费1500 ms,不过这样写代码简洁很多呀。学习了。
【在 l*******b 的大作中提到】 : 研究了一下IO确实占主要部分,计算部分改成functional慢很多 : 100000个字符的输入下 : Reading: ~20 : Time: ~350 : IO: ~1400 : 最开始循环的办法看起来最好 Time: ~30 : for和while的区别也不大 : object test2 extends App { : val beforeRead = System.currentTimeMillis : val s = readLine
|
p*****2 发帖数: 21240 | 39
你也在学这个吗?可以一起学习呀。感觉还不错。比java那个垃圾强,能做比赛,也可
以用play做些project。
【在 M********5 的大作中提到】 : 以后多向二爷学习啊。。。
|
T*******e 发帖数: 4928 | 40 哐当,我还没开始学java, 他就已经成了垃圾了。真是计划不如变化快。
你们是用Scala IDE for Eclipse作debug调试的IDE吗? |
|
|
c********t 发帖数: 5706 | 41 都能去比赛用了啊,提高的太快了。葱白!
我们农村人刚吃上肉,城里人又改吃菜了。
【在 p*****2 的大作中提到】 : : 你也在学这个吗?可以一起学习呀。感觉还不错。比java那个垃圾强,能做比赛,也可 : 以用play做些project。
|
p*****2 发帖数: 21240 | 42
scala确实把java很多垃圾的地方改进了。平时就觉得java那些地方恶心,结果一看
scala全整好了。使用eclipse,不过不是很好用。我调试只能看到局部变量。
【在 T*******e 的大作中提到】 : 哐当,我还没开始学java, 他就已经成了垃圾了。真是计划不如变化快。 : 你们是用Scala IDE for Eclipse作debug调试的IDE吗?
|
p*****2 发帖数: 21240 | 43
没有了。预选赛时间比较充沛,可以慢慢写。不过这个functional 还得熟悉一下性能
。现在摸不准性能如何。要重新建立感觉了。
【在 c********t 的大作中提到】 : 都能去比赛用了啊,提高的太快了。葱白! : 我们农村人刚吃上肉,城里人又改吃菜了。
|
T*******e 发帖数: 4928 | 44 可不可以watch非局部变量? 我现在用codeblocks在ubuntu上鼓捣c++. 找不到
哪里能像visual studio那样monitor一堆变量值,只好把我想看的变量都一个个加成
watch。
【在 p*****2 的大作中提到】 : : 没有了。预选赛时间比较充沛,可以慢慢写。不过这个functional 还得熟悉一下性能 : 。现在摸不准性能如何。要重新建立感觉了。
|
p*****2 发帖数: 21240 | 45
我现在连怎么加watch还没搞好呢。现在出了问题主要就是目测了。哎。
【在 T*******e 的大作中提到】 : 可不可以watch非局部变量? 我现在用codeblocks在ubuntu上鼓捣c++. 找不到 : 哪里能像visual studio那样monitor一堆变量值,只好把我想看的变量都一个个加成 : watch。
|
B*******1 发帖数: 2454 | 46 让俺这种天天学objective c,混饭吃的情何以堪。
天天学的连菜都算不上啊
【在 c********t 的大作中提到】 : 都能去比赛用了啊,提高的太快了。葱白! : 我们农村人刚吃上肉,城里人又改吃菜了。
|
T*******e 发帖数: 4928 | 47 你一天能上手scala很厉害了。 你们大牛们玩新潮的。我还是回去老老实实看算法,
先把面试过了再说。
【在 p*****2 的大作中提到】 : : 我现在连怎么加watch还没搞好呢。现在出了问题主要就是目测了。哎。
|
p*****2 发帖数: 21240 | 48
你是大牛,不要笑话我们菜鸟了
【在 B*******1 的大作中提到】 : 让俺这种天天学objective c,混饭吃的情何以堪。 : 天天学的连菜都算不上啊
|
p*****2 发帖数: 21240 | 49
哎。上手容易。可是什么都变成functional的写法,估计需要一段时间。现在也是慢慢
来把。
【在 T*******e 的大作中提到】 : 你一天能上手scala很厉害了。 你们大牛们玩新潮的。我还是回去老老实实看算法, : 先把面试过了再说。
|
p*****2 发帖数: 21240 | 50 感觉scala越来越好玩了。确实很适合做数学方面的题目,比如euler上边的。看来
functional programming解决数学问题有先天的优势呀。 |
|
|
x****d 发帖数: 1766 | 51 polyglot, 主菜还是Java吧。没有java,polyglot那些东东单独都成不了气候。scala
,天生二奶命,哈哈。 |