Сообщение Re[7]: Про LLVM и IR от 25.08.2024 7:26
Изменено 25.08.2024 9:42 Zhendos
Re[7]: Про LLVM и IR
Здравствуйте, Shmj, Вы писали:
S>Ну может можно какое-то подмножество C сделать, чтобы там переменные определялись только 1 раз. Оно бы было валидным с т.з. С-компилятора, удобным для прочтения человеком — и выполняло бы те же самые функции, которые выполняет IR.
Так "С" недостаточно чтобы выразить сементику. Например "br i1 <cond>, label <iftrue>, label <iffalse>",
при замене его "if () goto else goto" мы вернемся к тому что начинали.
То есть хотели превратить код, в то, что потом легко отобразилось бы на ассемблер,
а получаем опять AST, которое снова нужно парсить и превращать в "инструкции".
Можно было бы "C" научить передавать метки в функцию как аргументы,
типа:
но это уже явно не "С" будет.
S>Ну может можно какое-то подмножество C сделать, чтобы там переменные определялись только 1 раз. Оно бы было валидным с т.з. С-компилятора, удобным для прочтения человеком — и выполняло бы те же самые функции, которые выполняет IR.
Так "С" недостаточно чтобы выразить сементику. Например "br i1 <cond>, label <iftrue>, label <iffalse>",
при замене его "if () goto else goto" мы вернемся к тому что начинали.
То есть хотели превратить код, в то, что потом легко отобразилось бы на ассемблер,
а получаем опять AST, которое снова нужно парсить и превращать в "инструкции".
Можно было бы "C" научить передавать метки в функцию как аргументы,
типа:
br('label1, 'label2);
но это уже явно не "С" будет.
Re[7]: Про LLVM и IR
Здравствуйте, Shmj, Вы писали:
S>Ну может можно какое-то подмножество C сделать, чтобы там переменные определялись только 1 раз. Оно бы было валидным с т.з. С-компилятора, удобным для прочтения человеком — и выполняло бы те же самые функции, которые выполняет IR.
Так "С" недостаточно чтобы выразить сементику. Например "br i1 <cond>, label <iftrue>, label <iffalse>",
при замене его "if () goto else goto" мы вернемся к тому с чего начинали.
То есть хотели превратить код, в то, что потом легко отобразилось бы на ассемблер,
а получаем опять AST, которое снова нужно парсить и превращать в "инструкции".
Можно было бы "C" научить передавать метки в функцию как аргументы,
типа:
но это уже явно не "С" будет.
S>Ну может можно какое-то подмножество C сделать, чтобы там переменные определялись только 1 раз. Оно бы было валидным с т.з. С-компилятора, удобным для прочтения человеком — и выполняло бы те же самые функции, которые выполняет IR.
Так "С" недостаточно чтобы выразить сементику. Например "br i1 <cond>, label <iftrue>, label <iffalse>",
при замене его "if () goto else goto" мы вернемся к тому с чего начинали.
То есть хотели превратить код, в то, что потом легко отобразилось бы на ассемблер,
а получаем опять AST, которое снова нужно парсить и превращать в "инструкции".
Можно было бы "C" научить передавать метки в функцию как аргументы,
типа:
br(condition, 'label1, 'label2);
но это уже явно не "С" будет.