My take here is that at least some of the time during development,
multiple instances of the petal project would need to exist on
developer machines.

Probably each developer would set up a user key (perhaps
control-shift-P) to load the primary development copy of the
application.

In messages, we typically refer to files using abbreviated paths
relative to the project root.

The developers should not have to know the absolute path of the
project on other developer machines. That information is subject to
change and developers are likely to have multiple copies of the app
deployed (for testing and maintenance purposes).

My plan was to support this by allowing the project to be stored
anywhere (including under ~addons/), with recursive loads able to use
the ~dir/ prefix which is agnostic to project location.

So, for example, if there's a bug in the addon, the developer could
have a test instance of that version of the addon for debugging
purposes without having to give up any incomplete work on a potential
next major release. No special tooling or configuration needed here.

(That said, perhaps it would be better to name this shortcut ~loading/
rather than ~dir/ to better convey its role.)

Anyways... the problem I see with ~Petal in UserFolders_j_ is that
that becomes a complication at deployment time. And that's going to be
a problem for anyone who wants to use J to develop software which
other people  would use.

Thanks,

-- 
Raul

On Fri, May 19, 2023 at 9:57 AM chris burke <[email protected]> wrote:
>
> If Petal is an addon, then it will be found in ~addons/alice/petal.
>
> More realistically, suppose Petal is a new app being developed that
> might eventually end up as an addon. At least for now, each
> collaborator will define ~Petal appropriately for their system layout.
>
> Normally, the collaborators will have no interest in where each stores
> their copy of the Petal source. But suppose that for whatever reason,
> they decide to tell each other. In what way would this information be
> of use? Note, I am not thinking of pathological examples, but rather
> of ordinary examples where knowing where Petal is stored on each
> machine might be of use. Are there non-trivial examples where such
> information would be helpful? Remember that the information is readily
> obtained from jpath '~Petal'.
>
> On Fri, May 19, 2023 at 8:55 AM Raul Miller <[email protected]> wrote:
> >
> > Let's say that this is an addon. In other words, this should work:
> >
> > install'github:alice/petal'
> > load'alice/petal'
> >
> > Except, load'alice/petal' doesn't work yet, because first the user
> > needs to update UserFolders_j_
> >
> > Why?
> >
> > But, even before that, Alice needed to test that this install
> > procedure worked. So Alice could not have the code in
> > ~addons/alice/petal/ -- if the code was there, Alice could not test
> > how installation works.
> >
> > How does a fixed definition in UserFolders_j_ help here?
> >
> > Thanks,
> >
> > --
> > Raul
> >
> > On Fri, May 19, 2023 at 7:48 AM chris burke <[email protected]> wrote:
> > >
> > > OK, suppose Alice, Bob and Chad work jointly on an app called Petal.
> > >
> > > Alice (a Mac user) installs the app in ~dev/petal.
> > >
> > > Bob (a windows user) installs the app in c:\users\bob\apps\petal
> > >
> > > Chad (a linux user) installs the app in ~/mywork/mydev/mypetal.
> > >
> > > Each user creates the path ~Petal to point to the source on their machine.
> > >
> > > IMHO, this completely solves any problem with paths.
> > >
> > > For example, each user can load and run the application with an 
> > > expression like
> > >
> > >    load '~Petal/run.ijs'
> > >
> > > Nothing else is needed. But if you really want to, you could get each
> > > source directory with an expression like:
> > >
> > >    jpath '~Petal'
> > >
> > > On Fri, May 19, 2023 at 6:33 AM Raul Miller <[email protected]> wrote:
> > > >
> > > > 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
> > > ----------------------------------------------------------------------
> > > 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

Reply via email to