2017-07-20 20 views
5

Procedura dd jest specyficzna dla Rakudo, ale jest to przypadkowa kwestia mojego pytania. Czy jest jakiś sposób wewnątrz programu, aby sprawdzić implementację i wyskoczyć, jeśli nie jest właściwy? Czy muszę to zrobić na własną rękę?Czy mogę ograniczyć program Perl 6 do działania w ramach konkretnej implementacji?

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

Może potrzebujemy czegoś podobnego do Perla 5: Devel::AssertOS.

Nie jestem w ogóle zainteresowany tworzeniem programów specyficznych dla realizacji, ale mogę sobie wyobrazić przypadki, w których jedna implementacja ma szczególne dziwactwa i błędy, które są niezgodne z programem. Ponieważ, wiesz, to była Java od kilku lat (pamiętasz MRJ?).

+0

Teoretycznie nie potrzebujesz tego, jeśli zachowasz standard. Dlaczego standard zapewniałby to, gdy nie był potrzebny? – Sylwester

+0

@Sylwester Dokładnie o jakim standardzie się powołujesz? –

+0

@ SinanÜnür In Perl5, jeśli dokumentacja różni się od oficjalnej implementacji, wówczas dokumentacja wymaga naprawy. musisz przeczytać kod źródłowy perl5 dla spec. Dla perl6 istnieje specyfikacja. Perl 6 to wszystko, co przechodzi przez oficjalny pakiet testowy. A zatem jeśli to nie robi 'dd', to' dd' nie jest częścią języka. Użycie 'dd' spowoduje, że twój program będzie czymś innym niż perl6. Można to nazwać programem rakudo, ale nie perl6. – Sylwester

Odpowiedz

6

Jeśli chcesz uruchomić program tylko na MoarVM, a następnie:

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

powinno wystarczyć.

+1

I przytrzymaj 'BEGIN' przed nim, aby go wykryć podczas kompilacji. –

+0

Istnieje również moduł [RakudoPrereq] (http://modules.perl6.org/dist/RakudoPrereq), którego można użyć do zablokowania konkretnej wersji kompilatora rakudo. –