The new std.process is ready for review

Steven Schveighoffer schveiguy at yahoo.com
Tue Feb 26 06:02:11 PST 2013


On Tue, 26 Feb 2013 07:28:11 -0500, Vladimir Panteleev  
<vladimir at thecybershadow.net> wrote:

> On Tuesday, 26 February 2013 at 07:08:37 UTC, Lars T. Kyllingstad wrote:
>> What if the variable is set, but empty?  Is that very different
>> from the situation where it doesn't exist at all?  In my opinion,
>> when it comes to environment variables, no.
>
> Until today, I didn't know that empty variables could exist. They don't  
> exist on Windows: setting a variable to an empty string is how you  
> delete it.
>
> Regardless, I think my point still stands on the argument that it's much  
> more likely for a variable to be unexpectedly unset rather than  
> unexpectedly empty. To extend to a general case, we could say that an  
> empty variable is as likely as any invalid or unexpected value. For the  
> 'rm -rf $FOO/$BAR' case, one can come up with any combinations of FOO  
> and BAR, such as "/bin" and "../", where the command would have the same  
> effect.

If I use $XYZ in a script, and XYZ isn't set, it equates to nothing.  When  
I use getenv, it returns null.  That is the behavior I would intuitively  
expect.

On one hand, I think the correct behavior is to return null, and let the  
program deal with checking the error, or use get if they have a default.   
If we throw an exception, people will end up catching the exception in  
order to avoid an unintended error.  Exceptions are not good for flow  
control, they are for exceptional situations that you didn't plan for.

On the other hand, the other implementation, which is already in  
std.process, is also a valid implementation, and there already exists code  
which uses it.  If we have the same abilities via get, then no  
functionality is lost, it's just a tad more verbose.

In my opinion, the current implementation is only slightly worse than the  
proposed.  If there is a chance we can simply replace std.process instead  
of using std.process2 if we go with the original implementation, I think  
we should do that.

-Steve


More information about the Digitalmars-d mailing list