PerlとRubyの夢の架け橋、それがParrot
Cross-language library loading on Parrot – Stephen Weeksより。
開発中のPerl6がParrotと呼ばれるVirtualMachine上で動作するのは知っている人も多いはず。Virtual Machine上なので、他の言語をParrot上で動作するように移植する事ももちろん可能。
現在はPerl6(rakudo)とParrot上で動作するRuby(cardinal まだまだ未完成版)が一部ではあるが、モジュールを相互に呼び出せるようになってきている。
その文法は以下のよう。
モジュールの呼び出し方
Perl6からRubyのモジュールを呼び出す場合
use Foo:lang<cardinal>;
RubyからPerl6のモジュールを呼び出す場合
foreign_load('perl6','Foo/Bar')
ここに書いてあるコードを検証しようと環境を構築してみたのだが、”load_language” couldn’t find a compiler module for the language ‘cardinal’とエラーになってしまい、検証できず。解決方法も今のところ不明(どなたか、教えてください…)
って事で、そのままコードを転載。こんな風に動くようになる。
RubyからPerlのモジュールを呼び出す
[sweeks@kweh ~]$ cat Foo.pm
module Foo {
sub greet($name) is export {
say "Hello, $name!"
}
}
[sweeks@kweh ~]$ cat perl6.rb
foreign_load 'perl6', 'Foo'
['Ruby', 'Perl', 'World'].each { |name| greet name }
[sweeks@kweh ~]$ cardinal perl6.rb
Hello, Ruby!
Hello, Perl!
Hello, World!
PerlからRubyのモジュールを呼び出す
[sweeks@kweh ~]$ cat Foo.rb
module Foo
def greet(name)
puts "hello, " + name
end
end
[sweeks@kweh ~]$ cat ruby.pl
use Foo:lang;
greet("person $_") for 1..5;
[sweeks@kweh ~]$ perl6 ruby.pl
hello, person 1
hello, person 2
hello, person 3
hello, person 4
hello, person 5
これが実用になったら、それぞれの言語にあるライブラリが利用できるようになるので、ライブラリを作成する必要がほとんどなくなってしまう。
ほんと夢のような話なのだが、これが実現する日がもう目の前に。
こちらもあわせてどうぞ
Comments
コメントをどうぞ...

