Wenn ich Ihre Frage richtig verstanden habe, glaube ich nicht, dass eine harte und schnelle Regel. Zum Beispiel können Sie eine funktionale Sprache wie Lisp verwenden, um einen Interpreter für sich selbst zu erstellen. In diesem Fall werden die Implementierungsdetails funktional implementiert (weil Lisp eine funktionale Sprache ist).
Wenn Sie eine Sprache haben, die Turing Complete ist, können Sie damit einen Parser/Interpreter/Compiler für jede andere Sprache implementieren. Es gibt imperative Turing-Complete-Sprachen und funktionale/deklarative Turing-Complete-Sprachen.
Aber alle Code kommt schließlich auf Montage oder Maschinencode, die von Natur aus zwingend erforderlich ist. Theoretisch ist das, was ich oben gesagt habe, wahr, aber anscheinend nicht in der Praxis :).
Als eine interessante historische beiseite, LISP war ein vollständig theoretisches Konstrukt; es war eine mathematische Notation für Computersprachen. Es blieb theoretisch bis LISP der eval
Funktion in Maschinencode von Steve Russel auf einem IBM 704 implementiert wurde:
Nach dem, was berichtet von Paul Graham in Hackers & Maler, p. 185, sagte McCarthy: "Steve Russell sagte, schau, warum programmiere ich nicht diese Eval ..., und ich sagte zu ihm, ho, ho, Sie verwirren Theorie mit der Praxis, diese Eval ist für bestimmt Lesen, nicht für das Rechnen. Aber er ging voran und tat es. Das heißt, er kompilierte die Eval in meiner Zeitung in IBM 704 Maschinencode, Fehler zu beheben, und dann beworben dies als ein Lisp-Interpreter, was es war Dieser Punkt Lisp hatte im Wesentlichen die Form, die es heute hat ... " (Schwerpunkt meins)
Also noch einmal, die Feinheiten zwischen Theorie und Praxis. :)
Sie haben Recht, das ist die Bedeutung der Frage. – AwkwardCoder
Aber der Lisp-Interpreter wird dann in Bezug auf Imperativ-Code implementiert. An einem Punkt, wenn Sie nicht auf einem Lisp-Rechner laufen, müssen die Sachen in Assembly kompiliert werden. – dsimcha
Darauf habe ich am Ende meiner Antwort hingewiesen. Wenn du darüber nachdenkst * theoretisch * dann macht es Sinn. Aber in der Praxis nicht so. Zum Beispiel könnte ich einen LISP-Parser in Perl und einen Perl-Parser in LISP implementieren. Wenn man es auf dem Papier anschaut, sieht man im ersten Fall, dass eine funktionale Sprache imperativ umgesetzt wird, während im zweiten Fall eine imperative Sprache funktional implementiert wird. Wenn Sie es jedoch in die Praxis umsetzen, wird es offensichtlich zwingend erforderlich sein, da die Assemblersprache zwingend erforderlich ist. –