C/C++ のコードを ActionScript に変換する Adobe Alchemy を試す
Adobe Labs の研究プロジェクト、コードネーム Alchemy を試してみた。同プロジェクトについては、すでに多くの方が書かれており、今更な感もあるが、以前に紹介記事を書いていることだし、備忘録も兼ねて残しておく。
C 言語で書かれたソフトウェアが Flash で動くようになるかもしれない
Running C and Python Code on The Web によると、Adobe の Scott Petersen 氏が大変興味深いツールを開発中のようだ。このツールを使うと、C 言語で書かれたソフトウェアを Flash Player で実行できるようになる。また、このツールはオープンソースで公開されるとのこと。
LLVM で Hello, World の puts 関数
前回のように簡単なプログラムでも、実際に書いてみると疑問が湧いてくる。
まず、文字列を出力している puts 関数。こいつの実体はどこにあるんだろう? C のプログラムなら、リンカが標準ライブラリをこっそりリンクしている、という結末になるのだが...。検索してみると、やはり、同じように疑問をもった人がいるようで、lli が実行時のライブラリとして標準 C ライブラリを利用しているらしい。
ということは printf なんかも使えるはずだよね。
@.LC0 = internal constant [14 x i8] c"Hello world!\0A\00"
declare i32 @printf(i8 *, ...)
define i32 @main() {
%cast210 = getelementptr [14 x i8]* @.LC0, i64 0, i64 0
call i32 (i8 *, ...)* @printf(i8 * %cast210)
ret i32 0
}
では、コンパイル、実行。
% llvm-as -f hello-printf.ll
% lli hello-printf.bc
Hello world!
うんうん。
LLVM で Hello, World
LLVM で Hello, World プログラム。
@.LC0 = internal constant [13 x i8] c"Hello world!\00"
declare i32 @puts(i8 *)
define i32 @main() {
%cast210 = getelementptr [13 x i8]* @.LC0, i64 0, i64 0
call i32 @puts(i8 * %cast210)
ret i32 0
}
バイトコードにコンパイルして実行。
% llvm-as -f hello.ll
% lli hello.bc
Hello world!
まあ、プログラム自体は LLVM Assembly Language Reference Manual からの抜粋なわけだが。