Size: a a a

Compiler Development

2020 February 11

YS

Yuriy Syrovetskiy in Compiler Development
Михаил Бахтерев
http://opusmodus.com/ - к вопросу о непрактичности Lisp. Эта штука позволяет композиторам сочинять на Лиспе :) И они таки сочиняют
+ https://sonic-pi.net/ для детей (который когда-то был Схемой, но потом автор решил, что Схема слишком сложная и переписал на Руби)
источник

YS

Yuriy Syrovetskiy in Compiler Development
polunin.ai
Чтобы на нем писать тел не нужна знать организацию памяти, существование стека и динамической памяти и т.д.
это к чему вообще? на С++ тоже можно это всё игнорировать, и в Хаскеле это не нужно
источник

YS

Yuriy Syrovetskiy in Compiler Development
polunin.ai
Ок. Почему на одном языке можно решать серьезные задачи спустя три года, а ну другом спустя 7?
я бы хотел взглянуть на такое исследование на статистически значимой выборке
источник

p

polunin.ai in Compiler Development
Yuriy Syrovetskiy
это к чему вообще? на С++ тоже можно это всё игнорировать, и в Хаскеле это не нужно
То есть на плюсах можно писать работая только со стеком?
источник

YS

Yuriy Syrovetskiy in Compiler Development
polunin.ai
То есть на плюсах можно писать работая только со стеком?
не понял вопрос. можно только со стэком. можно и без стэка
источник

МБ

Михаил Бахтерев in Compiler Development
Yuriy Syrovetskiy
+ https://sonic-pi.net/ для детей (который когда-то был Схемой, но потом автор решил, что Схема слишком сложная и переписал на Руби)
Речь же шла о заработках и практичности. Opusmodus - это серьёзная коммерческая софтина, которой учат в университетах и которую используют в записи саундтреков. А так-то подобные системы и на Haskell есть, и на Питоне
источник

N

Nikolay in Compiler Development
Вот все про выравнивания не осознаю. А short, int выравниваются ? Логично предположить вроде, что вот у меня 5 переменных по байт. Выделил я для них место . Потом идёт int. Если положу сразу , то будет 9 байт и int не ляжет на регистр целиком. Значит я должен начать int с ближайшего адреса кратного 4м.
источник

AS

Aleksey Shipilev in Compiler Development
Nikolay
Вот все про выравнивания не осознаю. А short, int выравниваются ? Логично предположить вроде, что вот у меня 5 переменных по байт. Выделил я для них место . Потом идёт int. Если положу сразу , то будет 9 байт и int не ляжет на регистр целиком. Значит я должен начать int с ближайшего адреса кратного 4м.
Да, выравниваются. Джавовый упаковщик полей укладывает поля по их "натуральному" выравниванию. Пять boolean-ов лягут в любой оффсет. int ляжет в оффсет, кратный 4, short ляжет в оффсет кратный 2. Никто не обязывает класть поля в порядке их декларации, чем упаковщик нагло пользуется.
источник

E

EgorBo in Compiler Development
Aleksey Shipilev
Да, выравниваются. Джавовый упаковщик полей укладывает поля по их "натуральному" выравниванию. Пять boolean-ов лягут в любой оффсет. int ляжет в оффсет, кратный 4, short ляжет в оффсет кратный 2. Никто не обязывает класть поля в порядке их декларации, чем упаковщик нагло пользуется.
кстати если у тебя в классе инт, дабл, поинтер и реф тип - рефтип положат первым?
источник

E

EgorBo in Compiler Development
чтобы гц сканил быстрее
источник

p

polunin.ai in Compiler Development
Кмк гц имеет ссылку на все ссылочные поля, ему пофиг где лежит поле.
источник

p

polunin.ai in Compiler Development
Он просто по нужному адресу обратится
источник

N

Nikolay in Compiler Development
Aleksey Shipilev
Да, выравниваются. Джавовый упаковщик полей укладывает поля по их "натуральному" выравниванию. Пять boolean-ов лягут в любой оффсет. int ляжет в оффсет, кратный 4, short ляжет в оффсет кратный 2. Никто не обязывает класть поля в порядке их декларации, чем упаковщик нагло пользуется.
А зачем тогда выравнивать объекты по 8 байтов , если мы и так каждое поле равняем
источник

AS

Aleksey Shipilev in Compiler Development
EgorBo
кстати если у тебя в классе инт, дабл, поинтер и реф тип - рефтип положат первым?
Это открытый вопрос :) Штатный упаковщик будет скорее стараться, чтобы блоки ссылок были одним куском, чтобы gc map был покомпактнее. Но если есть возможность упихать реф-поле в дырку, и других кандидатов нет, то он, конечно, возьмёт ту дырку. Потому что футпринт объектов куда круче влияет на GC, чем структура gc map-ов :)
источник

E

EgorBo in Compiler Development
я помню что у нас в таких кейсах идет первым как раз для гц, но не могу найти пруф
источник

E

EgorBo in Compiler Development
Aleksey Shipilev
Это открытый вопрос :) Штатный упаковщик будет скорее стараться, чтобы блоки ссылок были одним куском, чтобы gc map был покомпактнее. Но если есть возможность упихать реф-поле в дырку, и других кандидатов нет, то он, конечно, возьмёт ту дырку. Потому что футпринт объектов куда круче влияет на GC, чем структура gc map-ов :)
а есть возможность сказать упоковщику "убери руки и сохрани порядок?"
источник

AS

Aleksey Shipilev in Compiler Development
EgorBo
а есть возможность сказать упоковщику "убери руки и сохрани порядок?"
Йесть, -XX:-CompactFields :D Чтоб жизнь мёдом не казалась.
источник

E

EgorBo in Compiler Development
а ну это глобально :)
источник

AS

Aleksey Shipilev in Compiler Development
Думаю, что вопрос к Panama, которая должна будет отображать struct-ы Ж)
источник

А

Алексей in Compiler Development
а GC же должен знать где конкретно лежат рефы в объекте?
источник