<div><br></div>This sounds good, but I&#39;m looking for something that operates orthogonally to the rest of the module machinery, so that everything else can be the same and this can just be something like an archiving layer that can be introduced or removed with little effort.<div>

<br>It&#39;s a production requirement driving it, so utter simplicity and transparency is paramount.<br><br><div class="gmail_quote">On Tue, Oct 9, 2012 at 12:36 PM, Jay McCarthy <span dir="ltr">&lt;<a href="mailto:jay.mccarthy@gmail.com" target="_blank">jay.mccarthy@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">One option may be to use the new &quot;demodularizer&quot; that my student Blake<br>
Johnson is working on.<br>
<br>
Basically, you give it the root of your application (main.rkt) and it<br>
creates a new zo (compiled/main_rkt.zo) that has no dependencies but<br>
&quot;copies&quot; [*] all the code in that would otherwise be required once the<br>
program starts.<br>
<br>
I put the [*] next to copy because it doesn&#39;t copy code from phases<br>
you don&#39;t require and it does a light form of dead-code elimination to<br>
remove even more. We&#39;ve found that for a simple Web app, normally<br>
about 3MBs of zos get loaded, but after demodularization only about<br>
25k of zos get loaded. We&#39;re currently working on getting the Racket<br>
optimizer to recompile this smaller code base to get more performance<br>
out of it to, but we&#39;re not done yet. [Not done yet = of about 7000<br>
Racket files, 6 of them use features we haven&#39;t gotten working yet.]<br>
<br>
If your Racket code wasn&#39;t changing a lot, then you&#39;d be able to use<br>
this to limit the number of zos necessary to just the one, plus<br>
whatever &quot;racket&quot; itself needs to start. If your code changes a lot,<br>
but your dependency on Racket doesn&#39;t often, we could work on a<br>
modified version that would cache all your Racket-collect dependency<br>
in to one giant zo that was required for all the Racket deps you have.<br>
<br>
Jay<br>
<div><div><br>
On Tue, Oct 9, 2012 at 1:22 PM, Dan Liebgold &lt;<a href="mailto:dan.liebgold@gmail.com" target="_blank">dan.liebgold@gmail.com</a>&gt; wrote:<br>
&gt; On Tue, Oct 9, 2012 at 11:32 AM, Matthew Flatt &lt;<a href="mailto:mflatt@cs.utah.edu" target="_blank">mflatt@cs.utah.edu</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; At Tue, 9 Oct 2012 18:00:14 +0000 (UTC), Dan Liebgold wrote:<br>
&gt;&gt; It still seems strange to me that we should implement our own<br>
&gt;&gt; filesystem of some sort to get decent filesystem performance.<br>
&gt;&gt;<br>
&gt;<br>
&gt; Indeed. I think in game development we tend to be a bit nuts about<br>
&gt; performance, but I do have some numbers to back it up!<br>
&gt;<br>
&gt; During a single startup of our app we trigger about 7000 file operations in<br>
&gt; the collects directory. When stored on a local hard drive it takes about 2<br>
&gt; seconds. On a network drive that number climbs to about 30 seconds. And that<br>
&gt; is just loading the collects we utilize.<br>
&gt;<br>
&gt; We invoke Racket about 1500 times every time we build one of our game<br>
&gt; projects, and currently we have about 4-6 automated builds plus 20<br>
&gt; programmers building as well. (You can probably only imagine how much we<br>
&gt; depend on precompiled headers on the C++ side of our projects.) The numbers<br>
&gt; climb quickly. So accessing over the network is too slow.<br>
&gt;<br>
&gt; Now it turns into a bit of a distribution problem. We have 150+ people<br>
&gt; in-house that need to run this, plus 50 or so more outsourced in various<br>
&gt; locations around the country. The standard Racket distro contains about<br>
&gt; 13,000 files. That many copies and syncs gets quite awkward, although it<br>
&gt; works.<br>
&gt;<br>
&gt; Ideally we would have a handful of executables and archives to distribute<br>
&gt; and utilize. Also ideally, the archives would contain just .zo files (or<br>
&gt; something equivalent.)<br>
&gt;<br>
&gt; Now I realize that we are the ones who must lay the track in front of this<br>
&gt; speeding freight train, so we are willing to do what it takes to implement<br>
&gt; this... just point me in the right direction!<br>
&gt;<br>
&gt; BTW, when I selected MzScheme for this project back in &#39;05 I had no idea<br>
&gt; both what our production would look like at this point nor how well MzScheme<br>
&gt; would operate under these constraints. And Racket is improving upon it in<br>
&gt; every way!<br>
&gt;<br>
&gt; --<br>
&gt; Dan Liebgold    [<a href="mailto:dan.liebgold@gmail.com" target="_blank">dan.liebgold@gmail.com</a>]<br>
&gt;<br>
</div></div><div><div>&gt; _________________________<br>
&gt;   Racket Developers list:<br>
&gt;   <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
&gt;<br>
<br>
<br>
<br>
</div></div><span><font color="#888888">--<br>
Jay McCarthy &lt;<a href="mailto:jay@cs.byu.edu" target="_blank">jay@cs.byu.edu</a>&gt;<br>
Assistant Professor / Brigham Young University<br>
<a href="http://faculty.cs.byu.edu/~jay" target="_blank">http://faculty.cs.byu.edu/~jay</a><br>
<br>
&quot;The glory of God is Intelligence&quot; - D&amp;C 93<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>Dan Liebgold    [<a href="mailto:dan.liebgold@gmail.com" target="_blank">dan.liebgold@gmail.com</a>]<br>
</div>