On 2010-10-07 14:38:50 -0400, Andrei Alexandrescu <seewebsiteforem...@erdani.org> said:

At no point. "Linear" means "linear in the input size". I don't think such arguments are valid.

It is linear in regard to the array length, the static array being the input. That the length is known at compile time doesn't make it less of an input for the "in" operator, even though it's not an input of the program at runtime.

Let's say for instance that you have a big static array of keywords and you want to check if a string contains one of those keywords, would you really do this?

        string[200] keywords = ["for", "foreach", "auto", .... 200 keywords 
.... ];

        foreach (word; listOfWords)
                if (word in keywords)
                        writeln("Found a keyword! ", word);

That's so easy to read and write! but so stupid at the same time if "in" performs a linear search.

In the example above, if "keywords" was immutable then the compiler could optimize things by using a good search strategy, but otherwise it's just ridiculous to allow it to compile.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to