LINUX.ORG.RU

Компилятор Си в размером менее 512 байт

 512, ,


2

2

Один крутой мэн сумел написать работающий компилятор Си, объёмом меньше 512 байт.

На Хабре перевод статьи о компиляторе https://habr.com/ru/companies/ruvds/articles/740310/

В кодировке base64 это будет

6gUAwAdoADAfaAAgBzH/6DABPfQYdQXoJQHr8+gjAVOJP+gSALDDqluB+9lQdeAG/zdoAEAfy+gI
AegFAYnYg/hNdFuE9nQNsOiqiwcp+IPoAqvr4j3/FXUG6OUAquvXPVgYdQXoJgDrGj0C2nUGV+gb
AOsF6CgA68Ow6apYKfiD6AKrifgp8CaJRP7rrOg4ALiFwKu4D4Srq1fonP9ewz2N/HUV6JoA6BkA
ieu4iQRQuIs26IAAWKvD6AcAieu4iQbrc4nd6HkA6HYA6DgAHg4fvq8Bra052HQGhcB19h/DrVCw
UKroWQDoGwC4WZGrW4D/wHUMuDnIq7i4AKu4AA+ridirH8M9jfx1COgzALiLBOucg/j4dQXorf/r
JIP49nUI6BwAuI0G6wyE0nQFsLiq6wa4iwarAduJ2KvrA+gAAOhLADwgfvkx2zHJPDkPnsI8IH4S
weEIiMFr2wqD6DABw+gqAOvqicg9Ly90Dj0qL3QSPSkoD5TGidjD6BAAPAp1+eu86Ln/g/jDdfjr
slIx9osEMQQ8O3QUuAACMdLNFIDkgHX0PDt1BIkEMcBaw/v/A8H9/yvB+v/34fb/I8FMAAvBLgAz
wYQA0+CaANP4jwCUwHf/lcAMAJzADgCfwIUAnsCZAJ3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAVao=

А вам слабо сыграть ноктюрн на флейте из водосточных труб засунуть компилятор в загрузочный сектор диска?

Где-то видел (лет 7 назад) компилятор в 1.5 килобайта. Но ещё меньше… Наверное тотально урезано, но один фиг интересно. Пойду почитаю, спасибо что принёс.

LINUX-ORG-RU ★★★★★
()

засунуть компилятор в загрузочный сектор диска?

Смысл загрузочного сектора передать управление дальше. Тут разве что джигу дрыгу устроить по прыганию туда сюда. Смысла просто никакого нет.

Но чисто записать, туда можно, чёб нет то =) Просто потому что =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Смысл загрузочного сектора передать управление дальше

Так можно развить идею. Можно хранить ядро в виде исходного кода, а этим компилятором его запускать, почему нет?

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

Этим компилятором нельзя, потому что это не компилятор Си. Это компилятор форта.

А компилировать ядро на этапе загрузки из сорцов еще десять лет назад умел tcc.

javascript
()

Как пишут знающие люди, это не компилятор, а

it’s a C-subset compiler, and more accurately a JIT interpreter. There also appears to be no attempt at operator precedence.

У функций нет аргументов, нет for, нет switch, нет никаких типов кроме int, нет указателей (только доступ через (int)), нет массивов, нет return (функции ничего не возвращают), нет строковых литералов, нет локальных переменных (только определённые вне функции), нет оператора деления, нет оператора остатка, и много чего еще…

Так что 4.2 в заголовке, а-тя-тя.

Получается какой-нибудь Вася Пупкин может написать «компилятор» который понимает например только объявление переменной и сложение переменных и больше ничего и гордо назвать это «компилятором Си размером в 20 байт». 🤨

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 2)

Спека ANSI C занимает 482 Кб в plain text, если чо. Даже если убрать стандартную библиотеку - уменьшится только вдвое. Так что нет.

А так поделка интересная, да.

unsigned ★★★★
()
Последнее исправление: unsigned (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

В компилятор вшивается имя исходника более полного компилятора (этот в бутсекторе обрезан), который уже компилирует ядро ОС и т.д. Осталось придумать обоснование зачем это необходимо.

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

Понятно, ожидаемо.

«Мы должны обязаны сделать это мейнстримом» ;) // бутсектор лучше использовать по прямому назначению, но когда и кого это останавливало?

master_0K
()