Мне кажется, что на этот вопрос будет сложно ответить с помощью явных примеров из-за отсутствия «строго типизированных интерпретируемых языков» (с использованием определений, которые я понимаю из комментариев к вопросу).
я не могу вспомнить какой-либо язык, который интерпретируется и не имеет неявных преобразований. и я думаю, это по двум причинам:
интерпретируемые языки обычно не имеют статической типизации. Я думаю, это связано с тем, что если вы собираетесь реализовать статически типизированный язык, то исторически сложилось так, что компиляция относительно проста и дает вам значительное преимущество в производительности.
если язык не является статически типизированным, он вынужден иметь неявные преобразования. альтернатива усложнила бы жизнь программисту (им пришлось бы отслеживать типы, невидимые в исходном коде, чтобы избежать ошибок времени выполнения).
поэтому на практике все интерпретируемые языки являются слабо типизированными. но вопрос об увеличении или уменьшении производительности подразумевает сравнение с некоторыми из них. по крайней мере, если мы хотим обсудить различные существующие стратегии реализации.
теперь вы можете ответить «ну, представьте себе». в порядке. Итак, вы запрашиваете разницу в производительности между кодом, который обнаруживает необходимость преобразования во время выполнения, с кодом, в котором программист явно добавил преобразование. в этом случае вы сравниваете разницу между динамическим обнаружением необходимости преобразования и вызовом явной функции, указанной программистом.
на первый взгляд, обнаружение всегда будет добавлять некоторые накладные расходы (на [поздно-] скомпилированном языке, который можно улучшить с помощью jit, но вы спрашиваете об интерпретаторах). но если вам нужно безотказное поведение (ошибки типов), то даже явное преобразование должно проверять типы. так что на практике я полагаю, что разница относительно небольшая.
и это связано с исходной точкой - поскольку стоимость производительности слабой типизации низкая (с учетом всех других ограничений / предположений в вопросе), а затраты на удобство использования альтернативы высоки, большинство (все?) интерпретируемые языки поддерживают неявные конверсия.
[извините, если я все еще не понимаю. я беспокоюсь, что что-то упустил, потому что вопрос - и этот ответ - не кажутся интересными ...]
[edit: может быть, лучший способ задать одну и ту же (?) вещь - это что-то вроде "каковы сравнительные преимущества / недостатки различных способов, которыми динамические (позднее связывание?) языки обрабатывают преобразование типов?" потому что я думаю, что вы можете утверждать, что подход python является особенно мощным (выразительным), имея при этом те же затраты, что и другие интерпретируемые языки (и этот вопрос позволяет избежать споров о том, является ли python или любой другой язык «слабо типизированным» или нет). em>]
person
andrew cooke
schedule
10.03.2012
"5" * 2 == 10
. Javascript особенно известен такими преобразованиями типов. РЕДАКТИРОВАТЬ: добавил его к вопросу. - person orlp   schedule 10.03.2012