Indeed. Perhaps I should better document my proposed approach:
My modified 'load' verb adds a 'dir' entry to the top of SystemFolders_j_ while each script is being loaded, and removes the first 'dir' entry from SystemFolders_j_ when the script finishes loading. Thus when a script is being loaded, it can use the "~dir/" prefix to load adjacent scripts. Without that prefix, scripts would be loaded normally (which is to say, based on the working directory of the J process or of course based on absolute path). Because the 'dir' entry is removed from SystemFolders_j_ after the load is finished, this mechanism can only be used for recursive loads. Because this entry is added to the top of SystemFolders_j_, each recursive load would override any invoking load in the rare cases where that could conflict. In other words: Only load / require arguments which use the "~dir/" prefix from inside a script would be affected by this change. (And, since this is still just a proposal, 'dir' could be replaced with some other name.) See http://www.jsoftware.com/pipermail/general/2023-May/039741.html for the example implementation. Thanks, -- Raul On Fri, May 19, 2023 at 12:01 AM bill lam <[email protected]> wrote: > > On reflection, this can be quite complicated because a script can load > other scripts recursively as mentioned in the subject line of the current > email thread. > > On Fri, 19 May 2023 at 2:52 PM bill lam <[email protected]> wrote: > > > Actually I quite like this idea that loading scripts relative to the > > folder of current script loaded ( not current working directory). > > > > I can think of an alternative is saving the folder of the last 1!:x and > > then querying it using a foreign conjunction. > > > > On Fri, 19 May 2023 at 1:31 PM Raul Miller <[email protected]> wrote: > > > >> The problem that this would address is the complexity of figuring out > >> where a project has been deployed. > >> > >> Yes, it's true that we can install from github. But to test that we > >> have supported that we need the project installed in a different > >> location. > >> > >> And, yes, this is entirely solvable. But it's not easily solvable, > >> especially on the part of new users. > >> > >> Why should this be difficult? > >> > >> Thanks, > >> > >> -- > >> Raul > >> > >> > >> On Thu, May 18, 2023 at 6:59 PM chris burke <[email protected]> wrote: > >> > > >> > Suggestions like this come up from time to time, but I think they are > >> > mistaken. We already have a mechanism for naming files outside > >> > standard J directories, see > >> > https://code.jsoftware.com/wiki/Guides/Folders_and_Projects . I don't > >> > think anything else is needed, rather any extra mechanism will add > >> > unnecessary complexity. > >> > > >> > I'd recommend becoming thoroughly familiar with what we already have. > >> Thanks! > >> > > >> > On Thu, May 18, 2023 at 8:59 AM Raul Miller <[email protected]> > >> wrote: > >> > > > >> > > Quite often, we might want to work with collections of J scripts which > >> > > are outside the standard J system and user directories. > >> > > > >> > > It's quite possible, though obscure, to use introspection (4!:4 and > >> > > 4!:3) to locate scripts relative to the currently executing script. > >> > > > >> > > It would probably be better to make this be an explicitly supported > >> > > feature of J's load verb. > >> > > > >> > > Specifically, I would like to propose that while load is executing, > >> > > jpath would expand ~dir/ to be the innermost referenced directory of > >> > > the currently executing load. > >> > > > >> > > In other words:something like > >> > > > >> > > load=: {{ > >> > > 0 load y > >> > > : > >> > > fls=. getscripts_j_ y > >> > > fn=. ('script',x#'d')~ > >> > > for_fl. fls do. > >> > > SystemFolders_j_=: SystemFolders_j_,~ 'dir';fpath_j_;fl > >> > > if. Displayload_j_ do. echo;fl end. > >> > > if. -. fexist fl do. > >> > > echo 'not found: ',;fl > >> > > end. > >> > > fn fl > >> > > SystemFolders_j_=: (<<<({."1 SystemFolders_j_)i.<'dir') { > >> SystemFolders_j_ > >> > > Loaded_j_=: ~. Loaded_j_,fl > >> > > end. > >> > > EMPTY > >> > > }} > >> > > > >> > > Thoughts? Objections? Improvements? > >> > > > >> > > Thanks, > >> > > > >> > > -- > >> > > Raul > >> > > ---------------------------------------------------------------------- > >> > > For information about J forums see > >> http://www.jsoftware.com/forums.htm > >> > ---------------------------------------------------------------------- > >> > For information about J forums see http://www.jsoftware.com/forums.htm > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > >> > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
