On Sat, Feb 7, 2009 at 8:54 AM, bearophile <bearophileh...@lycos.com> wrote: > Rainer Deyke: >> It's a question of consistent patterns versus special cases. > > You may think that for humans it's better to have a very orthogonal language, > like for example Scheme. > There's also a famous quote about this, "Programming languages should be > designed not by piling feature on top of feature, but by removing the > weaknesses and restrictions that make additional features appear necessary." > But in practice the large part of programmers work with languages like Java, > C, C++, C#, Python, modern basic variants, etc despite they have much more > restrictions compared to Scheme. > This is a long thing to explain, and I don't have enough space in this tight > post to explain it, but the short version is that removing "special cases" as > allowing !+ makes the language worse, less easy to use, more bug-prone, and > generally less good.
Note that D already has things like !>. But quoth the spec: "For floating point comparison operators, (a !op b) is *NOT* the same as !(a op b)." [emphasis added] But anyway I wholeheartedly agree that (a !in b) should exist and it should be the same as !(a in b). I think the principle of least surprise is generally a good one to follow. And I think most people are surprised that (a !is b) means !(a is b), while the same is not true of (a !in b). --bb