Si entiendo bien su pregunta, no creo que esto es una regla dura y rápida. Por ejemplo, puede usar un lenguaje funcional como Lisp, para crear un intérprete para sí mismo. En este caso, los detalles de implementación se implementan de una manera funcional (porque Lisp es un lenguaje funcional).
Además, si tiene un lenguaje que es Turing Complete, puede usarlo para implementar un analizador/intérprete/compilador para cualquier otro idioma. Hay lenguajes imperativos de Turing-Complete y lenguajes de Turing-Complete funcionales/declarativos.
Pero todos los códigos eventualmente se envían al código de ensamblaje o máquina, que es inherentemente imprescindible. En teoría, lo que dije antes es cierto, pero aparentemente no en la práctica :).
Como un lado histórico interesante, LISP fue una construcción completamente teórica; era una notación matemática para los lenguajes de computadora. Se mantuvo hasta que la función teórica de LISP eval
fue implementado en código de máquina por Steve Russel en un IBM 704:
De acuerdo con lo informado por Paul Graham en Los hackers & pintores, p. 185, McCarthy dijo: "Steve Russell dijo, mira, ¿por qué no programo este eval ..., y le dije, ho, ho, estás confundiendo la teoría con la práctica, esta eval está diseñada para leyendo, no para computar. Pero siguió adelante y lo hizo. Es decir, compiló la evaluación en mi documento en el código de máquina IBM 704, corrigió errores, y luego publicitó esto como un intérprete de Lisp, que sin duda era así. ese punto Lisp tenía esencialmente la forma que tiene hoy ... " (énfasis mío)
Así que una vez más, las sutilezas entre la teoría y la práctica. :)
Tiene razón, este es el significado de la pregunta. – AwkwardCoder
Pero el intérprete Lisp se implementa en términos de código imperativo. En algún momento, a menos que esté ejecutando en una máquina Lisp, las cosas deben compilarse para el ensamblaje. – dsimcha
Aludí a eso al final de mi respuesta. Si lo piensas * teóricamente * entonces tiene sentido. Pero en la práctica, no es así. Por ejemplo, podría implementar un analizador LISP en Perl y un analizador Perl en LISP. Si lo ves en papel, en el primer caso estás viendo un lenguaje funcional que se está implementando de manera imperativa, mientras que en el segundo caso, estás viendo un lenguaje imperativo que se implementa de una manera funcional. Sin embargo, cuando lo ponga en práctica, obviamente será imprescindible, porque el lenguaje ensamblador es imprescindible. –