The new std.process is ready for review

Lars T. Kyllingstad public at kyllingen.net
Sun Feb 24 22:50:50 PST 2013


On Monday, 25 February 2013 at 00:15:21 UTC, Vladimir Panteleev 
wrote:
> On Sunday, 24 February 2013 at 14:43:50 UTC, Lars T. 
> Kyllingstad wrote:
>> [snip]
>
> Hi Lars,
>
> First of all, about environment. I think the old behavior makes 
> more sense.
>
> I think you had a good point about making it behave like an 
> associative array. I would expect using opIndex with an 
> inexisting key to throw. Subtle deviations of behavior for 
> types that generally behave like well-known types can introduce 
> latent bugs.
>
> The danger is even more potent in the case of environment 
> variables, as those are often used for constructing 
> command-lines and such. If attempting to get the value of an 
> inexisting variable now returns null, which is used to build a 
> command line, unexpected things can happen.
>
> For example, let's say that you're writing a program for 
> analyzing malware, which expects $BINDUMP to be set to the path 
> of some analysis tool. So it runs environment["BINDUMP"] ~ 
> args[1] - however, if BINDUMP is unset, the program runs the 
> malware executable itself.
>
> For another example, here's this classic catastrophic bug in 
> shell scripts:
>
> rm -rf $FOO/$BAR
>
> What happens if $FOO and $BAR are unset?
>
> One thing that I think is missing from the environment object 
> is opIn_r. Implementing opIn_r would allow users to more safely 
> explicitly check if a variable is set or not, and is more 
> readable than environment.get("FOO", null).
>
> And of course, there's the issue of people migrating code from 
> the old module version to the new one: if they relied on the 
> old behavior, the code can break in unexpected ways after the 
> migration.
>
> What are your specific reasons for changing environment's 
> behavior?
>
> Speaking of shells, I noticed you hardcode cmd.exe in 
> std.process2. That's another bug, it should look at the COMSPEC 
> variable.
>
> Also, about the shell function, I noticed this recent bug 
> report:
> http://d.puremagic.com/issues/show_bug.cgi?id=9444
>
> Maybe it somehow makes the transition to the new function 
> easier? :)
>
> If not, since you're adamant about not changing the name, can 
> we overload the function (e.g. make the new one return some 
> results in "out" parameters), and deprecate the original 
> overload?
>
> Finally, I'd just like to sum up that we seem to have two 
> decisions on the scales: somehow solving the API 
> incompatibilities, or introducing the new version as an 
> entirely new module. The latter is a mess we really don't want 
> to get into, so it'd need to be justified, and IMHO the 
> incompatibilities don't seem to be as severe and unresolvable 
> to warrant that mess.

Sorry, I have to get to work now, and I don't have time to answer 
your post properly.  I will say this, though:  You make a strong 
case about environment.opIndex(). :)

I'll think some more about it and write a proper reply later.

Lars


More information about the Digitalmars-d mailing list