Ideoneを使うといろんなプログラミング言語を試す事ができます。Ideoneの"What is Ideone?"には以下のように書かれています。
Ideone is an online compiler and debugging tool which allows you to compile source code and execute it online in more than 60 programming languages.
Google翻訳すると「Ideoneは、あなたがソースコードをコンパイルし、60以上のプログラミング言語でそれをオンラインで実行することを可能にするオンラインコンパイラおよびデバッグツールです。」とのことです。
ちょっと興味があったので調べてみました。(注意)興味があったところしか調べていません。
(追記)この記事を投稿した後でFAQページの下の方にある「What programming languages are supported on Ideone?」に書いてあるって教えてもらいました。バージョンも変わると思うので、そっちの方が確実かなと思います。
制限
FAQには以下のように書かれていました。コンパイルは10秒以内、実行は5秒まで(ユーザは15秒)、使用できるメモリは256Mというところでしょうか。
- compilation time: 10 seconds,
- execution time: 5 seconds (for not logged in users) or 15 seconds (for registered users),
- memory usage: 256 MB.
パフォーマンス
効率の悪いことで有名な再帰版のフィボナッチ数列をPython3の環境で実行してみました。以下のソースコードを入力し「Run」又は「ideone it!」ボタンをクリックします。ソースコードはPython Courseから引用したものです。
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
print(fib(30))
結果は以下のようになりました。fib(30)
でfib関数は270万回くらい呼び出されているはずなので、パフォーマンスの目安にはなると思います。
Success time: 0.32 memory: 9992 signal:0
832040
私の手元にあったPCで実行してみたところ以下のようになりましたので、私のPCの倍くらいは速そうです。
% time python3 fib.py
832040
real 0m0.708s
user 0m0.684s
sys 0m0.016s
Python3のバージョン
Pythonのバージョンは「3.4.3+」のようです。
import platform
print(platform.python_version())
3.4.3+
Python3で使用できるモジュール
インストールされていて使用できるモジュールは標準のものだけかと思ったのですが、以下のプログラムを実行してみたところエラーなく実行できました。どうやら標準のみではなさそうです。
import numpy as np
print(np.array([[1, 2], [3, 4]]))
[[1 2]
[3 4]]
Smalltalk
使用できるのはGNUのSmalltalkのようです。GNU版は使ったことがないのと、そもそもSmalltalkで標準出力を扱ったことがないのでどうするんだ?と戸惑ったのですが、とりあえず知っているTranscript show:
を使ってみたところ出力されました。
Transcript show: Smalltalk.Version.
GNU Smalltalk version 3.2.4
「stdin」と「stdout」がFileStreamのインスタンスであるようですので、以下のように書くこともできそうです。
Smalltalk.Version printOn: stdout.
Rubyのバージョン
print RUBY_VERSION
2.1.5
SQLのDBとバージョン
SELECT version();
がエラーになった事がヒントになりました。色々と試していったところDBはSQLiteのようです。
SELECT sqlite_version();
3.8.10.2
JavaScript
JavaScriptはrhino-1.7.7とspidermonkey 24.2を選択できるようです。以下のスクリプトはspidermonkeyで実行しています。
print(version())
185
ちょっと気になったのでPython3ときに試した再帰版のフィボナッチ数列を実行してみました。はっ、速い…JavaScriptってこんなに速かったんですね。正直驚きです。
function fib(n) {
if (n === 0) {
return 0;
} else if (n === 1) {
return 1;
} else {
return fib(n-1) + fib(n-2);
}
}
print(fib(30));
Success time: 0.02 memory: 30328 signal:0
832040
ちなにみにrhinoの環境で実行すると以下のような感じでした。
Success time: 0.36 memory: 321920 signal:0
832040