5

Obecnie pracuję w języku programowania dla zwierząt domowych (do celów edukacyjnych) i przeszedłem wiele badań w ciągu ostatniego roku, i myślę, że nadszedł czas, aby wreszcie zacząć modelowanie koncepcji takiego języka. Przede wszystkim chcę go skompilować do jakiejś formy pośredniej, takiej jak kod JVM lub .NET, celem jest kompatybilność wieloplatformowa/architektura. Po drugie, chcę, aby była szybka (mam też na myśli wiele innych rzeczy, ale nie jest to celem tego tematu, aby o tym dyskutować).Używanie LLVM jako maszyny wirtualnej - wieloplatformowe i wieloarchitekturowe kodowanie

najlepsze opcje, które przyszło mi do głowy to: kompilacji do kodu bajtowego JVM i używać OpenJDK jako środowisko uruchomieniowe, kompilacji do kodu bajtowego .NET i Mono używać jako środowisko uruchomieniowe, skompilować LLVM IR i korzystać LLVM jako środowisko uruchomieniowe .

Jak można sobie wyobrazić, wybrałem LLVM. Czemu? ponieważ jego płonący szybko. Zrobiłem mały test porównawczy przy użyciu kodu C-C N-Ciała i osiągnąłem 7-ki w mojej maszynie z podczerwonym IR, w przeciwieństwie do 27-ciu z natywnym kompilowanym kodem klonu (wiem, że w pierwszej kolejności robię IR, a potem kod maszynowy).

Oto moje pytanie: czy istnieje jakaś redystrybucyjna wersja podstawowego zestawu narzędzi LLVM (po prostu potrzebuję Lli), którego mogę użyć? Czy muszę skompilować własne? Jeśli to drugie, czy możesz mi podać jakieś wskazówki, jak to zrobić? Jeśli naprawdę muszę to zrobić, to myślę, że to krzyżowanie ich z mojego komputera (Intel Mac) i generowanie niektórych instalatorów (powiedzmy .msi dla Windows, .rpm i .deb dla popularnych dystrybucji Linuksa i .pkg dla Mac). Pamiętaj, że potrzebuję tylko minimalnego podzbioru LLVM, tak aby ten podzestaw mógł działać jak maszyna wirtualna, używając "lli". Prawdziwym pytaniem jest tutaj, jak używać LLVM jako typowej maszyny wirtualnej.

+0

Projekt LLVM ma pozwolenie permisywne; wydaje się, że potrzebujesz dystrybucji ** bibliotek podstawowych **. –

+0

@RobertHarvey To, co myślałem, kup, nie mam pojęcia, od czego zacząć. – Salvia

+0

Jest rzeczą oczywistą, że i tak będziesz musiał przeczytać dokumentację, a ponieważ już podjąłeś decyzję ... Jestem podekscytowany pracą z LLVM; niestety, nie przeczytałem jeszcze dokumentacji. –

Odpowiedz

4

Po pierwsze, myślę, że wszystkie 3 opcje - LLVM IR + LLVM, Java Bytecode + OpenJDK i .NET CIL + Mono - są znakomitymi opcjami i zgadzam się, że decydowanie między nimi nie jest łatwe.

Jeśli wybierzesz LLVM i chcesz po prostu użyć lli, możesz skompilować LLVM do swojej platformy docelowej i spakować wynikowy plik lli z dystrybucją, powinien działać.

Innym sposobem napisania kompilatora JIT za pośrednictwem LLVM jest użycie silnika wykonawczego - see the handy examples in the Kaleidoscope tutorial. Oznacza to, że piszesz swój własny program, który będzie kompilował JIT w twoim własnym języku, kompilowałeś go do dowolnej platformy, podczas gdy statycznie łączyłeś ją z LLVM, a następnie rozprowadzałeś.

W każdym przypadku, ponieważ kompilator JIT wymaga skopiowania pliku binarnego LLVM po stronie klienta, należy dołączyć informację o prawach autorskich do dystrybucji (nie musisz jednak otwierać dystrybucji swojej dystrybucji).

+0

Dzięki, artykuł, który połączyłeś, był bardzo pomocny, mogę go użyć jako punktu wyjścia. – Salvia

+0

Link jest zepsuty – rraallvv

+0

@rraallvv naprawiony, dzięki! – Oak

Powiązane problemy