Все ли языки программирования изоморфны?
Всегда ли для любой программы, написанной на определенном языке программирования, можно скомпилировать программу эквивалентной функциональности на любом другом языке?
2 ответа
С точки зрения сырой логики, да; до тех пор, пока оба языка тьюрингово полны.
Однако если в вашем коде используются API-интерфейсы, которые недоступны на целевом языке (например, сети, файловые системы, 3D-ускорение или многопоточность), то нет. (если вы не напишите полноценную виртуальную машину на целевом языке и не построите ее)
Например, нет нормального способа перенести многопоточный код с общей памятью в Javascript.
Хотя все языки, полные тьюринга, обладают технически равной силой, для выражения идеи в одном из них может потребоваться на порядок больше работы, чем в другом.
Кроме того, они могут предоставлять различные объемы доступа к базовой платформе в форме API или тому подобного.
Что аккуратно приводит к тьюрингу-тарпиту, что означает, что может быть слишком много работы, чтобы что-то сделать в одном из них, в той степени, в которой первое написание переводчика для другого языка является победой.