boolean a = false, b = true;
if ( a && b ) { ... };
В большинстве языков b
не будет оцениваться, потому что a
является ложным, поэтому a && b
не может быть правдой. Мой вопрос: не будет ли короткое замыкание медленнее с точки зрения архитектуры? В конвейере вы просто останавливаетесь, ожидая, чтобы получить результат a, чтобы определить, следует ли оценивать b или нет? Было бы лучше делать вложенные ifs вместо этого? Помогает ли это?
Кроме того, кто-нибудь знает, как обычно называется оценка короткого замыкания? Этот вопрос возник после того, как я узнал, что мой знакомый по программированию никогда не слышал об оценке короткого замыкания и заявлял, что он не распространен и не найден на многих языках и неэффективен в конвейере. Я не уверен в последнем, поэтому прошу вас, ребята!
Хорошо, я думаю, что другой пример, возможно, объяснит, откуда мой друг. Он полагает, что, так как параллельно оценивает утверждение, подобное следующему:
(a) if ( ( a != null ) && ( a.equals(b) ) ) { ... }
приведет к сбою системы, архитектура, которая не имеет короткого замыкания (и, тем самым, не допускает таких утверждений, как указано выше) будет быстрее при обработке таких утверждений:
(b) if ( ( a == 4 ) && ( b == 5 ) )
поскольку, если он не может выполнить (a) параллельно, он не может выполнять (b) параллельно. В этом случае язык, который обеспечивает короткое замыкание, медленнее, чем тот, который этого не делает.
Я не знаю, верно это или нет.
Спасибо