On Wed, Aug 10, 2016 at 5:53 AM, Elias Pipping <pipping.el...@icloud.com> wrote:
>
>> On 01 Aug 2016, at 04:25, Robert Goldman <rpgold...@sift.net> wrote:
>>
>> Elias,
>>
>> If you were to move your work on uiop:run-program to a long-lived topic
>> branch, I could test it on a wide variety of implementations on Mac and
>> Linux.
>
> Dear Robert, dear Faré, dear list,
>
> an update might be in order. Currently, the run-program branch, available from
>
>   (dynamic) https://gitlab.common-lisp.net/epipping/asdf/commits/run-program
>   (static) 
> https://gitlab.common-lisp.net/epipping/asdf/commits/a45e91e81d2e973d1541adbe37e81c242ce98c66
>
> has 7 commits over the master branch, each of which should be uncontroversial 
> and either fix a bug or do other kinds of non-invasive cleanup.
>
Nits (to be addressed in follow up commits, or by modifying these):

1- In c2c130bc4ff4a56ca6fec5e46acf5f32d0272909, you break the
asciibetical order of #+'s. Also, you might check what does or doesn't
work in CLASP.

2- In cee1754b6f82ba791495122c6229213a42b0bcbb
I prefer a white list of platforms where the combination is known to
work, rather than a blacklist of platforms where it is known not to
work. That makes for more understandable failures on new platforms.

3- In 46009053aee3ab4c757dc57e880b5eabe61d932c it would be nice to
know since when this interface function is public in CCL, so we know
how old a CCL we are or aren't supporting. Hopefully, we keep
supporting a CCL release one or two year old.


> Then there’s the run-program-messy-with-rebasing branch
>
> (dynamic) 
> https://gitlab.common-lisp.net/epipping/asdf/commits/run-program-messy-with-rebasing
> (static) 
> https://gitlab.common-lisp.net/epipping/asdf/commits/61654b62b2d8cf6265ef968919fe35e9673e0c61
>
> which has additional commits that are more controversial. I’m writing this 
> email mostly because of these controversial commits because I know too little 
> about good design of CL libraries and would like to invite feedback.
>
> I’d like to ask the following questions:
>
> Issue #1:
>
> For CL platforms other than Allegro CL, you can inquire about the exit code 
> of a program repeatedly once it has exited (through %wait-process-result). 
> For Allegro CL, this is not the case: The exit-code will only be returned 
> once. Since the plist that currently makes up a process can store the exit 
> code, that need not be a problem: The first time it is obtained, it could be 
> stored, and repeated calls to %wait-process-result would just hand out the 
> value that’s been stored earlier. To keep the user from having to write code 
> like
>
>   (setf process-info (%wait-process-result process-info))
>
> I used
>
>   (nconc process-info (list :exit-code exit-code))
>
> in 
> https://gitlab.common-lisp.net/epipping/asdf/commit/ac2d610d77806896bc0f1543bcb8f5076b3b21c9.
>  That might be surprising to the user and go against relevant style guides 
> (it’s safe in %wait-process-result in the sense that the entire body is 
> guarded by a non-null-check for :process so that in particular, process-info 
> isn’t NIL). So maybe this should be fixed in a different manner (please note 
> that the issue is not easily settled by documenting that %wait-process-result 
> should only be called once: A function that queries the process status 
> without waiting would call the same function as %wait-process-result for 
> Allegro CL).
>
Please do NOT use nconc. I wrote at length against NCONC, that I'd
like to see deprecated:
http://cliki.net/Proposed%20ANSI%20Revisions%20and%20Clarifications

Please use (setf (getf process-info :exit-code) exit-code) and please
only use it on allegro.

If you need to side-effect a data structure preserved across function
calls, then maybe it's time to use a defstruct (or a defclass?) rather
than a plist. If you can't be bothered to refactor, pre-reserved a
plist slot to setf getf will do the job.

> Issue #2:
>
> https://gitlab.common-lisp.net/epipping/asdf/commit/1680d3e36a54717b195f672b6996fcae08d54218
>  and 
> https://gitlab.common-lisp.net/epipping/asdf/commit/4b884915c4d62f07cec53e9d130ab3b99c6bb6e4
>  add a pair of functions, each.
>
> The former adds %terminate-process (meant to be public) and 
> %posix-process-send-signal (not necessarily public).
> The latter adds %process-alive-p (meant to be public) and 
> %process-status-result (not necessarily public).
>
> Are these names and interfaces acceptable? (Now that I’m writing this, I 
> already feel that %process-status-result should probably rather be named 
> %process-status). It also uses nconc in the same way except without the 
> non-null check (this shall be fixed).
>
Yes, the names are acceptable. If you are going to support them as
stable interfaces, you can remove the % and export the symbols. Be
sure to have adequate docstrings, then.

Please don't use nconc. Ever.

> Issue #3:
>
> https://gitlab.common-lisp.net/epipping/asdf/commit/308faabe755d718f7fb8f2723d3615a64d50c44f
>  adds getters for the streams contained in a process-info plist. Are these 
> acceptable?
>
No opinion.

> Issue #4:
>
> %run-program uses asserts in quite a few places. These guard against 
> combinations of parameters that are not supported by certain platforms. They 
> do not provide restarts or helpful diagnostics, however. So I’m wondering if 
> they should be replaced by different failure signalling approaches. Or if 
> they should be removed if the underlying platform provides sufficient error 
> handling.
>
The asserts were fine in an internal function. If the function is
exposed and supported, they should be error.

Do NOT put uiop tests in uiop/ -- put them in test/ -- that said we
should probably distinguish uiop and asdf tests. Add a uiop prefix to
the test names.

> Issue #5:
>
> To extend the failure signalling approaches mentioned above to additional 
> cases, I’ve found it necessary to check if a stream has a file handle.
>
>   
> https://gitlab.common-lisp.net/epipping/asdf/commit/4628f3fb57384c8d1d62aeacb244eab9e8f978c7
>
> thus adds
>
>    (defun file-stream-p (stream) …)
>    (defun file-stream-or-synonym-p (stream) …)
>
> as exported functions to uiop/stream. Are these names and interfaces 
> acceptable?
>
I would say file-or-synonym-stream-p

> PS: Let me know if you prefer merge requests to such emails.
You did a perfect job. Either is fine, though at least until confirmed
that merge requests send mail, please notify the list with mail when
you issue a merge request.

> PPS: I’m currently testing with the following platforms:
>
> acl-10.0-linux-x86 (+the latest updates)
> ccl-1.11-f96-linux-x64
> clisp-2.49+-unix-x64
> cmu-21a__21a_unicode_-linux-x86
> ecl-16.1.2-af65969c-linux-x64
> lw-7.0.0-linux-x64
> mkcl-1.1.10-linux-x64 (git revision c69d5fc907409803fab184ac56bb42041d42c5e4)
> sbcl-1.3.8-linux-x64

Thanks a lot for a great job!

PS: Are you interested in becoming new maintainer for UIOP?

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
If being against something is a phobia, then being for is mania.
Peace and understanding through slurs of mental illness.
Homomania, islamomania, etc.

Reply via email to