Path: utzoo!mnetor!uunet!lll-winken!lll-lcc!ames!elroy!devvax!lwall From: lwall@devvax.JPL.NASA.GOV (Larry Wall) Newsgroups: comp.sources.d Subject: Re: Suggested new feature for perl Message-ID: <1490@devvax.JPL.NASA.GOV> Date: 5 Mar 88 00:31:52 GMT References: <7440@ncoast.UUCP> Reply-To: lwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) Organization: Jet Propulsion Laboratory, Pasadena, CA. Lines: 82 In article <7440@ncoast.UUCP> allbery@ncoast.UUCP (Brandon S. Allbery) writes: : Now that I have perl running on ncoast (!@#$%&* compiler bugs! It may get : tossed in favor of gcc as soon as *that* leaves beta testing!) I have only : one complaint: compiling a perl script usually takes longer than running it. I never noticed a problem with that. Of course, I'm using a Vax 8600. :-) : I would like to suggest, therefore, that a "compile mode" be added to perl : which saves the compiled program to a file, and that such saved files be loaded : directly for speed. Depends on what you mean by "directly". : I haven't looked at it, so I hope it isn't like awk's : vaunted compile mode (write everything from &end to sbrk(0) to a file) that : this would have to be done. Well, there's various ways you can do this, all with their various tradeoffs. 1) Do an abort() after compilation and then run a utility which turns a core dump into an executable. Advantages: very fast, and you always know you have all the functions you need, and in the version the script was written for. Disadvantage: you carry a lot of excess baggage with each compiled perl script--120 K on a Vax, 200 K on a Sun. 2) Do the awk trick. Advantages: still very fast, and you don't carry a complete copy of perl around with every compiled script. Disadvantages: you have to "recompile" every script if the interpreter changes significantly. It's a kludge that probably won't work everywhere. 3) Write a code generator that spits out a C program which you link with a perl library. Advantages: same as 1. Disadvantages: much slower compile than 1, and you could end up linking in almost all of perl into your script, which gives you the disadvantage of 1 also. It would depend of course on the complexity of the script, but for example a script that called "eval" would have to link in the whole bloomin' parser. 4) Do a modified awk trick, in that any pointers are relativized upon "compiling", and derelativized upon execution. Advantage: you could probably get away with more modification to perl without needing to "recompile" your scripts. 5) Another modified awk trick: keep, as part of the compiled script, a copy of the original perl script, or a reference to it, and recompile automatically if the perl version changes (or if the perl script changes). Advantage: you don't need to worry about recompiling. Disadvantage: some invokations of your script take much longer than others. 6) Write a routine that dumps out the syntax tree like the dump routines currently do if you say perl -D1024, and then write some routines to read the syntax tree back in. You'd also probably have to dump the symbol table. Advantages: probably faster than compiling a perl script (though if the size of the info increases much over the size of the perl script you can find your performance dominated by I/O costs). Also would probably be compatible with new versions of perl. Disadvantages: Not nearly as fast as whomping in a memory dump, since you have to do all the mallocs again. 7) Compile to some other internal form than a syntax tree which can be allocated in one hunk--maybe something like threaded code. Advantages: might execute faster than current perl. Could probably be made version independent, at the cost of a little relocation overhead on startup. Disadvantage: I don't have time to rewrite the run-time system. No doubt there are other ways. What do you other folks think? : Larry -- how much of a problem would this be? (And did you get my bugfix? : You forgot to trap divide-by-zero, which is rather hard to debug in floating : point on ncoast.) Yes, that was fixed in a recent patch. Well, gotta run. I'm not going to have a whole lot of time this next month, so don't expect the patches to come out as fast. I don't even have time to ack messages properly, alas. I try, but if the first shot bounces, I give up. If you find a bad bug and it isn't fixed within a month, then I probably didn't get your original message. On the other hand, if it IS a bad bug, somebody else has already told me, so no problem, eh? :-) Larry Wall lwall@jpl-devvax.jpl.nasa.gov