ruby scala python_解释一个基准在C,Clojure,Python,Ruby,Scala和其他

免责声明

我知道人工基准是邪恶的。它们只能针对非常特定的狭窄情况显示结果。我不认为一种语言比另一种语言更好,因为一些愚蠢的长凳。然而,我不知道为什么结果是如此不同。请在底部查看我的问题。

数学基准描述

基准是简单的数学计算,找到不同6的素数对(所谓的sexy primes)

例如。性感素质低于100将是:(5 11)(7 13)(11 17)(13 19)(17 23)(23 29)(31 37)(37 43)(41 47)(47 53) )(61 67)(67 73)(73 79)(83 89)(97 103)

结果表

表中:计算时间(秒)

运行:all除了Factor在VirtualBox中运行(Debian unstable amd64 guest,Windows 7 x64主机)

CPU:AMD A4-3305M

Sexy primes up to: 10k 20k 30k 100k

Bash 58.00 200.00 [*1] [*1]

C 0.20 0.65 1.42 15.00

Clojure1.4 4.12 8.32 16.00 137.93

Clojure1.4 (optimized) 0.95 1.82 2.30 16.00

Factor n/a n/a 15.00 180.00

Python2.7 1.49 5.20 11.00 119

Ruby1.8 5.10 18.32 40.48 377.00

Ruby1.9.3 1.36 5.73 10.48 106.00

Scala2.9.2 0.93 1.41 2.73 20.84

Scala2.9.2 (optimized) 0.32 0.79 1.46 12.01

[* 1] – 恐怕想象要花多少时间

代码列表

C:

int isprime(int x) {

int i;

for (i = 2; i < x; ++i)

if (x%i == 0) return 0;

return 1;

}

void findprimes(int m) {

int i;

for ( i = 11; i < m; ++i)

if (isprime(i) && isprime(i-6))

printf("%d %d\n", i-6, i);

}

main() {

findprimes(10*1000);

}

红宝石:

def is_prime?(n)

(2...n).all?{|m| n%m != 0 }

end

def sexy_primes(x)

(9..x).map do |i|

[i-6, i]

end.select do |j|

j.all?{|j| is_prime? j}

end

end

a = Time.now

p sexy_primes(10*1000)

b = Time.now

puts "#{(b-a)*1000} mils"

Scala:

def isPrime(n: Int) =

(2 until n) forall { n % _ != 0 }

def sexyPrimes(n: Int) =

(11 to n) map { i => List(i-6, i) } filter { _ forall(isPrime(_)) }

val a = System.currentTimeMillis()

println(sexyPrimes(100*1000))

val b = System.currentTimeMillis()

println((b-a).toString + " mils")

Scala opimized isPrime(同样的想法在Clojure优化):

import scala.annotation.tailrec

@tailrec // Not required, but will warn if optimization doesn't work

def isPrime(n: Int, i: Int = 2): Boolean =

if (i == n) true

else if (n % i != 0) isPrime(n, i + 1)

else false

Clojure:

(defn is-prime? [n]

(every? #(> (mod n %) 0)

(range 2 n)))

(defn sexy-primes [m]

(for [x (range 11 (inc m))

:let [z (list (- x 6) x)]

:when (every? #(is-prime? %) z)]

z))

(let [a (System/currentTimeMillis)]

(println (sexy-primes (* 10 1000)))

(let [b (System/currentTimeMillis)]

(println (- b a) "mils")))

Clojure优化is-prime?:

(defn ^:static is-prime? [^long n]

(loop [i (long 2)]

(if (= (rem n i) 0)

false

(if (>= (inc i) n) true (recur (inc i))))))

蟒蛇

import time as time_

def is_prime(n):

return all((n%j > 0) for j in xrange(2, n))

def primes_below(x):

return [[j-6, j] for j in xrange(9, x+1) if is_prime(j) and is_prime(j-6)]

a = int(round(time_.time() * 1000))

print(primes_below(10*1000))

b = int(round(time_.time() * 1000))

print(str((b-a)) + " mils")

因子

MEMO:: prime? ( n -- ? )

n 1 - 2 [a,b] [ n swap mod 0 > ] all? ;

MEMO: sexyprimes ( n n -- r r )

[a,b] [ prime? ] filter [ 6 + ] map [ prime? ] filter dup [ 6 - ] map ;

5 10 1000 * sexyprimes . .

Bash(zsh):

#!/usr/bin/zsh

function prime {

for (( i = 2; i < $1; i++ )); do

if [[ $[$1%i] == 0 ]]; then

echo 1

exit

fi

done

echo 0

}

function sexy-primes {

for (( i = 9; i <= $1; i++ )); do

j=$[i-6]

if [[ $(prime $i) == 0 && $(prime $j) == 0 ]]; then

echo $j $i

fi

done

}

sexy-primes 10000

问题

>为什么Scala是这么快?是因为静态类型吗?还是它只是使用JVM非常有效?

>为什么Ruby和Python之间有巨大的区别?我认为这两个不是有点完全不同。也许我的代码是错误的。请指教我!谢谢。 UPD是的,这是我的代码中的错误。 Python和Ruby 1.9是相当相等的。

> Ruby版本之间的生产力令人印象深刻。

>我可以通过添加类型声明来优化Clojure代码吗?它会有帮助吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Python]两个list对应元素操作(相减)

两个list的对应元素操作&#xff0c;这里以相减为例&#xff1a; # codinggbkv1 [21, 34, 45] v2 [55, 25, 77]#v v2 - v1 # Error: TypeError: unsupported operand type(s) for -: list and list v list(map(lambda x: x[0]-x[1], zip(v2, v1))) print("%s\n%s\n%…

Win7启动修复MBR(Win7+Linux删除Linux后进入grub rescue的情况)

事因&#xff1a;我的笔记本原先同时安装了Win7Linux&#xff0c;昨天发现硬盘实在不够用&#xff08;才60G&#xff0c;虽然还有个500G的移动硬盘&#xff09;&#xff0c;就想把里面的Ubuntu格了。都是用虚拟机做测试的多。后来就格了Ubuntu所在的分区。重启后出现命令窗口&a…

[书籍推荐]《软件设计精要与模式(第2版)》-张逸——提高设计模式及软件设计的方法...

《软件设计精要与模式&#xff08;第2版&#xff09;》是园子里张逸大大今年4月出版的关于软件设计及设计模式方面的书&#xff0c;我是5月下旬到手&#xff0c;每天晚上看一章&#xff0c;断断续续的到昨天晚上总算把全书28章看完了&#xff0c;感受很深&#xff0c;以往在设计…

solor mysql_solr 同步 mysql

一、首先创建一个数据库和表这里创建了一个表&#xff0c;加上了测试数据&#xff0c;注意这里有一个字段来记录更新时间 update_date二、修改配置文件我们首先介绍全量同步&#xff0c;再介绍增量同步我的 solr 版本是 7.5 的&#xff0c;new_core是我创建的 core&#xff0c…

C++调用Python函数

From: http://www.flatws.cn/article/program/c/2010-08-24/9677.html Python代码在实现某些功能的时候非常方便&#xff0c;如果能够将Python代码与C程序结合起来&#xff0c;那么一定会使Problem Solving方便许多&#xff08;比如&#xff0c;游戏脚本系统&#xff09;~ 从学…

配置ubuntu使用console登录登录欢迎提示

使用ssh或console登陆成功后&#xff0c;ubuntu会顺序执行/etc/update-motd.d中的脚本 有些linux的登陆提示信息放在了/etc/ssh/sshd_config中的Banner配置项中 转载于:https://www.cnblogs.com/chen310/p/4431474.html

网络命令大全(9)--runas

Runas 允许用户用其他权限运行指定的工具和程序&#xff0c;而不是用户当前登录提供的权限。语法runas [{/profile/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program 参数/profile 加载用户的配置文件。/profile 是…

java canvas 缩放图片_详解如何用HTML5 Canvas API控制图片的缩放变换

摘要&#xff1a;这篇HTML5栏目下的“详解如何用HTML5 Canvas API控制图片的缩放变换”&#xff0c;介绍的技术点是“html5_canvas、canvas、Html5、控制图片、api、图片”&#xff0c;希望对大家开发技术学习和问题解决有帮助。缩放变换scale(sx,sy)传入两个参数&#xff0c;分…

C语言中执行python代码或源程序文件(高级嵌入方式)

环境&#xff1a;Fedora12 Python2.6 C 1. 建立python源代码文件(del.py)&#xff1a; #!/usr/bin/env pythondef calculate(expression):try:result eval(expression)except:print("Eval Error!")return Nonereturn resultif __name__ "__main__":f …

向周鸿祎的360安全浏览器学互联网产品运营和推广

做互联网产品运营就要像周鸿祎一样&#xff0c;老周一直是运营流的大力倡导者&#xff0c;而360安全浏览器则是老周给我们上的产品运营又一课&#xff0c;醍醐灌顶&#xff0c;如梦初醒。 下图是截止到今年6月中国网民的浏览器使用情况图&#xff1a; 根据CNZZ的数据&#xff0…

java中的locksupport_java中线程的停止以及LockSupport工具类

看jstack输出的时候&#xff0c;可以发现很多状态都是TIMED_WAITING(parking)&#xff0c;如下所示&#xff1a;"http-bio-8080-exec-16" #70 daemon prio5 os_prio0 tid0x00007f6088027800 nid0x3a1f waiting on condition [0x00007f60fcd03000]java.lang.Thread.St…

React小结

1. setState setState更新状态的2种写法 (1). setState(stateChange, [callback])------对象式的setState 1.stateChange为状态改变对象(该对象可以体现出状态的更改) 2.callback是可选的回调函数, 它在状态更新完毕、界面也更新后(render调用后)才被调用 (2). setState(updat…

4-17学习

//设置自动行数与字符换行 [label setNumberOfLines:0]; label.lineBreakMode UILineBreakModeWordWrap; /** 去除多余分割线 */ self.tableView.tableFooterView [[UIView alloc]init];转载于:https://www.cnblogs.com/pocket-mood/p/4435711.html

PyRun_SimpleFile()崩溃问题

From: http://blog.csdn.net/jq0123/article/details/1504406 PyRun_SimpleFile()造成程序崩溃&#xff0e;例程如下&#xff1a;#include "python.h"int main(){ Py_Initialize(); FILE * fp fopen("test.py", "r"); if …

翻译:Asp.net中多彩下拉框的实现

开发背景&#xff1a; 有人曾经要我开发一个根据不同选择而显示不同颜色的管理工具。我开始考虑利用下拉框来实现条目背景及显示颜色根据条目名称不同而进行变化&#xff0c;根据这个思路我在网上搜了半天也没有找到任何相关的解决方案&#xff0c;最后我想到了一个比当初需…

深入react技术栈(8):事件系统

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号搜索前端小歌谣获取前端知识 1合成事件的绑定方式 2合成事件的实现机制 3在React中使用原生事件 4合成事件和原生事件混用 5对比react与原生事件 文章参考深入React技术栈

java mac jconsole_解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题

今天遇到了这样一种情况&#xff0c;自己的maven项目中并没有引用的jar包出现在了Maven Dependencies的依赖包中。而我在pom.xml自己没有没有引入啊.图示怀疑是自己的alibaba 的druid所依赖的包&#xff1a;com.alibabadruid1.0.14然后查看了它的相关依赖&#xff0c;果然找到了…