Информация об изменениях

Сообщение Re[7]: Про LLVM и IR от 25.08.2024 7:26

Изменено 13.09.2024 15:31 Zhendos

Re[7]: Про LLVM и IR
Здравствуйте, Shmj, Вы писали:

S>Ну может можно какое-то подмножество C сделать, чтобы там переменные определялись только 1 раз. Оно бы было валидным с т.з. С-компилятора, удобным для прочтения человеком — и выполняло бы те же самые функции, которые выполняет IR.


Так "С" недостаточно чтобы выразить сементику. Например "br i1 <cond>, label <iftrue>, label <iffalse>",
при замене его "if () goto else goto" мы вернемся к тому с чего начинали.

То есть хотели превратить код, в то, что потом легко отобразилось бы на ассемблер,
а получаем опять AST, которое снова нужно парсить и превращать в "инструкции".

Можно было бы "C" научить передавать метки в функцию как аргументы,
типа:
br(condition, 'label1, 'label2);


но это уже явно не "С" будет.
Re[7]: Про LLVM и IR
Здравствуйте, Shmj, Вы писали:

S>Ну может можно какое-то подмножество C сделать, чтобы там переменные определялись только 1 раз. Оно бы было валидным с т.з. С-компилятора, удобным для прочтения человеком — и выполняло бы те же самые функции, которые выполняет IR.


Так "С" недостаточно чтобы выразить сементику. Например "br i1 <cond>, label <iftrue>, label <iffalse>",
при замене его на "if () goto else goto" мы вернемся к тому с чего начинали.

То есть хотели превратить код, в то, что потом легко отобразилось бы на ассемблер,
а получаем опять AST, которое снова нужно парсить и превращать в "инструкции".

Можно было бы "C" научить передавать метки в функцию как аргументы,
типа:
br(condition, 'label1, 'label2);


но это уже явно не "С" будет.