Es scheint, wurde die Frage teilweise beantwortet, so würde Ich mag es eine Chance geben:
Was es dauern würde, ein VHDL-Backend für LLVM zu schaffen?
Was müsste man tun, um LLVM IR in eine höhere Sprache zu übersetzen (vermutlich mit der Absicht, zwischen High-Level-Sprachen zu konvertieren)?
Ich werde Ihnen einige Hintergrundinformationen über 2. geben und zu einem späteren Zeitpunkt erweitern auf 1.
Wenn Sie LLVM IR auf eine höhere Programmiersprache wie C oder Java umwandeln möchten:
Sie müssten die LLVM-Anweisungen nehmen und diese in ihren entsprechenden C-Code abstrahieren. Dann müssen Sie die verbleibenden Funktionen nehmen, für die LLVM keine Entsprechung hat (wie Klassen und Abstraktionen für C++) und eine Routine schreiben, die diese Muster im LLVM finden würde (wie wiederverwendbare Blöcke) und C schreiben. Es ist ziemlich einfach. Aber folgen Sie einfach dem Gedankengang und Sie merken schnell, dass Sie das wahre Schwierige des Problems erkennen, schließlich schreibt nicht jeder einfach C. Um die Schwierigkeit weiter zu verschärfen, erhalten Sie möglicherweise nicht das gleiche LLVM IR beim Kompilieren des generierten C!(Betrachten Sie die resultierende Rückkopplungsschleife)
Wie bei Java, sind Sie in einem noch härteren Kampf direkt aus LLVM IR, und in jedem Fall haben Sie immer noch das Problem, dass Sie wahrscheinlich nicht den gleichen Code kompilieren zu LLVM IR bekommen wenn man das überhaupt kann. Stattdessen würden Sie LLVM IR in JVM Bytecode übersetzen. Dann könnten Sie einen Reverse-Compiler verwenden, um Ihr Java zu erhalten.
Eine Gruppe chinesischer Studenten war anscheinend in der Lage, dies zu tun, aber sie wunderten sich, warum so wenig Interesse an ihrer Forschung. Ich würde sagen, sie wissen nicht genau, was die LLVM-Jungs gemacht haben und wie es besser ist als die JVM. (Tatsächlich macht LLVM die JVM obsolet;)
Auch wenn dies sinnvoll erscheint, da man LLVM als Vermittler zwischen C und Java bidirektional konvertieren kann, ist diese Lösung tatsächlich von geringem Nutzen, da wir die falsche Frage. Sehen Sie, der ganze Grund, warum Sie das für praktische Zwecke wünschen, ist, eine gemeinsame Codebasis zu haben und Leistung zu erhöhen.
Aber das wirkliche Problem ist, dass wir eine Sprache brauchen, die die Gemeinsamkeiten der modernen Sprachen abstrahiert hat und die Ihnen eine zentrale Sprache gibt, aus der Sie bauen können. http://julialang.org/ hat die Frage
beantwortet
Autsch! Ich kenne SystemC. Die Erzeugung von "Silizium" -Code aus Imperativ-Code ist sehr anspruchsvoll! Viel Glück, ich bleibe dran, um zu sehen, welche Art von Hinweisen kommen :-) – jdehaan
Ja, VHDL könnte schwierig sein. Vielleicht sollte ich sagen, dass ich herausfinden möchte, wie man LLVMs Backend-Codegenerierung dazu bringt, eine höhere Sprache anstelle eines Assembler-Codes für einen Prozessor auszugeben? Was wäre zum Beispiel, wenn ich LLVM verwenden möchte, um C nach Java oder vielleicht Fortran zu übersetzen - wie würde man das tun? – aneccodeal