develooper Front page | perl.perlfaq.workers | Postings from January 2005

perlfaq3: How can I compile my Perl program into byte code or C?

Thread Previous | Thread Next
From:
_brian_d_foy
Date:
January 3, 2005 11:46
Subject:
perlfaq3: How can I compile my Perl program into byte code or C?
Message ID:
030120051146307692%comdog@panix.com
* How can I compile my Perl program into byte code or C?

   + I completely replaced the answer to update it for this
   millineum :)

   + Mention Perl2Exe, Perl Dev Kit, PAR, and B

   + I assume the real question is "How can I bundle everything
   in one file" or "How do I hide my source?"

   + Point to "How can I make my Perl program run faster?"
   in case that's really what they want

   + Along with this, I think we should update the answers 
   on making Perl run faster and hiding source code, but I'll
   save those for another day.

Index: perlfaq3.pod
===================================================================
RCS file: /cvs/public/perlfaq/perlfaq3.pod,v
retrieving revision 1.43
diff -u -d -r1.43 perlfaq3.pod
--- perlfaq3.pod        3 Jan 2005 18:43:37 -0000       1.43
+++ perlfaq3.pod        3 Jan 2005 19:42:31 -0000
@@ -753,41 +753,37 @@
 
 =head2 How can I compile my Perl program into byte code or C?
 
-Malcolm Beattie has written a multifunction backend compiler,
-available from CPAN, that can do both these things.  It is included
-in the perl5.005 release, but is still considered experimental.
-This means it's fun to play with if you're a programmer but not
-really for people looking for turn-key solutions.
+(contributed by brian d foy)
 
-Merely compiling into C does not in and of itself guarantee that your
-code will run very much faster.  That's because except for lucky cases
-where a lot of native type inferencing is possible, the normal Perl
-run-time system is still present and so your program will take just as
-long to run and be just as big.  Most programs save little more than
-compilation time, leaving execution no more than 10-30% faster.  A few
-rare programs actually benefit significantly (even running several
times
-faster), but this takes some tweaking of your code.
+In general, you can't do this.  There are some things that may work
+for your situation though.  People usually ask this question
+because they want to disttribute their works without giving away 
+the source code, and most solutions trade disk space for convenience.
+You probably won't see much of a speed increase either, since most
+solutions simply bundle a Perl interpreter in the final product 
+(but see L<How can I make my Perl program run faster?>).
 
-You'll probably be astonished to learn that the current version of the
-compiler generates a compiled form of your script whose executable is
-just as big as the original perl executable, and then some.  That's
-because as currently written, all programs are prepared for a full
-eval() statement.  You can tremendously reduce this cost by building a
-shared I<libperl.so> library and linking against that.  See the
-F<INSTALL> podfile in the Perl source distribution for details.  If
-you link your main perl binary with this, it will make it minuscule.
-For example, on one author's system, F</usr/bin/perl> is only 11k in
-size!
+The Perl Archive Toolkit (http://par.perl.org/index.cgi) is
+Perl's analog to Java's JAR.  It's freely available and on
+CPAN (http://search.cpan.org/dist/PAR/).
+
+The B::* namespace, often called "the Perl compiler", but is
+really a way for Perl programs to peek at its innards rather
+than create pre-compiled versions of your program.
+
+There are also some commercial products that may work for
+you, although you have to buy a license for them.
+
+The Perl Dev Kit
+(http://www.activestate.com/Products/Perl_Dev_Kit/) from
+ActiveState can "Turn your Perl programs into ready-to-run
+executables for HP-UX, Linux, Solaris and Windows."
+
+Perl2Exe (http://www.indigostar.com/perl2exe.htm) is a
+command line program for converting perl scripts to
+executable files.  It targets both Windows and unix
+platforms.
 
-In general, the compiler will do nothing to make a Perl program
smaller,
-faster, more portable, or more secure.  In fact, it can make your
-situation worse.  The executable will be bigger, your VM system may
take
-longer to load the whole thing, the binary is fragile and hard to fix,
-and compilation never stopped software piracy in the form of crackers,
-viruses, or bootleggers.  The real advantage of the compiler is merely
-packaging, and once you see the size of what it makes (well, unless
-you use a shared I<libperl.so>), you'll probably want a complete
-Perl install anyway.
 
 =head2 How can I compile Perl into Java?

-- 
brian d foy, comdog@panix.com

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About