Когда может быть полезно короткое замыкание
Оптимизация короткого замыкания может быть полезна только тогда, когда:
- стоимость сравнения низкая по сравнению со стоимостью полного теста
- сравнение часто приводит к короткому замыканию
Математически, пусть S - это стоимость условия короткого замыкания, F - стоимость полного состояния, а P - процент случаев, когда происходит короткое замыкание (полное состояние не требуется).
Средняя стоимость оригинального корпуса (без короткого замыкания) составляет F
Средняя стоимость оптимизации короткого замыкания составляет S + F * (1-P)
Поэтому, если оптимизация вообще будет иметь какую-либо выгоду, должно применяться следующее:
S + F * (1-P)
1021 * т.е. *
S
Стоимость сравнения строк
Далее вы написали:
, что, очевидно, занимает больше времени, чем простое целочисленное сравнение.
Это совсем не очевидно. Сравнение строк заканчивается, когда обнаруживается первое различие, поэтому в зависимости от того, какие строки вы обрабатываете, оно может заканчиваться на первом или втором символе в подавляющем большинстве случаев. Более того, сравнение можно оптимизировать даже для более длинных строк, сначала сравнивая DWORDS (4 символа одновременно), если в обеих строках достаточно данных.
Ваш случай
Основное различие между данными случайных тестов и синтаксическим анализом заключается в том, что реальные данные далеко не случайны. Синтаксический анализатор, скорее всего, является детерминированным, и когда он совпадает, он больше не сравнивается. Даже данные сценария не случайны - некоторые ключевые слова, вероятно, будут использоваться намного чаще, чем другие. Если синтаксический анализатор построен таким образом, что он сначала проверяет наиболее часто используемое ключевое слово, для удивительно большого числа сравнений может потребоваться полное сравнение, поскольку полное сравнение всегда должно выполняться при сопоставлении строки.