LINUX.ORG.RU

Retargetable C complier конечно, крут, а новее есть?

 , ,


3

6

Захотелось мне почитать про устройство и жизнь простого советского человека небольшого Си-компилятора. В качестве подопытного я выбрал Tiny C Compiler от Fabrice Bellard.

В качестве учебного пособия, для общего ознакомления с сабжем DELIRIUM посоветовал Retargetable C compiler Design and Implementation, но чёй-то от книги несёт нафталином... поновее ничего не написано? Книгу дракона не предлагать :-)

★★★★★

Последнее исправление: Twissel (всего исправлений: 1)

Книгу дракона не предлагать

Это про Clang и LLVM которые? Тогда нечего больше читать, всё остальное старо как говно мамонта.

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

Этого я и боялся :-)

Ну ладно, будем тогда читать, то что есть. Для небольших проектов, надеюсь там мало что поменялось.

Twissel ★★★★★
() автор топика

а чего тебе нафталин-то? теория компиляторов не изменилась за последние лет пятьдесят, как минимум. там ничего принципиально нового не появилось с точки зрения основных принципов. а оптимизация под конкретное железо - это вещь в себе и она меняется постоянно, про неё никто книги не пишет.

Iron_Bug ★★★★★
()
Ответ на: комментарий от i-rinat

Она тоже старая. 1986 год первая версия той книги. Вообще в теории компиляторов нечему особо меняться.

peregrine ★★★★★
()
Ответ на: комментарий от Twissel

Добрались конечно и даже умные вещи придумали. Например есть идея произвольный ЯП компилировать в некоторый байткод с некоторыми оптимизациями общий для всех ЯП но не совсем родной для железа, а тот байткод собирать уже в машинный под нужную архитектуру с оптимизациями под конкретное железо.

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

Например есть идея произвольный ЯП компилировать в некоторый байткод

Лексер на месте, парсер на месте, оптимизации на месте, кодогенерация на месте. Аллокация регистров выбрасывается на следующий этап, а так всё вроде то же. Разве нет?

i-rinat ★★★★★
()
Ответ на: комментарий от Twissel

Это хорошо, что туда еще хипстеры не добрались...

от книги несёт нафталином

Возможно, они в пути...

По теме: есть «Engineering a Compiler».

xaizek ★★★★★
()
Ответ на: комментарий от Twissel

Это, если грубо говоря, и JVM, и .NET, и, кажется, Google GWT (транслирует Java в подмножество JS) — LLVM делает промежуточное представление кода, оно общее для всех платформ и не обязательно оптимизированное, также статическая трансляция необязательна, есть JIT-компиляция

mazdai ★★★
()
Последнее исправление: mazdai (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

а как же механизмы распараллеливания, ветвления, перестройка дерева, векторизация? Или всё что после gcc2/msvc6 - не компиляторы?

mittorn ★★★★★
()
Ответ на: комментарий от Iron_Bug

ничего принципиально нового не появилось

4.2 (ужасающая некомпетентность)
2018-50=1968

а публикация, к примеру, Мельчука была в 1974
И. А. Мельчук. Опыт теории лингвистических моделей «Смысл ⇔ Текст». М., 1974

Einstok_Fair ★★☆
()

Могу ещё классику посоветовать: Никлаус Вирт «Разработка операционной системы и компилятора». Там про Оберон, но принципы одинаковые. Ещё документацию LLVM, там есть пример разработки игрушечного языка Kaleidoskop (ЕМНИП). В gcc лезть не советую, уж лучше действительно tcc.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Einstok_Fair

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Einstok_Fair

можешь не пересказывать, я разрешаю. но по сути ничего принципиально нового в компиляторах нет. довольно стандартная штука. вся разница лишь в архитектурно-зависимых кодогенераторах.

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

ну ещё есть оптимизации не под железо, а именно оптимизации самого кода, перестраивающие дерево. Например, шланг где-то умудрялся вместо вызова функции по нулевому указателю вызывать функцию, которая никогда не была вызвана (тред на лоре был). Не ужели за этим не стоит кучи теории? Или же подобная оптимизация была описана ещё десятки лет назад?

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

ну, косяки шланга - это косяки шланга. в gcc тоже косяки были, когда Торвальдс рвал и метал. бывает. потом исправляют.

но это не то, что входит в теорию компиляторов. это просто криворукость.

а насчёт плюсов: бурная фантазия комитета добавляет изрядно геморроя для разработчиков компиляторов. они не успевают внедрять всякое фуфло, а надо ещё заниматься оптимизацией и тщательной проверкой. тупо не успевают или вносят косяки в процессе внедрения новых фич.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

а чего тебе нафталин-то? теория компиляторов не изменилась за последние лет пятьдесят, как минимум. там ничего принципиально нового не появилось с точки зрения основных принципов.

Одну принципиально важную концепцию ввели совсем не так давно:

Static single assignment form (SSA) was proposed by Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck in 1988. Ron Cytron, Jeanne Ferrante and the previous three researchers at IBM developed an algorithm that can compute the SSA form efficiently (1991).

gag ★★★★★
()
Ответ на: комментарий от Iron_Bug

теория компиляторов не изменилась за последние лет пятьдесят, как минимум. там ничего принципиально нового не появилось с точки зрения основных принципов

Просто для протокола - ты лжешь.

tailgunner ★★★★★
()
Ответ на: комментарий от Twissel

Почему плохо начинать с TCC? Потому что его писал Ъ-хакер и он мало похож на учебные компиляторы.

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

Скажи, кем ты работаешь? Чем именно занимаешься?

Я работаю инженером-программистом и занимаюсь системным программированием. Хобби - история вообще и история моего ремесла в частности.

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

Так-то тот анастезиолог много добра сделал, так что какая разница.

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

я видела анестезиолога, который по профессии был физиком. классный был дядька. и, кстати, лучший анестезиолог в нашей областной больнице. потому что он понимал, как работает всё оборудование, а не только умел ручки крутить и параметры смотреть.

в обратную сторону - из медиков в технари - переходы бывают крайне редко.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от tailgunner

просто для пруфа - приведи примеры. вот тут предлагают новости из 1988-го. ну, пусть не 50, а 30 лет. разницы никакой. к тому же, это такие косметические мелочи, что на суть это никак вообще не влияет.

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 2)
Ответ на: комментарий от Iron_Bug

ну, пусть не 50, а 30 лет. разницы никакой.

Разница в 20 лет. Но, прикинь, компиляторы до сих пор развиваются. Вот например: https://arxiv.org/pdf/1809.02161.pdf

И да, между 1968 и 1988 компиляторы очень сильно изменились. Что там было самым сложным компилятором в 1968 - PL/I? А в 1988 - Ada, или какой-нибудь ФП-язык?

математические основы всего этого были заложены ещё в хрен знает каких лохматых годах

Математические основы чего именно - синтаксического разбора (который является относительно небольшой частью фронтенда)? Например, PEG-парсеры - изобретение относительно недавнее; атрибутные грамматики в 1968 были только появились; даже классификация Хомского - всего-то 1956. Или ты о теории графов? Дискретной математике? Просто для протокола: компиляторы - это не математика. Это инженерная дисциплина.

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

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

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

Не путай парсер с компилятором. В понятных тебе терминах - это как палец и жопа.

Хотя даже c парсерами ты попала пальцем... ну ты поняла куда.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от alexanius

Да действительно вроде довольно подробная книга.

Спасибо.

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