Обновить

Комментарии 5

Я не специалист в данном вопросе, но уже за сам тот факт, что автор делает сам, а не живет, как другие ойтитишники, по принципу: “Можно… А зачем?” - плюсую ему карму.

Проект интересный, но мне кажется в современных реалиях проще и эффективнее делать под LLVM IR.

Чтобы оптимизация кода была на нем, ну и поддержка многих архитектур.

Я извиняюсь, но есть множество контекстов, когда LLVM вообще не прёт в компиляторах — да, они требуют по причинам архитектуры чего-либо, что он не выполняет, но этого уже иногда хватает, чтобы его выбросить, если эти нюансы того стоят. По собственному опыту говорю :)

Например, генерация сложения у меня выглядит примерно так:

Эм... Я, честно признаюсь, даже завис на некоторое время, пока не сообразил. Хотя вопрос, что там происходит в generate_node остался, но мне по-прежнему лень лезть на GitHub. Всем доброго утра :)

P.s. Статье плюсик, даже при невнимательном чтении ;)

generate_node - это лишь рекурсивный вызов, который проверяет тип вершины и вызывает соответствующую generate_***-функцию. Например, если left - это тоже сложение, то generate_node вызовет generate_addition. Если left - это integer literal, то вызовется функция, которая сделает output_asm("mov [rsp - 8], ", value).

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации