見出し画像

プログラム言語の処理速度ワールドカップ

今朝は5時半に起きました。
昨日やってみたCythonとGO言語の速度対決

を他の言語でもやってみたくなりました。題して「プログラム言語の処理速度ワールドカップ」です。サッカーのワールドカップは2日間お休みなので時間があるためです。
使ったことのある言語に昨日のテストプログラムを写経して試してみました。
まずは、結果から

優勝はCythonで準優勝はGO言語でした。
日本代表のRubyはPerl を抜いてベスト8に入っています。「おめでとう」

C言語とRustは、急いて作ったので何か間違っているかもしれません。
VAR判定が必要かもしれません。
とりあえず、プログラムを載せておきます。
Node.js


function sumtest(n) {
	console.log("node.js sumtest("+ n +") が呼ばれた")
	let sum = 0
	for (let i = 1; i < n+1; i++) {
		sum += i
	}
	return sum
}

console.time("sumtest")
const n = 100000000 // 1億までの和
const s = sumtest(n)
console.timeEnd("sumtest")
console.log("sumtest(" + n +") = "+ s + "\t")

PHP

<?php

function sumtest($n)  {
	printf("PHP sumtest(%d) が呼ばれた", $n);
	$sum = 0;
	for ($i = 1; $i < $n+1; $i++) {
		$sum += $i;
	}
	return $sum;
}

$st = microtime(true);
$n = 100000000; // 1億までの和
$s = sumtest($n);
$d = microtime(true) - $st;
printf("sumtest(%d) = %d\t経過時間 = %f\n", $n, $s, $d);

Perl

use Time::HiRes qw( gettimeofday tv_interval );

sub sumtest {
  local($n) = @_;
	printf("PHP sumtest(%d) が呼ばれた", $n);
	$sum = 0;
	for ($i = 1; $i < $n+1; $i++) {
		$sum += $i;
	}
	return $sum;
}

$st = [gettimeofday];
$n = 100000000; # 1億までの和
$s = sumtest($n);
$d = tv_interval($st);
printf("sumtest(%d) = %d\t経過時間 = %f\n", $n, $s, $d);

Rust

use std::time::{Instant};

fn sumtest(n: i64) -> i64 {
	println!("Rust sumtest({}) が呼ばれた", n);
	let mut sum: i64 = 0;
	for i in 1..n+1{
		sum += i;
	}
	return sum;
}


fn main() {
	let st =  Instant::now();
	let n: i64 = 100000000; // 1億までの和
	let s = sumtest(n);
  let end = st.elapsed();
	println!("sumtest({}) = {}\t経過時間 = {}.{:03}\n", n, s,  end.as_secs(), end.subsec_nanos() / 1_000_000);
}

Ruby


def sumtest(n)
	printf("ruby sumtest(%d) が呼ばれた", n)
	sum = 0
	for i  in 1..n do
		sum += i
  end
	return sum
end

st = Time.now
n = 100000000 # 1億までの和
s = sumtest(n)
d = Time.now - st
printf("sumtest(%d) = %d\t経過時間 = %f\n", n, s, d)

のような感じです。

明日に続く


開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。