LINUX.ORG.RU

LLVM API


0

0

Где взять хоть что-нибудь на русском по API LLVM? На инглише есть на офф. сайте и в пакетах Debian, но осиливать очень тяжело.

Deleted
Ответ на: комментарий от Deleted

теоретически подкованному особого труда не составит, там все логично

hizel ★★★★★
()

Ну сам подумай, кому вообще взбредет в голову переводить или что-то писать про llvm на русском? Не знающим инглиша там делать абсолютно нечего.

anonymous
()

Почитай пачку общеобразовательных статей на каком-нибудь хабре, а потом не страшно и за инглиш браться.

pathfinder ★★★★
()

Да, на русском почти ничего нет. Читай доки с офф.сайта, в поставке довольно вменяемый, довольно простой туториал про Kaleidoscope — язык вроде питона, в двух вариантах, на C++ и на Ocaml. Ещё есть туториалы с офф. сайта «другие проекты», например довольно полезный http://staff.polito.it/silvano.rivoira/HowToWriteYourOwnCompiler.htm

Ещё полезно почитать исходники других компиляторов на LLVM со страницы http://www.llvm.org/ProjectsWithLLVM/

anonymous
()
Ответ на: комментарий от Deleted

Не сильно она и сложная, если ты понимаешь как работает компилятор вообще и pipeline компилятора вообще. Там API вполне логично разбит на подсистемы: линкер, кодогенератор, обработка AST, парсер/лексер. Потом это довольно логично отображается на С++ — блок кода из AST записывается через шаблоны в LLVM API, добавляются проходы-оптимизации, кодогенераторы, и т.п.

Перевод на русский C++ LLVM API многого не даст — та же дока, сгенерированная doxygen'ом (кстати, там нормальная дока по API в поставке) будет полезнее.

Важнее понимать, что и зачем делается. Что делает конкретный «кусок API», что поступает на вход, в каком виде, что имеем на выходе, в каком виде.

Чтобы такое понимание появилось, поковыряй какие-нибудь компиляторы/интерпретаторы на LLVM, посмотри биткод *.bc, посмотри что происходит с кодом (лексер и парсер строит AST, проверяется семантическим анализатором семантическая корректность AST, кодогенератор разбивает код на блоки и генерирует код блоков в SSA форме, стыкуя блоки через phi инструкцию, добавляя жёстко аннотации типов для всех переменных. Добавляются в pipeline оптимизации, выбирается выходной формат биткода, и генерируется итоговый бинарник)

Почитай доку на сайте LLVM в разеде «публикации». Для меня полезным были несколько док: про clang/dragonegg/llvm-gcc, расписан общий pipeline компилятора (особенно про dragonegg — выкинули кусок из gcc pipeline с GIMPLE, заменили на llvm биткод), про ghc -llvm бекенд (то же самое, применительно к ghc), про KLEE (семантический анализатор С кода), про написание компилятора на питоне + ANTLR + LLVM (работа несерьёзная по сравнению с более другими компиляторами, но показывает простой порог вхождения: студент за 2-3 месяца используя питон и LLVM написал рабочий интерпретатор/компилятор своего языка, то есть освоить LLVM API довольно просто).

Алсо, биндинги llvm для хаскелля довольно прозрачные, см. http://augustss.blogspot.com/ — покопавшись у него в блоге, ты найдёшь компилятор бейсика на хаскелле через LLVM

Кроме того, можно сильно не заморачиваться насчёт API, а генерировать уже готовый для LLVM код в текстовом виде. То есть, ты делаешь свой парсер/лексер и выдаёшь не бинарный биткод через LLVM API, а текст с LLVM ассемблером, и собираешь его llvm-as (так сделал например автор GHC llvm бекенда, деградация по скорости 1-5% по сравнению с API напрямую).

Другой вариант для лентяев:
1. Берёшь ANTLR, пишешь грамматику для лексера/парсера. Пишешь на ANTLR main с 5 строчек, в конце печатаешь AST в виде .toStringTree(). На выходе у тебя получается почти нормальный лисп-код, только отформатированный коряво (ещё 10 строчек, и можно написать lisp pretty printer для S-выражений)
2. Берёшь LLVM компилятор лиспа или схемы. Пишешь на этом диалекте лиспа/схемы макросы, которые соответствуют токенам — узлам AST. Макры раскрываются в «нормальный» лисп/схему диалекта.
3. Компилируешь этим компилятором лиспа/схемы. Насчёт кодогенерации через LLVM API пускай голова болит у него.
4. PROFIT!

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, с самыми базовыми вещами разобрался, а дальше уже и туториал на оффсайте начал осиливать (первые 4 главы осилил уже). Тему можно закрывать.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.