Но вы же тогда вообще не сможете предсказать производительность.
А зачем мне ее предсказывать? Мне интересна сама возможность писать программы с относительным удобством для bare metal-машин — то самое системное ПО старой школы. Автор блога называет себя системным программистом и сокрушается, что в результате его анализа даже Zig недотягивает до Си — вот я и делюсь идеей сделать список компиляторов конкретно для bare metal-дел :)
А зачем мне ее предсказывать? Мне интересна сама возможность писать программы с относительным удобством для bare metal-машин — то самое системное ПО старой школы. Автор блога называет себя системным программистом и сокрушается, что в результате его анализа даже Zig недотягивает до Си — вот я и делюсь идеей сделать список компиляторов конкретно для bare metal-дел :)
Меня впечатлили системные модули для ОС "Колибри" на Modula-2: просто IRQ с заполненными регистрами.
Меня впечатлили системные модули для ОС "Колибри" на Modula-2: просто IRQ с заполненными регистрами.
Ну да, Ada, Oberon, Forth, C... — первое, что приходит на ум. Но интересно сформировать критерии, по которым их еще и между собой можно будет сравнить и ясно дать понять ,что и они — не идеальны. Ведь и в том же Rust люди тоже как-то пытаются писать на уровне bare metal ;)
А зачем мне ее предсказывать? Мне интересна сама возможность писать программы с относительным удобством для bare metal-машин — то самое системное ПО старой школы. Автор блога называет себя системным программистом и сокрушается, что в результате его анализа даже Zig недотягивает до Си — вот я и делюсь идеей сделать список компиляторов конкретно для bare metal-дел :)
Перечитал, прошу прощения - не совсем понял контекст.
Это разве не задача линковщика - выбрасывать ненужные вещи?
То есть, там нужна какая-то работа на уровне линковщика и рантайма, а не компилятора.
Либо же компилятор должен предоставить данные по анализу модуля (тут сгодятся алгебраические эффекты), а уже на базе этих данных линковщик выбросит ненужное.
Перечитал, прошу прощения - не совсем понял контекст.
Это разве не задача линковщика - выбрасывать ненужные вещи?
То есть, там нужна какая-то работа на уровне линковщика и рантайма, а не компилятора.
Либо же компилятор должен предоставить данные по анализу модуля (тут сгодятся алгебраические эффекты), а уже на базе этих данных линковщик выбросит ненужное.
Нет уж: так мы выкидывая этап за этапом дойдём до lexer-а
( Почти шутка)
И, кстати, в Oberon-ах достаточно оригинальный linker-ы.
Хм, а как реализовывается модульность в языках? Лучшее что я придумал это: 1. Парсим файл. 2. Если есть декларация модуля, ищем файл с именем модуля, и повторяем шаг 1. 3. Добавляем всем идентификаторам внутри файла префикс topmodule::module::identifier 4. Скидываем все файлы в общую кучу и работаем как будто у нас один файл.
Вот тут захотелось попросить Сергея взглянуть на мою грамматику языка Harbour(нынешнее расширение Clipper), тока там 1500 строк, и в лексере ключевые слова могут быть сокращены до 4х символов. Думаю ужаснет.
Хм, а как реализовывается модульность в языках? Лучшее что я придумал это: 1. Парсим файл. 2. Если есть декларация модуля, ищем файл с именем модуля, и повторяем шаг 1. 3. Добавляем всем идентификаторам внутри файла префикс topmodule::module::identifier 4. Скидываем все файлы в общую кучу и работаем как будто у нас один файл.
> Скидываем все файлы в общую кучу и работаем как будто у нас один файл
Так реализуется отсутствие модульности. 😊 Оно как раз и приводит к квадратичной сложности обработки файлов в некоторых случаях.
Посмотрите хотя бы как в Java сделано, если уж не заморачиваться как в SML.
Ну вот и у меня проблема возникла с поиском описания реализации
Ничего лучше, чем "посмотреть исходники" я предложить не могу. Разве что - посмотреть исходники какой-нибудь более простой и обозримой реализации, чем OpenJDK. 😊