On Tue, 26 Feb 2013 10:47:40 -0500, Vladimir Panteleev <vladi...@thecybershadow.net> wrote:

On Tuesday, 26 February 2013 at 15:26:50 UTC, Steven Schveighoffer wrote:
You mean changing as in, instead of throwing an exception, it tries to use a null value and segfaults? Not a very significant difference.

I'm still not following... where would the segfault come from? Unless you dereference .ptr, you can't get a segfault from operating on a null string.

It's funny, I completely forgot about that! My brain was still in Objective-C/C++ mode :)

You are right, the difference is important.

But we are splitting hairs here. The first one could potentially change the environment variable that the second uses, thereby affecting the behavior.

That's a completely different matter from changing how code within the same program accesses the environment in general. Both components may be operating on specialized, prefix-named variables that have no chance of interfering with each other, and still break when the behavior of a global object changes.

It would be safer for the component to define a very small wrapper, which changes environment's semantics according to its requirements.

I was trying to come up with an equivalent to set -u. In other words, you said "good scripts use set -u", you could equivalently say "good D programs use Enviroment.throwOnMissingData = true"

It was just a thought.

Another possibility (naming to be determined):

Environment.nthrow["x"]; // doesn't throw
Environment["x"]; // throws

At this point though, I think the discussion really is bikeshedding. Environment.get is not that much different than Environment[]. We should keep the current behavior in the interest of backwards compatibility.

-Steve

Reply via email to