Здравствуйте. Пока я об отладке не задумывался, и dwarf-секции не генерируются, поэтому отлаживать нормально код нельзя. Лично я баги компилятора изучаю, страдая читая выходной код на ассемблере (там есть немного комментариев).
Здравствуйте. Я начал писать этот компилятор с лета 2023 года. Писал с большими перерывами, так как я сейчас учусь в вузе. Я начал его писать на базе другого компилятора для более простого языка, который я писал в 2022-2023 учебном году, и который был моим дипломным проектом.
Могу отметить, что при написании такого сложного для меня проекта (всё другое, что я писал, было намного проще) требуется большая концентрация и "видение всего проекта", иначе можно придумать что-то неудачно, потратить на это время, и обнаружить проблему позже. Поэтому писать медленно и по чуть-чуть не получалось — только рывками помногу.
Стандартная библиотека у меня очень мала, и с нормальным знанием языка пишется очень быстро (за несколько дней). Написание её на alias-е тоже прошло быстро и без проблем, что доставило мне большое чуство удовлетворённости от того, что хотя бы это на моём языке можно написать.
Конечно же, время зависит от опыта и знаний системного программирования. Я заранее не знал всё это и изучал по ходу написания. Поэтому оно и длится несколько лет.
специалиста, который недостаточно квалифицирован в том, о чём он взялся писать
Это действительно так — я самоучка.
Нет такого языка — llvm
Здесь довольно мутно — неужели нельзя называть промежуточное представление языком? (И intermediate representation, и bitcode)
Я бы вообще рекомендовал избегать использования слова “сигнатура” в контексте C.
Возможно, я неправильно понял значение слова "сигнатура". Для меня это "формат" функции (что она принимает и возвращает) в отрыве от конкретного кода и языка (неважно, `int(*)(int, char)`, или `int -> char -> int`).
До данной книги я знал, непосредственно, просто язык C, а также graphic APIs (но это другая история). Конечно, эта книга не ответила на вопрос, как, собственно писать ОС, так как на этом она просто обрывается.
Однако, книга очень хорошо и подробно показала, как происходит процесс компиляции. Почему именно она? Потому что после её прочтения я "поверил", что это работает именно так. Например, когда я читаю обычную сверхизвестную книгу (например, Танненбаума, но здесь это лишь гиперболизированный пример, так как к теме он не относится), я получаю обзор "как всё сложно устроено", вместо полноценного минимального примера.
Здесь же в результате чтения я понял, как читать языки ассемблера (для разных архитектур), увидел, как просто работают компиляторы (если выключить оптимизации), сложил A + B и написал простой компилятор в язык ассемблера x86 (что является интересным опытом).
Это лишь моё видение обучения — через "показать минимальный рабочий пример", а дальше обучающийся будет понимать, в какую сторону именно ему нужно смотреть.
То, что написал я — было по большей части вдохновлено этой книгой. И, конечно, я считаю это не книгой в общеизвестном смысле, а минимальной wiki.
Здравствуйте. Пока я об отладке не задумывался, и dwarf-секции не генерируются, поэтому отлаживать нормально код нельзя. Лично я баги компилятора изучаю,
страдаячитая выходной код на ассемблере (там есть немного комментариев).Здравствуйте. Я начал писать этот компилятор с лета 2023 года. Писал с большими перерывами, так как я сейчас учусь в вузе. Я начал его писать на базе другого компилятора для более простого языка, который я писал в 2022-2023 учебном году, и который был моим дипломным проектом.
Могу отметить, что при написании такого сложного для меня проекта (всё другое, что я писал, было намного проще) требуется большая концентрация и "видение всего проекта", иначе можно придумать что-то неудачно, потратить на это время, и обнаружить проблему позже. Поэтому писать медленно и по чуть-чуть не получалось — только рывками помногу.
Стандартная библиотека у меня очень мала, и с нормальным знанием языка пишется очень быстро (за несколько дней). Написание её на alias-е тоже прошло быстро и без проблем, что доставило мне большое чуство удовлетворённости от того, что хотя бы это на моём языке можно написать.
Конечно же, время зависит от опыта и знаний системного программирования. Я заранее не знал всё это и изучал по ходу написания. Поэтому оно и длится несколько лет.
Спасибо за отзыв!
Это действительно так — я самоучка.
Здесь довольно мутно — неужели нельзя называть промежуточное представление языком? (И intermediate representation, и bitcode)
Возможно, я неправильно понял значение слова "сигнатура". Для меня это "формат" функции (что она принимает и возвращает) в отрыве от конкретного кода и языка (неважно, `int(*)(int, char)`, или `int -> char -> int`).
Здесь я хотел бы предложить посмотреть на книгу Operating Systems: From 0 to 1, а затем мой отзыв на неё.
Отзыв
До данной книги я знал, непосредственно, просто язык C, а также graphic APIs (но это другая история). Конечно, эта книга не ответила на вопрос, как, собственно писать ОС, так как на этом она просто обрывается.
Однако, книга очень хорошо и подробно показала, как происходит процесс компиляции. Почему именно она? Потому что после её прочтения я "поверил", что это работает именно так. Например, когда я читаю обычную сверхизвестную книгу (например, Танненбаума, но здесь это лишь гиперболизированный пример, так как к теме он не относится), я получаю обзор "как всё сложно устроено", вместо полноценного минимального примера.
Здесь же в результате чтения я понял, как читать языки ассемблера (для разных архитектур), увидел, как просто работают компиляторы (если выключить оптимизации), сложил A + B и написал простой компилятор в язык ассемблера x86 (что является интересным опытом).
Это лишь моё видение обучения — через "показать минимальный рабочий пример", а дальше обучающийся будет понимать, в какую сторону именно ему нужно смотреть.
То, что написал я — было по большей части вдохновлено этой книгой. И, конечно, я считаю это не книгой в общеизвестном смысле, а минимальной wiki.