-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
If you're writing a runnable script in Perl 6, I would recommend to
*always* use a MAIN sub[1]. If you're using that, you can easily
achieve the precompilation as well, with 1 line of code less.
You'd have your code in lib/Your/Program/Main.pm6:
sub MAIN (
# You can let Perl 6 handle arguments here
) is export {
# Program code here
}
Next, the script that you actually run would be in bin/program, and
contain the following code:
use lib "./";
use Your::Program::Main;
This should give you all of the Perl 6 MAIN goodness, and a faster
program.
[1]: https://docs.perl6.org/language/functions#index-entry-MAIN
On Mon, 6 Aug 2018 10:56:43 +0100
Simon Proctor <[email protected]> wrote:
> So Perl6 is a lot like Python in that modules get compiled to byte
> code making them a lot faster to parse the second time around.
>
> If you're running a 6000 line script then a lot of time is going to be
> spent parsing your script every time you run it. If you instead take
> all your script code and pop it into a module and have a script along
> the lines of :
>
> use lib "./";
> use System;
>
> System::start();
>
> (Where your module code is called System.pm6 and start is the entry
> point subroutine).
>
> I think you'd find this improves the speed of the script
> significantly.
>
> On Mon, 6 Aug 2018 at 10:38 ToddAndMargo <[email protected]>
> wrote:
>
> > On 08/06/2018 02:07 AM, ToddAndMargo wrote:
> > > On 08/06/2018 01:02 AM, Simon Proctor wrote:
> > >> Sorry I wrote my earlier email on my phone without a computer to
> > >> hand. Here's a quick rundown on what I'm talking about.
> > >>
> > >> --stagestats gives you the breakdown on how much time is spent
> > >> doing various steps (note that using time instead of date; date
> > >> gives you a better timing of how long something took.
> > >>
> > >> time perl6 --stagestats -e ""
> > >> Stage start : 0.000
> > >> Stage parse : 0.089
> > >> Stage syntaxcheck: 0.000
> > >> Stage ast : 0.000
> > >> Stage optimize : 0.001
> > >> Stage mast : 0.004
> > >> Stage mbc : 0.000
> > >> Stage moar : 0.000
> > >>
> > >> real 0m0.144s
> > >> user 0m0.155s
> > >> sys 0m0.032s
> > >>
> > >> And generally that's going to be the case for most short
> > >> programs, in these cases especially moving to having the core of
> > >> your code in modules with give you a speed boost.
> > >>
> > >> Sorry if my comments earlier were unhelpful.
> > >>
> > >> Simon
> > >>
> > >> On Mon, 6 Aug 2018 at 08:56 ToddAndMargo <[email protected]
> > >> <mailto:[email protected]>> wrote:
> > >>
> > >> >> On Sun, 5 Aug 2018, 23:45 Elizabeth Mattijsen,
> > >> >> <[email protected]
> > >> <mailto:[email protected]>
> > >> >> <mailto:[email protected] <mailto:[email protected]>>> wrote:
> > >> >>
> > >> >> > On 1 Aug 2018, at 20:14, ToddAndMargo
> > >> <[email protected] <mailto:[email protected]>
> > >> >> <mailto:[email protected]
> > >> <mailto:[email protected]>>> wrote:
> > >> >> > Is it just me or does Perl 6 take about three
> > >> >> > times as
> > >> long to
> > >> >> > start up as Perl 5? I do have a very fast
> > >> >> > machine and it
> > >> takes
> > >> >> > about seven see for some of my Perl 6 stuff to
> > >> >> > get past
> > >> the
> > >> >> > ruminating phase and start running.
> > >> >>
> > >> >> Seven seconds? Seven? That seems *very* long
> > >> >> indeed.
> > >> >>
> > >> >> How long does it take to do:
> > >> >>
> > >> >> perl6 -e ‘’
> > >> >>
> > >> >> ? That should be in the order of 130 msecs. If
> > >> >> that’s the
> > >> case,
> > >> >> then you’re probably doing a lot of grammar changes
> > >> >> to Perl
> > >> 6. But
> > >> >> without the actual code, this remains guessing.
> > >> >>
> > >> >>
> > >> >> > Any workaround for this, or is this just growing
> > >> >> > pains
> > >> for Perl 6?
> > >> >>
> > >> >> Not sure :-)
> > >> >>
> > >> >>
> > >> >>
> > >> >> Liz
> > >> >>
> > >> >> --
> > >> >> Simon Proctor
> > >> >> Cognoscite aliquid novum cotidie
> > >>
> > >> On 08/05/2018 10:57 PM, Simon Proctor wrote:
> > >> > Have you tried running with --stagestats which gives you
> > >> > a break
> > >> down of
> > >> > where the time is being spent?
> > >> >
> > >> > On thing is if you are running large script files it came
> > >> > take a
> > >> while.
> > >> > Moving your code into modules, which get precompiled can
> > >> > give a significant speed boost.
> > >>
> > >> Does this tell you anything?
> > >>
> > >> $ curl --fail --head https://google.com; echo $?
> > >> HTTP/2 301
> > >> location: https://www.google.com/
> > >> content-type: text/html; charset=UTF-8
> > >> date: Mon, 06 Aug 2018 05:19:51 GMT
> > >> expires: Wed, 05 Sep 2018 05:19:51 GMT
> > >> cache-control: public, max-age=2592000
> > >> server: gws
> > >> content-length: 220
> > >> x-xss-protection: 1; mode=block
> > >> x-frame-options: SAMEORIGIN
> > >> alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
> > >>
> > >> 0
> > >>
> > >> --
> > >> Simon Proctor
> > >> Cognoscite aliquid novum cotidie
> > >
> > > real 0m14.580s
> > > user 0m13.723s
> > > sys 0m0.418s
> >
> >
> > The program is 6160 line long plus a bunch of imported
> > modules.
> >
> > The Perl 5 version of this program that starts three
> > times faster is 6354 lines long plus a bunch if imported
> > modules.
> >
> > The slow start is not a reason to go back to p5 for
> > any reason. It would just be nice if it started faster.
> >
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEE4eL662U9iK2ST2MqN/W6H45XOE8FAltoHxYACgkQN/W6H45X
OE+CKwf7B5Qqm90qg9ofY6SFiDQEbE3lBPBOn8QsXnkjSF6/sgIhXLuDESa//2oe
na2nguEldNViEXg33rx99XUhkCkFTDEpYiMGBnjseeFQ9m5Z4qum0YmnMyatBkL7
fg+WedSKJEPP2IuRRD8AXQIoO9vPvtGZy14lEaDfoFkwK2r1QhH4+0lyBZOnw/TX
5rNHTCBcyEgqEgDzb0pOXsIDcgHLtM/oSPb4OQ7k5YA8wPE1QMVS+3CTtTXlMOVg
uUi/uVHMws8XLn5thNfuAvSqriYXoQJONLvkAUnl36P+z1bzz5pwB5qJtPHeLFf4
KKhAzf5twrGuY30rx82bG1da/xBrlg==
=UG3r
-----END PGP SIGNATURE-----