Size: a a a

Compiler Development

2020 December 09

PS

Pavel Samolysov in Compiler Development
Berkus Decker
да, но мне лень сейчас описывать все подводные камни, реально
Да, один я уже назвал все статические линкуемые библиотеки должны быть собраны с этой же std lib. Не знаю минус это или нет для С++, в других языках обычно одна стандартная библиотека и зачастую ещё и один компилятор либо компиляторы  полностью совместимы.
источник

BD

Berkus Decker in Compiler Development
Pavel Samolysov
Да, один я уже назвал все статические линкуемые библиотеки должны быть собраны с этой же std lib. Не знаю минус это или нет для С++, в других языках обычно одна стандартная библиотека и зачастую ещё и один компилятор либо компиляторы  полностью совместимы.
в плюсах ничего ни с чем не совместимо - разные правила манглинга (даже если совместимый ABI)
источник

PS

Pavel Samolysov in Compiler Development
Berkus Decker
да, но мне лень сейчас описывать все подводные камни, реально
Конкретно про тот редактор, мне интересно как они предлагают собирать его на маках, там ведь тоже clang + libc++.
источник

BD

Berkus Decker in Compiler Development
Pavel Samolysov
Конкретно про тот редактор, мне интересно как они предлагают собирать его на маках, там ведь тоже clang + libc++.
с++20 на маках может появиться раньше, я не проверял но сейчас скорее всего с++17,  а вот на иосе еще не скоро
источник

PS

Pavel Samolysov in Compiler Development
hazer_hazer
если это яп, где просто есть функции + переменные + вычисления. то можно и самому. почему нет.
это ж весело
Самому это вы имеете ввиду написать свой бэкенд без llvm или генерировать самому ll-файлы без использования llvm api
источник

h

hazer_hazer in Compiler Development
Pavel Samolysov
Самому это вы имеете ввиду написать свой бэкенд без llvm или генерировать самому ll-файлы без использования llvm api
мы говорим только про парсинг же
источник

h

hazer_hazer in Compiler Development
hazer_hazer
мы говорим только про парсинг же
А. Видимо я неправильно понял вопрос.
Думал человек спрашивает именно про использование либ для парсинга/самому писать...
источник

h

hazer_hazer in Compiler Development
Тогда вопрос ещё более непонятный.
Генерить сразу машинный код самому?
Генерить LLVM IR?
Генерить байт-код и писать вм?
источник

PS

Pavel Samolysov in Compiler Development
hazer_hazer
мы говорим только про парсинг же
Человек задал вопрос про ллвм, парсер то все равно самому придётся писать здесь llvm не поможет, только если брать всякие smallvector из LLVMSupport
источник

BD

Berkus Decker in Compiler Development
писал парсер с помощью ллвм, местами помогло
источник

BD

Berkus Decker in Compiler Development
в частности с еррор репортингом
источник

h

hazer_hazer in Compiler Development
Pavel Samolysov
Человек задал вопрос про ллвм, парсер то все равно самому придётся писать здесь llvm не поможет, только если брать всякие smallvector из LLVMSupport
Просто вопрос непонятным показался, и я решил, что тема парсинга.

А у llvm нет разве фронта для парсинга?
источник

PS

Pavel Samolysov in Compiler Development
hazer_hazer
Просто вопрос непонятным показался, и я решил, что тема парсинга.

А у llvm нет разве фронта для парсинга?
В самом llvm нет, хотели что-то вынести из Clang так как уже появился и flang в монорепе, была переписка в рассылке
источник

BD

Berkus Decker in Compiler Development
void parser_t::reportError(std::string const& msg)
{
   source_mgr.PrintMessage(lex.current_loc(), llvm::SourceMgr::DK_Error, llvm::Twine(msg));
}

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

PS

Pavel Samolysov in Compiler Development
Berkus Decker
void parser_t::reportError(std::string const& msg)
{
   source_mgr.PrintMessage(lex.current_loc(), llvm::SourceMgr::DK_Error, llvm::Twine(msg));
}

сильно проще чем монстрячить руками, ошибки выдаются в стиле ллвм - с подсветкой куска инпута и т.д.
Это похоже фишка source managerа их. Интересно, спасибо.
источник

BD

Berkus Decker in Compiler Development
но сам парсер конечно своими руками - у меня и аст свой и синтаксис свой, там ллвм не поможет особо.
источник

PS

Pavel Samolysov in Compiler Development
trsfrm2smgen
а дальше только поможет практика и изучение исходников LLVM, знание STL и метапрограммирование основанное на C++ шаблонах,так как оно там юзается по всюду .
Скорее исходников какого-нибудь фронта, clang или swift, библиотеки с названиями похожие на codegen
источник

t

trsfrm2smgen in Compiler Development
Pavel Samolysov
Скорее исходников какого-нибудь фронта, clang или swift, библиотеки с названиями похожие на codegen
фронт ему не нужен,ему нужен IR и backend
источник

t

trsfrm2smgen in Compiler Development
так как все фронты давно написаны,и там нечего делать(только если свой язык разрабатывать с нуля).
источник

t

trsfrm2smgen in Compiler Development
trsfrm2smgen
фронт ему не нужен,ему нужен IR и backend
а вот тут целая работа,над пасами ,а если backend'а нету ,то и это в придачу
источник