Kompilator do bytecodu

Kompilator do bytecodu
lukasz1235
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 8 lat
  • Postów:1105
0

Witam
Znacie jakiś kompilator języka C lub C++ do bytecodu (najlepiej do jak najprostszego)?
Pozdrawiam

deus
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

Clang na LLVM powinien kodem pośrednim się posługiwać chyba, obadaj go.


I nie udawaj, że rozumiesz.
lukasz1235
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 8 lat
  • Postów:1105
0

Tylko nie wiem jak go zmusić do wygenerowania bytecodu. Jedynie udało mi się wygenerować coś w rodzaju assemblera.

edytowany 2x, ostatnio: lukasz1235
lukasz1235
Edit: Chyba mam: clang -c -emit-llvm main.c Teraz drugie pytanie: Gdzie mogę znaleźć opis tego bytecodu?
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
0

MSVC++ potrafi kompilować do bytekodu CLI (czyli .Net Framework). Nie wiem na ile jest on „najprostszy” bo nigdy się w to nie zagłębiałem. Ale znając wynalazki Microsoftu, zapewne jest wręcz odwrotnie ;-)

edytowany 1x, ostatnio: Azarien
deus
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

Gdzie mogę znaleźć opis tego bytecodu?

To kod LLVM, na stronie developerskiej tego projektu. To świetna rzecz na BSD, mocno wspierana przez Apple, z bardzo dobrym i czytelnym kodem (w porównaniu do tego śmiesznego GCC).

Co do MSILu to taki tragiczny nie jest chociaż mało się nim bawiłem. Maszyna stosowa, dosyć dobrze zaprojektowana, ale pewne rzeczy są dosyć złożone, poza tym C/C++ używające typowego runtime'u C/C++ niezbyt się tutaj 'prezentuje' - mieszkanka (wywołań) kodu zarządzanego z natywnym, odpada chyba.


I nie udawaj, że rozumiesz.
edytowany 1x, ostatnio: deus
msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
0

@Azarien - CIL jest IMO dużo czytelniejszy od kodu maszynowego. (tak, to poniżej to jest bajtkod)

Kopiuj
.assembly HelloWorld
.class auto ansi HelloWorldApp
{
     .method public hidebysig static void Main() cil managed
     {
          .entrypoint
          .maxstack 1
          ldstr "Hello world."
          call void [mscorlib]System.Console::WriteLine(string)
          ret
     }
}

I jest wystarczająco dużo narzędzi ułatwiających pracę z nim.

edytowany 2x, ostatnio: msm
lukasz1235
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 8 lat
  • Postów:1105
0

Może tępy jestem, ale znalazłem tylko to:
http://llvm.org/docs/BitCodeFormat.html - tu mamy opis formatu (przyda się, ale mało informacji)
http://llvm.org/docs/LangRef.html - opis języka, ale o bitkodzie nic

PS. Dużo pracy będzie kosztowało napisanie bardzo while(1){printf("bardzo");} bardzo prostego interpretera tego bitcodu?

deus
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0
MSM napisał(a)

@Azarien - CIL jest IMO dużo czytelniejszy od kodu maszynowego. (tak, to poniżej to jest bajtkod)

To jest efekt dezasemblacji bytekodu... Od asma x86 wcale czytelniejszy nie jest, może na poziomie hello-world. Jednak ma regularną strukturę, nie to co opkody x86. Weź pod uwagę, że to maszyna stosowa, dosyć skomplikowana. Teraz zagadka - jaka jest najbardziej znienawidzona część operacji w IA-32? Instrukcje stosowe koprocesora x87, zgadnij dlaczego?


I nie udawaj, że rozumiesz.
edytowany 1x, ostatnio: deus
deus
Tja, napisz większe obliczenia rejestrowo, następnie zrób to samo stosowo, porównaj czytelność...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.