• ? GCC Haskell А можно Х-й Cmm преобразовать в Гццшный TREE? Ну, и дальше «по команде»: GIMPLE, RTL, асм. Из главных плюшек — LTO, конечно. Ну, может быть и оптимизаицй каких-нибудь перепадёт.

Replies (6)

  • @Macil, формально ты можешь попросить все промежуточные файлы оставлять тебе там будет C код (если через задепрекейченный -via-c)
  • @qnikst, В современных GHC уже не работает. Только если включить registered режим при сборке.
    Кстати, а почему этот бэкенд убрали? Не получалось обеспечить нужные оптимизации? Или проблема именно в том что цель — рожать переносимый C?
  • @Macil, вероятно оба пункта, но хз на самом деле
  • @Macil, я если честно не в курсе, могу проконсультироваться попробовать
  • @qnikst, Нашёл тут бумажку по LLVM-бэку (в разделе commentary), большинство вопросов исчезло. Главным образом: бэку всё-равно придётся разбираться с регистрами, кучей, и семантикой STG, а на сишке это — ад. ИМХО, даже если брать GENERIC-представление GCC.
    А вот GIMPLE — это уже куда не шло...
    Если и консультироваться, то спросить были ли такие мазох..., в смысле, пытался ли кто-то сделать GCC-бэкенд для GHC (по аналогии с LLVM-бэкендом).
    Тут вопрос принципиальный: либо допилить GENERIC-представление под семантику STG и херачить генерик, либо не выпендриваться, а сразу херачить GIMPLE (с вероятностью в районе 0.99 закончить тем же как и LLVM-бэкенд, застряв на полпути).
  • @Macil, Ещё один из вариантов как получить LTO — написать дизассемблер в GIMPLE. Это не такая дурацкая идея. Такой дизассемблер может лечь в основу DBT/DBI системы по аналогии с Валгриндом или Qemu.