Если у меня есть выражение, которое я хочу оценить в Python, такое как выражение для r
в фрагменте кода ниже, будет ли интерпретатор Python разумным и повторно использует подрезультат x+y+z
, или просто оценитэто дважды?
О каком интерпретаторе Python вы говорите?В настоящее время широко используются четыре готовых стабильных реализации Python.Ни у одного из них на самом деле нет интерпретатора Python, каждый из них компилирует Python.
Некоторые из них могут или не могут выполнить эту оптимизацию по крайней мере для некоторых программ по меньшей мере при некоторых обстоятельствах.
Спецификация языка Python не требует и не запрещает такого рода оптимизацию, поэтому любая реализация Python, соответствующая спецификации, может, но не обязана, выполнять эту оптимизацию.
Я уверен, чтоВ отличие от всех других ответов, в которых говорится, что Python не может этого сделать, PyPy способен выполнить эту оптимизацию.Кроме того, в зависимости от используемой платформы, код, выполненный с использованием Jython или IronPython, также выиграет от этой оптимизации, например, я на 100% уверен, что компилятор C2 Oracle HotSpot выполняет эту оптимизацию.
Мне также было бы интересно узнать, будет ли ответ на этот вопрос одинаковым для скомпилированного языка […].
Не существует такого понятия, как «скомпилированный»язык».Компиляция и интерпретация - это черты компилятора или интерпретатора (дух!), А не языка.Каждый язык может быть реализован компилятором, и каждый язык может быть реализован интерпретатором.Пример: есть интерпретаторы для C, и, наоборот, каждая существующая в настоящее время готовая к работе, стабильная, широко используемая реализация Python, ECMAScript, Ruby и PHP имеет по крайней мере один компилятор, многие даже имеют более одного (например, PyPy, V8, SpiderMonkey, Squirrelfish Extreme, Chakra).
Язык - это абстрактный набор математических правил и ограничений, написанных на листе бумаги.Язык не компилируется и не интерпретируется, просто - это .Эти понятия живут на разных уровнях абстракции;если бы английский был типизированным языком, термин «скомпилированный язык» был бы ошибкой типа.
Мне также было бы интересно узнать, будет ли ответ на этот вопрос одинаковым для […]например, C.
Существует множество готовых к использованию стабильных реализаций языка Си.Некоторые из них могут или не могут выполнить эту оптимизацию по меньшей мере для некоторых программ по меньшей мере при некоторых обстоятельствах.
Спецификация языка C не требует и не запрещает этот вид оптимизации, поэтому любая соответствующая спецификации CРеализация будет разрешено, но не обязательно, для выполнения этой оптимизации.