Size: a a a

Compiler Development

2020 April 04

KR

K R in Compiler Development
Михаил Бахтерев
Был в своё время такой проектик tick-C https://web.stanford.edu/~engler/tickc.pdf - это не совсем JIT, но убедительное доказательство того, что специализация кода в runtime может давать значительный выигрыш в производительности.

Динамическая специализация на LCC (простеньком компиляторе) уделывала статический код, скомпилированный IntelCC. С тех пор много воды утекло, конечно, на сама идея может продолжать работать: подстановка констант в код может существенно его упрощать и снижать давление на регистры.
Спасибо. Прошу прощения, с телефона не заметил.
источник

SS

Sergey Sverdlov in Compiler Development
Вводная лекция (Лекция 0) к курсу "Языки программирования и методы трансляции"

https://youtu.be/gelbeLKYBi8
источник

SS

Sergey Sverdlov in Compiler Development
Программы с лекции
источник

SS

Sergey Sverdlov in Compiler Development
Одним файлом
источник

ИЧ

Илья Чистяков in Compiler Development
можете что-нибудь посоветовать на замену deepcopy в питоне?

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

может что-то на тему сверхсовременных иммутабельных структур данных подскажите
источник

KR

K R in Compiler Development
Илья Чистяков
можете что-нибудь посоветовать на замену deepcopy в питоне?

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

может что-то на тему сверхсовременных иммутабельных структур данных подскажите
У питона крайне неочевидная семантика в области mutable/immutable. Поэтому надо конкретно знать задачу.
источник

ИЧ

Илья Чистяков in Compiler Development
K R
У питона крайне неочевидная семантика в области mutable/immutable. Поэтому надо конкретно знать задачу.
dict(collections.ChainMap({'b': {'c': 'dd'}}, {'b': {'c': 'd'}, 'a': 1}))

примерно такая задача, только внутри не только дикты, но и списки, со списками ChainMap уже всё затирает
источник

ИЧ

Илья Чистяков in Compiler Development
слева модификация дикта, справа общий неизменный дикт
источник

ИЧ

Илья Чистяков in Compiler Development
Илья Чистяков
dict(collections.ChainMap({'b': {'c': 'dd'}}, {'b': {'c': 'd'}, 'a': 1}))

примерно такая задача, только внутри не только дикты, но и списки, со списками ChainMap уже всё затирает
вложенные дикты тоже затирает, тогда не оч пример
источник

ИЧ

Илья Чистяков in Compiler Development
вообщем есть объект пригодный для json.dump, его менять нельзя, но нужно сдампить копию такого объекта с небольшими изменениями
источник

KR

K R in Compiler Development
Списки - это как раз самая засада и есть. Это реально изменяемые массивы.
источник

AT

Alexander Tchitchigin in Compiler Development
Это чат про аниме? 😉
источник

AZ

Alexander Zaitsev in Compiler Development
Alexander Tchitchigin
Это чат про аниме? 😉
здесь не патчат kde2 под freebsd :)
источник

AT

Alexander Tchitchigin in Compiler Development
Но и про компиляторы больше не разговаривают... 😒
источник

ИЧ

Илья Чистяков in Compiler Development
git -> 4 сущности -> структуры данных
так мы и скатились)
источник

BD

Berkus Decker in Compiler Development
Илья Чистяков
git -> 4 сущности -> структуры данных
так мы и скатились)
Эй, я не при чем. Я кеды под Redox патчу!
источник

ИЧ

Илья Чистяков in Compiler Development
Berkus Decker
Эй, я не при чем. Я кеды под Redox патчу!
почти как аниме
источник
2020 April 05

АЕ

Артур Ефимов in Compiler Development
акварель на мету
Кстати, а где можно почитать про подходы парсинга языка и трансляции его в ассемблер ?
А то эти АСТ мне пока-что совершенно непонятны, кажется не с них начинают.
По идее же есть какие-то простые/примитивные способы парсинга и трансляции ?
Книга Никлауса Вирта «Построение компиляторов» (есть и на русском). Там всё с самого начала и всё очень просто. Метод рекурсивного спуска, простейшие оптимизации (такие как «сразу 5» вместо «2*2+1»). Генерирует даже не ассемблер, а машинный код, но до этого далеко от начала книги.
источник

АЕ

Артур Ефимов in Compiler Development
polunin.ai
Тогда нужно будет идти по пути Си и делать разделение объявления и реализации и заголовочные файлы, чтобы за один проход можно было компилировать.
В Обероне (компиляторы, как правило, однопроходные) файл каждого модуля один. Экспортируемые процедуры, константы, типы и переменные помечены звёздочками. В Модуле-2 ещё было два файла — definition module и implementation module, — а в Обероне уже один. И однопроходный компилятор без проблем справляется. Весь компилятор занимает порядка 3000 строк виртовского кода и моментально компилирует сам себя (в машинный код).
источник

МБ

Михаил Бахтерев in Compiler Development
Артур Ефимов
В Обероне (компиляторы, как правило, однопроходные) файл каждого модуля один. Экспортируемые процедуры, константы, типы и переменные помечены звёздочками. В Модуле-2 ещё было два файла — definition module и implementation module, — а в Обероне уже один. И однопроходный компилятор без проблем справляется. Весь компилятор занимает порядка 3000 строк виртовского кода и моментально компилирует сам себя (в машинный код).
Надо мерять скорость компиляции в Оберонах :) А моментально - это сколько по времени?
источник