Граница между "интерпретируемыми" и "скомпилированными" языками в наши дни очень размыта. Например, первое, что делает Python, когда он видит исходный код, - это компилирует его в представление байт-кода, по сути, то же самое, что делает Java при компиляции файлов классов. Вот что содержат * .pyc файлы. Затем среда выполнения Python выполняет байт-код без ссылки на исходный код. Традиционно, чисто интерпретируемый язык будет постоянно ссылаться на исходный код при выполнении программы.
При построении языка хорошим подходом является создание прочной основы, на которой вы можете реализовать функции более высокого уровня. Если у вас есть надежная и быстрая система обработки строк, тогда разработчик языка может (и должен) реализовать что-то вроде stripslashes () вне базовой среды выполнения. Это сделано по крайней мере по нескольким причинам:
- Разработчик языка может показать, что язык достаточно гибок для выполнения задач такого типа.
- Разработчик языка на самом деле пишет реальный код на языке, который имеет тесты и, следовательно, показывает, что основа прочна.
- Другие люди могут легче читать, заимствовать и даже изменять функцию более высокого уровня без необходимости создавать или даже понимать ядро языка.
То, что такой язык, как Python, компилируется в байт-код и выполняется, не означает, что он медленный. Нет никаких причин, по которым кто-то мог бы написать компилятор Just-In-Time (JIT) для Python, в соответствии с тем, что уже делают Java и .NET, для дальнейшего повышения производительности. Фактически IronPython компилирует Python непосредственно в байт-код .NET, который затем запускается с использованием системы .NET, включая JIT.
Чтобы ответить на ваш вопрос напрямую, единственный раз, когда разработчик языка реализует функцию на языке, стоящем за средой выполнения (например, C в случае Python), это максимизирует производительность этой функции. Вот почему такие модули, как анализатор регулярных выражений, написаны на C, а не на собственном Python. С другой стороны, такой модуль, как getopt.py, реализован на чистом Python, потому что все это можно сделать там, и использование соответствующей библиотеки C бесполезно.