Зависит ли от реализации языка программирования возможность создать для него альтернативную реализацию?
Возможно ли для интерпретируемого языка программирования написать компилятор? На основе интерпретатора или с нуля. И наоборот, скажем, реализовать интерпретатор для компилируемого Go или C++ Или же есть критические моменты, не позволяющие сделать это?
Ответы (2 шт):
Дам кусочек отсюда
Полнота по Тьюрингу — характеристика исполнителя (множества вычисляющих элементов) в теории вычислимости, означающая возможность реализовать на нём любую вычислимую функцию. Другими словами, для каждой вычислимой функции существует вычисляющий её элемент (например, машина Тьюринга) или программа для исполнителя, а все функции, вычисляемые множеством вычислителей, являются вычислимыми функциями (возможно, при некотором кодировании входных и выходных данных).
Большинство широко используемых языков программирования — тьюринг-полные.
Ну и ответ на ваш вопрос.
Возможно ли для интерпретируемого языка программирования написать компилятор? - да если он Тьюринг полный.
Компилятор-то написать можно, но не факт, что это приведет к серьезному ускорению кода без сокращения возможностей языка.
Например, если язык активно использует интроспекцию или меняет текст программы на ходу, все что останется сделать - это сложить интерпретатор и исходник программы в один файл и сказать, что так и было.