in reply to Re^3: Extending a perl program with Scheme, Lua, or JS
in thread Extending a perl program with Scheme, Lua, or JS

Initially you said "in my actual use case the performance hit might be undetectable to the person (me) using the GUI" - what kind of performance are you looking for here? Is this code going to be called in a tight loop, how often, etc.?

In the task I'm currently using this for, it gets called once for every student in the class. My classes are small, but for someone with a large class (or someone using an older machine), a delay of ~0.1 s per student could really cause a noticeable lack of responsiveness. However, I don't think that would have ended up being an issue if I had used JE, because the delay is a startup delay, and JE only needs to be started up once.

  • Comment on Re^4: Extending a perl program with Scheme, Lua, or JS

Replies are listed 'Best First'.
Re^5: Extending a perl program with Scheme, Lua, or JS
by haukex (Archbishop) on Feb 10, 2019 at 21:58 UTC
    the delay is a startup delay, and JE only needs to be started up once.

    A tradeoff would be to start up JE before processing the students, loop over them, and then destroy the interpreter after, and hope it doesn't leak too much memory in between :-) (considering that you only want to use this for simple calculations, I'd be surprised if it really became a problem).

      Yeah, that occurred to me too, but just in general the fact that it leaks memory suggests to me that it's not something high quality and well maintained, which makes me not want to commit myself to it.
        just in general the fact that it leaks memory suggests to me that it's not something high quality and well maintained, which makes me not want to commit myself to it

        I completely understand the worry. Just to clarify, the reason I wasn't too worried about the module was that the module's author, Father Chrysostomos / sprout, is one of the Perl 5 Porters. However, I just used Test::LeakTrace on a simple script, and unfortunately, according to that module it does appear to leak a lot.

        use warnings; use strict; use Devel::Size 'total_size'; $Devel::Size::warn = 0; use Test::LeakTrace; use JE; leaktrace { my $j = JE->new; $j->eval('function foo (x) { return x / 10; }'); my $rv = 0+$j->{foo}->(50); }; my $j = JE->new; print total_size($j), "\n"; # e.g. 434280 $j->eval('function foo (x) { return x / 10; }'); print total_size($j), "\n"; # e.g. 440614 for (1..100_000) { my $rv = 0+$j->{foo}->(50); } print total_size($j), "\n"; # e.g. 441601