On Monday, September 03, 2012 20:29:27 Timon Gehr wrote: > On 09/03/2012 08:01 PM, David Nadlinger wrote: > > On Monday, 3 September 2012 at 14:04:18 UTC, Andrei Alexandrescu wrote: > >>> A sufficiently smart compiler (tm) could > >>> optimize this to a efficient string "prefix switch statement" just as > >>> well… > >> > >> I agree. But then http://c2.com/cgi/wiki?SufficientlySmartCompiler. > > > > This is exactly my point: My feeling is that the increased complexity > > What complexity?
He probably means that adding another function to do exactly what an existing function already does is complicating the library. The new function needs to bring enoug to the table to be worth it, and the syntactic change of allowing you to do if(value in handful(value1, value2, value3) {} instead of if(canFind([value1, value2, value3], value)) {} isn't worth that. > > by introducing a second syntax resp. a new special case (i.e. among) for > > such a simple operation is only worth it if it leaves no reason to > > revert to a hand-written replacement for performance reason, > > [ ].canFind( ) allocates on the GC heap without a sufficiently smart > compiler. That's then a performance issue which make may something like handful worth it, but Andrei seems to be arguing based on aesthetics rather than performance. And if you're arguing performance, I'd argue that the "in" solution is a bad one anyway, because it requires constructing and returning a struct, whereas you could just make what you're looking for the first argument. e.g. if(among(value, value1, value2, value3)) {} The syntax is less clear this way, and perhaps the syntactic convenience of the whole in idea outweighs the performcance cost there (particularly since it should still be cheaper than a heap allocation), but the only reason to argue against canFind that I can see is performance, and if you're arguing performance, then I'm not sure that the in idea is necessarily the way to go. Regardless, the point is that there needs to be a practical reason for something like handful, not an aesthetic one. - Jonathan M Davis