2017-07-20 13 views
5

ddルーチンはRakudo固有の機能ですが、それは私の質問に付随しています。プログラムの中に実装をチェックし、それが正しいものではない場合に救済する方法はありますか?私自身でこれを行う必要がありますか?Perl 6プログラムを特定の実装で実行するように制限できますか?

die "Unsupported VM" unless $*VM ~~ m/^ 'moar' /; 

多分私達は、Perl 5のDevel::AssertOSようなものが必要。

実装固有のプログラムの作成にはまったく関心がありませんが、ある実装にプログラムと互換性のない特定の癖やバグがあるケースを想像することができます。それは数年Javaでした(MRJを覚えていますか?)。

+0

標準では理論的には必要ありません。必要でないときに標準がこれをなぜ提供するのでしょうか? – Sylwester

+0

@Sylwesterまさにどのスタンダードを参考にしていますか? –

+0

@SinanÜnürPerl5では、ドキュメントが公式の実装と異なる場合、ドキュメンテーションは修正が必要です。 perl5のソースコードを読む必要があります。 perl6には仕様があります。 Perl 6は、公式のテストスイートに合格するものです。そして、もしこれが 'dd'をしなければ、' dd'は言語の一部ではありません。 'dd'を使うとあなたのプログラムはperl6以外のものになります。おそらくrakudoプログラムと呼ぶことができますが、perl6は呼び出すことはできません。 – Sylwester

答えて

6

あなただけMoarVMでプログラムを実行したい場合は、:

die "Must run on MoarVM, not $*VM.name()" unless $*VM.name eq 'moar'; 

が十分でなければなりません。

+1

コンパイル時に検出される前に 'BEGIN'をスティックします。 –

+0

rakudoコンパイラの特定のバージョンにロックダウンするために使用できる[RakudoPrereq](http://modules.perl6.org/dist/RakudoPrereq)モジュールもあります。 –

関連する問題