maekawatoshiki
8/3/2015 - 12:20 PM

JITコンパイラライクなものを作ってみた ref: http://qiita.com/maekawatoshiki/items/320465127ae569607ebf

JITコンパイラライクなものを作ってみた ref: http://qiita.com/maekawatoshiki/items/320465127ae569607ebf

i = 2
isprime = 1
while i < 100000
    k = 2
    isprime = 1
    while k * k <= i
        if i % k == 0
            isprime = 0
            break
        end
        k += 1
    end
    puts i if isprime == 1
    i += 1
end
""" run:
$ time ruby2.1.2 prime.rb
"""
#include <stdio.h>

int main()
{
    int i, isprime;
    for(i = 2; i < 100000; i++) {
        int k;
        isprime = 1;
        for(k = 2; k * k <= i; k++) {
            if(i % k == 0) {
                isprime = 0;
                break;
            }
        }
        if(isprime == 1) {
            printf("%d\n", i);
        }
    }
    return 0;
}
/*
Compile: 
$ gcc prime.c -O0 
$ time ./a.out
*/
#自作JITコンパイル言語 (lit)
i = 2
isprime = 1
while i < 100000
 k = 2
 isprime = 1
 while k * k <= i
  if i % k == 0
   isprime = 0
   break
  end
  k = k + 1
 end
 if isprime == 1
  print i
 end
 i = i + 1
end
# run
# $ ./lit 
# コードを入力
# 数字の表示
# Hello world したいところですが、文字列が使えない...
print 43
print 123456789 # 32bit 符号付き整数のみ対応

# 変数と計算
# 英文字で始まれば変数です。宣言は必要ありません。
var = 12
i = 43
var = i + var * (12 / 5) # 小数が使えないので、12/5=2
var = (var / 12) % 12 # モジュロもできる

# 条件判断たち
# if と while が使えます
i = 1 
while i < 10
 if i % 2 == 0 
  print 22222
 elsif i % 3 == 0 
  print 33333
 else
  print i
 end
 i = i + 1
end