Size: a a a

Compiler Development

2021 January 03

I

Ilmir in Compiler Development
Defragmented Panda
#include <assert.h>#include <ctype.h>#include <stdarg.h>#include <stdbool.h>#include <stddef.h>#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/mman.h>
Стандартные хедеры, ведущие в libc, которая линкуется динамически. То есть, +0 байт к размерам бинарника.
источник

DP

Dmitry Ponyatov in Compiler Development
Defragmented Panda
давайте обсудим теоретически минимально возможный компилятор \ интерпретатор, который имеет пользовательские функции, переменные, массивы. расширяемый

чтобы не ругались про раст )
может с виртуальной машины (интерпретатора байт-кода) начать? а там определиться — на динамических структурах делать, на монолитная модель памяти как в Форте, или может из Clojure хэш-деревья привинтить
источник

DP

Defragmented Panda in Compiler Development
Ilmir
Стандартные хедеры, ведущие в libc, которая линкуется динамически. То есть, +0 байт к размерам бинарника.
для standalone
источник

DP

Defragmented Panda in Compiler Development
Dmitry Ponyatov
может с виртуальной машины (интерпретатора байт-кода) начать? а там определиться — на динамических структурах делать, на монолитная модель памяти как в Форте, или может из Clojure хэш-деревья привинтить
да, таков план

сейчас смотрю что там в wasm, насколько он пойдет для этой цели
источник

DP

Dmitry Ponyatov in Compiler Development
Defragmented Panda
для standalone
пиши интерактивный Монитор с отладчиком и встроенным (постфиксным) ассемблером — ничего меньше всё равно не получится
http://www.danbigras.ru/RK86/Programm/SoftWare.html
и самомодифицирующийся машинный код — код сам себя меняет, переписывающий таблицы парсера и symtable в процессе компиляции расширений
источник

I

Ilmir in Compiler Development
Defragmented Panda
для standalone
Линукс или любую ОС будем брать в расчёт?
источник

DP

Defragmented Panda in Compiler Development
Ilmir
Линукс или любую ОС будем брать в расчёт?
любую (вообще мне интересно для голого железа. из помощи разве что указатель на стек)
источник

I

Ilmir in Compiler Development
Defragmented Panda
любую (вообще мне интересно для голого железа. из помощи разве что указатель на стек)
Тогда непонятно ограничение на неиспользование libc.
источник

DP

Defragmented Panda in Compiler Development
Ilmir
Тогда непонятно ограничение на неиспользование libc.
используй. но размер libc включен в твои очки )
источник

I

Ilmir in Compiler Development
Defragmented Panda
используй. но размер libc включен в твои очки )
Размер линукса тоже включать?
источник

I

Ilmir in Compiler Development
Потому что либо линукс + libc, либо голое железо. А это две разные задачи с разными подходами к решению.
источник

DP

Defragmented Panda in Compiler Development
Ilmir
Размер линукса тоже включать?
используемые там функции - да
источник

DP

Defragmented Panda in Compiler Development
Ilmir
Потому что либо линукс + libc, либо голое железо. А это две разные задачи с разными подходами к решению.
голое железо
источник

I

Ilmir in Compiler Development
Defragmented Panda
голое железо
Ассемблер.
источник

G

GNU/Плюшка in Compiler Development
Короче, план таков: берем это самое голое железо, ставим туда линукс...
источник

I

Ilmir in Compiler Development
Вернее, макроассемблер, с поддержкой переменных и функций.
источник

DP

Defragmented Panda in Compiler Development
Ilmir
Ассемблер.
у тебя есть пример ассамблера менее 100кб?
источник

I

Ilmir in Compiler Development
Defragmented Panda
у тебя есть пример ассамблера менее 100кб?
источник

DP

Dmitry Ponyatov in Compiler Development
Defragmented Panda
у тебя есть пример ассамблера менее 100кб?
постфиксный сильно проще (в реализации, не использовании 8), и меньше жрет память — не требуется синтаксический парсер, только тупенький лексер, а таблица символов на форто-подобной структуре (такой же тупенький односвязный список)
источник

I

Ilmir in Compiler Development
Dmitry Ponyatov
постфиксный сильно проще (в реализации, не использовании 8), и меньше жрет память — не требуется синтаксический парсер, только тупенький лексер, а таблица символов на форто-подобной структуре (такой же тупенький односвязный список)
Да тот же RISC-V имеет всего 45 инструкций. Надо очень сильно постараться, чтобы раздуть его в 100кб.
источник