Ticket #77 (closed feature: invalid)

Opened 6 years ago

Last modified 3 years ago

Parrot::Interpreter - should support multi-level namespaces

Reported by: szabgab Owned by:
Priority: normal Milestone:
Component: hll_interop Version: trunk
Severity: medium Keywords:
Cc: Language:
Patch status: Platform:

Description

Rakudo uses two levels of namespaces while the find_global method of Parrot::Interpreter can handle only one level.

Attached is a test file that loads perl6.pbc and then tries to find it main sub.

Attachments

perl6.t Download (0.8 KB) - added by szabgab 6 years ago.
ext/Parrot-Embed/t/perl6.t
cardinal.t Download (0.8 KB) - added by szabgab 6 years ago.
ext/Parrot-Embed/t/cardinal.t
languages.t Download (0.9 KB) - added by szabgab 6 years ago.
ext/Parrot-Embed/t/languages.t

Change History

Changed 6 years ago by szabgab

ext/Parrot-Embed/t/perl6.t

Changed 6 years ago by szabgab

ext/Parrot-Embed/t/cardinal.t

Changed 6 years ago by allison

Language tests shouldn't be mixed in with core tests. Instead of adding separate test files in ext/Parrot-Embed/t/ for every language, add one test file ext/Parrot-Embed/t/languages.t, and test a core language (abc is guaranteed to be in the main repository through 1.0 and beyond).

If you want to test Parrot::Embed with other languages, those tests belong in languages/perl6/t/, languages/cardinal/t/, etc.

Changed 6 years ago by szabgab

ext/Parrot-Embed/t/languages.t

Changed 6 years ago by szabgab

Proposed API

The initialization should be same as now

my $parrot = Parrot::Interpreter->new();
$parrot->load_file("path/to/language.pbc");

Allowing several levels of namespaces (currently only one is supported)

my $sub_pmc = $parrot->find_global( 'name_of_sub', 'Name', 'Space' );

This is what is in the docs currently but it only accepts a single $arg not @args

my $result_pmc  = $sub_pmc->invoke( $signature, @args );

Actually I don't understand why do we need to pass the signature here as parameter it would be more simple to have this

my $result_pmc  = $sub_pmc->invoke( @args );

But then also support these

my $result_pmc  = $sub_pmc->invoke( \@args );
my $result_pmc  = $sub_pmc->invoke( \%args );
my $result_pmc  = $sub_pmc->invoke( \%args, \%more_args, ... );

Some of the languages will be able to handle hash references as parameters.

I don't understand why does it get the $interpreter as a paramater in the docs I think this should be enough:

my $str = $result_pmc->get_string;

But probably also

my @data = $result_pmc->get_list;

Later maybe also

$result_pmc->get_array_ref;
$result_pmc->get_hash_ref;

Later we can wrap them into something like

sub exe {
    my $result_pmc  = $sub_pmc->invoke( @_ );
    if (wantarray) {
        return $result_pmc->get_list;
    } else {
        return $result_pmc->get_string;
    }
}

Changed 5 years ago by jkeenan

  • component changed from none to hll_interop

Changed 3 years ago by benabik

  • status changed from new to closed
  • resolution set to invalid

Parrot::Embed and Parrot::Interpreter have been removed from parrot. This ticket has been replaced with  https://github.com/parrot/parrot-embed/issues/1

Note: See TracTickets for help on using tickets.