Size: a a a

Compiler Development

2020 March 21

AT

Alexander Tchitchigin in Compiler Development
Victor Miasnikov
А здесь в обсуждении...

--

Кстати,  hello.exe не является "simplest possible task".

Это я могу утверждать по опыту испытания отладчиков на .exe из примеров на Modula-3
Как бы пост именно на это и намекает. 😊
источник

VM

Victor Miasnikov in Compiler Development
Alexander Tchitchigin
Как бы пост именно на это и намекает. 😊
Пост несколько запоздал: ещё в 90х в FAQ M3 был целый раздел про  мини-программы с объяснениями, почему им уделено мало внимания авторами языка.


--


Вот, например, GC мешает уменьшить hello.exe.

И что: мы должны избавиться от него?
источник

PS

Peter Sovietov in Compiler Development
K R
Но вы же тогда вообще не сможете предсказать производительность.
А зачем мне ее предсказывать? Мне интересна сама возможность писать программы с относительным удобством для bare metal-машин — то самое системное ПО старой школы.
Автор блога называет себя системным программистом и сокрушается, что в результате его анализа даже Zig недотягивает до Си — вот я и делюсь идеей сделать список компиляторов конкретно для bare metal-дел :)
источник

VM

Victor Miasnikov in Compiler Development
Peter Sovietov
А зачем мне ее предсказывать? Мне интересна сама возможность писать программы с относительным удобством для bare metal-машин — то самое системное ПО старой школы.
Автор блога называет себя системным программистом и сокрушается, что в результате его анализа даже Zig недотягивает до Си — вот я и делюсь идеей сделать список компиляторов конкретно для bare metal-дел :)
Меня впечатлили системные модули для ОС "Колибри" на Modula-2: просто IRQ с заполненными регистрами.
источник

PS

Peter Sovietov in Compiler Development
Victor Miasnikov
Меня впечатлили системные модули для ОС "Колибри" на Modula-2: просто IRQ с заполненными регистрами.
Ну да, Ada, Oberon, Forth, C... — первое, что приходит на ум. Но интересно сформировать критерии, по которым их еще и между собой можно будет сравнить и ясно дать понять ,что и они — не идеальны. Ведь и в том же Rust люди тоже как-то пытаются писать на уровне bare metal ;)
источник

VM

Victor Miasnikov in Compiler Development
А я вот хотел написать, про последний ЯП ( в сравнении с  наследниками Паскаля)

--

Ok: "риск дело благородное"

Ведь пока даже не ясно удастся ли на нём написать ОС? ( без unsafe опций языка)

Т.е. не написали ни одной.

(

Это всё я здесь и прочитал.

)
источник

KR

K R in Compiler Development
Peter Sovietov
А зачем мне ее предсказывать? Мне интересна сама возможность писать программы с относительным удобством для bare metal-машин — то самое системное ПО старой школы.
Автор блога называет себя системным программистом и сокрушается, что в результате его анализа даже Zig недотягивает до Си — вот я и делюсь идеей сделать список компиляторов конкретно для bare metal-дел :)
Перечитал, прошу прощения - не совсем понял контекст.

Это разве не задача линковщика - выбрасывать ненужные вещи?

То есть, там нужна какая-то работа на уровне линковщика и рантайма, а не компилятора.

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

VM

Victor Miasnikov in Compiler Development
K R
Перечитал, прошу прощения - не совсем понял контекст.

Это разве не задача линковщика - выбрасывать ненужные вещи?

То есть, там нужна какая-то работа на уровне линковщика и рантайма, а не компилятора.

Либо же компилятор должен предоставить данные по анализу модуля (тут сгодятся алгебраические эффекты), а уже на базе этих данных линковщик выбросит ненужное.
Нет уж: так мы выкидывая этап за этапом дойдём до lexer-а

( Почти шутка)


И, кстати, в Oberon-ах достаточно оригинальный linker-ы.

Т.е. здесь тоже "поле для сравнений"
источник

KR

K R in Compiler Development
Но что может сделать компилятор, если syscallы выдаёт runtime?
источник
2020 March 22

p

polunin.ai in Compiler Development
Хм, а как реализовывается модульность в языках? Лучшее что я придумал это:
1. Парсим файл.
2. Если есть декларация модуля, ищем файл с именем модуля, и повторяем шаг 1.
3. Добавляем всем идентификаторам внутри файла префикс topmodule::module::identifier
4. Скидываем все файлы в общую кучу и работаем как будто у нас один файл.
источник

p

polunin.ai in Compiler Development
Пытался найти как это реализовывается, но или этого нету, либо плохого искал
источник

IK

Ivan Kochurkin in Compiler Development
Алексей Запольский
Вот тут захотелось попросить Сергея взглянуть на мою грамматику языка Harbour(нынешнее расширение Clipper), тока там 1500 строк, и в лексере ключевые слова могут быть сокращены до 4х  символов. Думаю ужаснет.
А можно на нее взглянуть?
источник

АЗ

Алексей Запольский in Compiler Development
Ivan Kochurkin
А можно на нее взглянуть?
https://sourceforge.net/projects/harbour-language-analyzer/files/harbour-language-analyzer-files.zip/download
У меня была LR-грамматика для бизона, я её переделал.
источник

AT

Alexander Tchitchigin in Compiler Development
polunin.ai
Хм, а как реализовывается модульность в языках? Лучшее что я придумал это:
1. Парсим файл.
2. Если есть декларация модуля, ищем файл с именем модуля, и повторяем шаг 1.
3. Добавляем всем идентификаторам внутри файла префикс topmodule::module::identifier
4. Скидываем все файлы в общую кучу и работаем как будто у нас один файл.
> Скидываем все файлы в общую кучу и работаем как будто у нас один файл

Так реализуется отсутствие модульности. 😊 Оно как раз и приводит к квадратичной сложности обработки файлов в некоторых случаях.

Посмотрите хотя бы как в Java сделано, если уж не заморачиваться как в SML.
источник

p

polunin.ai in Compiler Development
Alexander Tchitchigin
> Скидываем все файлы в общую кучу и работаем как будто у нас один файл

Так реализуется отсутствие модульности. 😊 Оно как раз и приводит к квадратичной сложности обработки файлов в некоторых случаях.

Посмотрите хотя бы как в Java сделано, если уж не заморачиваться как в SML.
Ну вот и у меня проблема возникла с поиском описания реализации
источник

FO

FORTRAN ONE LOVE in Compiler Development
Alexander Tchitchigin
> Скидываем все файлы в общую кучу и работаем как будто у нас один файл

Так реализуется отсутствие модульности. 😊 Оно как раз и приводит к квадратичной сложности обработки файлов в некоторых случаях.

Посмотрите хотя бы как в Java сделано, если уж не заморачиваться как в SML.
Зато проблема циклических зависимостей модулей решена!)
источник

AT

Alexander Tchitchigin in Compiler Development
polunin.ai
Ну вот и у меня проблема возникла с поиском описания реализации
Ничего лучше, чем "посмотреть исходники" я предложить не могу. Разве что - посмотреть исходники какой-нибудь более простой и обозримой реализации, чем OpenJDK. 😊
источник

p

polunin.ai in Compiler Development
Надеялся что есть другие способы. Ну ладно, буду мучаться с исходниками.
источник

AT

Alexander Tchitchigin in Compiler Development
polunin.ai
Надеялся что есть другие способы. Ну ладно, буду мучаться с исходниками.
Может, и есть, это я просто их не знаю. 🤷‍♀️
источник

AT

Alexander Tchitchigin in Compiler Development
Но я бы сейчас тупо вот эту модель реализовал для всего.
источник