Wydaje się, że pytanie zostało częściowo odpowiedział, więc chciałbym, aby dać mu szansę:
Co trzeba zrobić, aby utworzyć backend VHDL dla LLVM?
Co trzeba by przetłumaczyć LLVM IR na język wyższego poziomu (prawdopodobnie z zamiarem konwersji między wysokimi poziomami językowymi)?
dam wam jakieś tło na 2. i rozszerzyć w późniejszym terminie na 1.
Jeśli chcesz przekonwertować LLVM IR do języka wysokiego poziomu, takich jak C lub Java:
Będziesz musiał wykonać instrukcje LLVM i przekształcić je w odpowiadający mu kod C. Następnie musisz wziąć pozostałe funkcje, których LLVM nie ma odpowiednika (jak klasy i abstrakcje dla C++) i napisać procedurę, która znajdowałaby te wzorce w LLVM (jak ponownie wykorzystane bloki) i napisać C. Dla podstawowych rzeczy, jest całkiem prosta. Ale po prostu podążaj za tokiem myślenia i szybko odkryjesz, że zdajesz sobie sprawę z prawdziwego problemu, w końcu nie wszyscy piszą proste C. Aby jeszcze bardziej zwiększyć trudność, możesz nie uzyskać tego samego LLVM IR podczas kompilowania wygenerowanego C!(Rozważmy wynikową pętlę sprzężenia zwrotnego)
Jeśli chodzi o Javę, czeka nas jeszcze trudniejsza walka, bezpośrednio z LLVM IR, aw każdym z tych przypadków nadal istnieje problem, że prawdopodobnie nie otrzymamy tego samego kodu kompilującego do LLVM IR , jeśli ktoś może to zrobić. Zamiast tego tłumaczyłbyś LLVM IR na kod JVM Bytecode. Następnie możesz użyć odwrotnego kompilatora, aby uzyskać Javę.
Grupa chińskich studentów najwyraźniej była w stanie to zrobić, ale zastanawiali się, dlaczego tak małe zainteresowanie ich badaniami. Powiedziałbym, że jego bc nie w pełni rozumieją, co zrobili faceci z LLVM i jak jest lepszy niż JVM. (W rzeczywistości LLVM prawdopodobnie czyni JVM przestarzałą;)
Nawet jeśli wydaje się to przydatne, można użyć LLVM jako pośrednika między C i Java do konwersji dwukierunkowej, to rozwiązanie jest w rzeczywistości mało przydatne, ponieważ pytamy złe pytanie. Widzisz, cały powód, dla którego chciałbyś, aby to było dla praktyczne mieć wspólną podstawę kodu i zwiększyć wydajność.
Ale prawdziwym problemem jest to, że potrzebujemy języka, który wyodrębniłby wspólne cechy współczesnych języków, i który daje centralny język, z którego można zbudować. http://julialang.org/ udzielił odpowiedzi na pytanie
Ouch! Wiem o SystemC. Generowanie kodu "Silicium" z imperatywnego kodu jest bardzo trudne! Życzymy powodzenia, czekam na podpowiedzi :-) – jdehaan
Tak, VHDL może być trudne. Być może powinienem powiedzieć, że chcę dowiedzieć się, jak uzyskać generowanie kodu backend LLVM do wyprowadzenia języka wysokiego poziomu, zamiast kodu zespołu procesora? Na przykład, co jeśli chciałbym użyć LLVM do przetłumaczenia C na Javę lub może na Fortran - jak by to się stało? – aneccodeal