Thanks Eli - I think I have have better understanding of the issue now... see below. <br><br><div class="gmail_quote">On Sun, Oct 4, 2009 at 10:40 AM, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org" target="_blank">eli@barzilay.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



<br>
[The only thing that is vaguely close to the same area is that planet<br>
adds the concept of a `package&#39; (which is, IIUC, what Carl&#39;s tool uses<br>
to come up with a symbolic name) -- so you could think of an<br>
alternative form to require code from the current package&#39;s root, but<br>
this would hard-wire a &quot;package == project&quot; concept, and it still<br>
won&#39;t apply to code that is outside of planet packages.]<br></blockquote><div><br>Agreed - project might or might not equal packages.  <br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">





<div>
&gt; It helps define packages which are referred via symbols.<br>
<br>
</div>The symbolic way to reference them is not related here -- what would<br>
be is some form like I mentioned above, which can work relatively to<br>
the current package&#39;s root.<br></blockquote><div><br>When the packages are small, the relative paths are isolated within the package, so potential changes are small and less disruptive.  That&#39;s why I mentioned it (and main.ss).  I found that having a big project, like having a big module or a big procedure, is simply harder to manage without intermediate abstractions.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">because that relative string is not a universal reference to that<br>
specific file.  Carl&#39;s package solves that by coming up with a<br>
symbolic name that would always refer to that file, and it does so<br>
using a `planet&#39; symbolic name (which is exactly why it&#39;s limited to<br>
planet packges).  You could imagine a similar tool (or an extension of<br>
Carl&#39;s tool) that works for installed collections too, but you&#39;d still<br>
be left with random code in your filesystem that is in neither --<br>
since in that case there is no symbolic way to refer to the file<br>
without specifying its full path.<br></blockquote><div><br>When I first start writing large programs in PLT I was directed to make use the planet system for organization.  It definitely take me a while to figure out how to make it work, but so far things mostly work well.  <br>





<br>That being said, having the ability to handle projects similar to other IDEs such as Visual Studio or XCode makes sense for PLT.  I would love to be able to open all files for a project at once.  <br><br>The trouble with config file is of course you would have to keep it in sync.  That&#39;s easier with DrScheme than with emacs/mzscheme since you can make DrScheme to maintain it automatically (like Visual Studio, XCode, etc), but I agree maintaining it in one spot is easier than having to modify relative paths all over the modules unless the developer has already taken the care to organize the modules. Anyhow, I digress.  <br>
<br>Going back to your question - how does the following look to you?  <br><br>;; load the config file, which provides a list of symbols to the file path mappings that you can explicitly require (and implicitly requires all if you provide no symbols) <br>
(require (<b>config-in &quot;config.ss&quot;</b> my-module-foo my-module-bar ...)) <br><br>And it seems that having the ability to reset the current-load-relative-directory would be useful too if you do not want to maintain a config file but would like to have uniform relative paths against a base directory. <br>
<br>;; reset the base-directory to the parent directory, and then load the rest of the files relative to the new base directory.<br>
(require (<b>base-in &quot;..&quot;</b> &quot;my/module/foo.ss&quot; &quot;my/module/bar.ss&quot; ...)) <br>
<br>My 2 cents.  Cheers.<br>yc<br><br>
</div></div>