Size: a a a

Compiler Development

2020 May 02

А

Алексей in Compiler Development
Andrei Kurosh
уложить основные столпы ФП (ленивость, неизменяемость) вместе со строгими ограничениями по памяти\времени исполнения должно быть крайне сложно
так то да
источник

AT

Alexander Tchitchigi... in Compiler Development
Andrei Kurosh
уложить основные столпы ФП (ленивость, неизменяемость) вместе со строгими ограничениями по памяти\времени исполнения должно быть крайне сложно
При чём тут ленивость? Из всех ФП языков ленивый только Хаскель.
Уложить "неизменяемость" (ссылочную прозрачность) в ограниченную память помогают линейные типы. 😉
источник

AK

Andrei Kurosh in Compiler Development
Alexander Tchitchigin
При чём тут ленивость? Из всех ФП языков ленивый только Хаскель.
Уложить "неизменяемость" (ссылочную прозрачность) в ограниченную память помогают линейные типы. 😉
а linear haskell существует в реальности, или это все еще пропоузал?
источник

AT

Alexander Tchitchigi... in Compiler Development
Andrei Kurosh
а linear haskell существует в реальности, или это все еще пропоузал?
Во-первых, почему свет клином (no pun intended 😂) сошёлся именно на Хаскеле?
Во-вторых, у Tweag вроде был рабочий форк.
источник

AK

Andrei Kurosh in Compiler Development
Alexander Tchitchigin
Во-первых, почему свет клином (no pun intended 😂) сошёлся именно на Хаскеле?
Во-вторых, у Tweag вроде был рабочий форк.
Ну потому что мне было интересно, доросло ли человечество до совмещения ленивости и линейных типов в одном практически применимом языке :D
источник

АЕ

Артур Ефимов... in Compiler Development
Ну вот видите? Поэтому Оберон :)
источник

А

Алексей in Compiler Development
а можно было бы раст взять кстати
источник

AT

Alexander Tchitchigi... in Compiler Development
Нет, это Вы не видите. Без аллокаций и виртуальных методов можно хоть на Common Lisp написать, более того, примеры такого кода имеются.
источник

А

Алексей in Compiler Development
Алексей
а можно было бы раст взять кстати
если бы он появился бы и стал популярным пару-тройку десятилетий назад
источник

А

Алексей in Compiler Development
Alexander Tchitchigin
Нет, это Вы не видите. Без аллокаций и виртуальных методов можно хоть на Common Lisp написать, более того, примеры такого кода имеются.
а виртуальные методы чем не угодили?
источник

AT

Alexander Tchitchigi... in Compiler Development
Алексей
а виртуальные методы чем не угодили?
Про них трудно что-то доказывать плюс сложности с предсказанием переходов.
источник

AT

Alexander Tchitchigi... in Compiler Development
В этих меганадёжных контроллерах на АЭС предсказание переходов вообще есть? И для виртуальных вызовов в частности?
источник

АЕ

Артур Ефимов... in Compiler Development
источник

АЕ

Артур Ефимов... in Compiler Development
Это доклад автора системы на Ростовской АЭС
источник

PS

Peter Sovietov in Compiler Development
Chris Calvin
В целом. Overview какой-то. Ведь кажется что со времен книги дракона там наверняка что-то добавилось, хотелось бы актуализировать знания по этой теме
Вам уже дали хорошие рекомендации, но я еще раз укажу, что вопрос лучше конкретизировать.

Порождение кода — самая сложная и менее всего формализованная фаза компиляции. Поэтому неслучайно, что Вам в профессиональном чате за все время ответил только один человек.

И ключевую роль играет вид целевой архитектуры. В случае современных специализированных процессоров нужно иметь и соответствующую математическую подготовку, в частности, необходимо знакомство с методами комбинаторной оптимизации.
источник

CC

Chris Calvin in Compiler Development
Peter Sovietov
Вам уже дали хорошие рекомендации, но я еще раз укажу, что вопрос лучше конкретизировать.

Порождение кода — самая сложная и менее всего формализованная фаза компиляции. Поэтому неслучайно, что Вам в профессиональном чате за все время ответил только один человек.

И ключевую роль играет вид целевой архитектуры. В случае современных специализированных процессоров нужно иметь и соответствующую математическую подготовку, в частности, необходимо знакомство с методами комбинаторной оптимизации.
Мне известно что есть машинно-независимые и машинно-зависимые оптимизации кода. Под конкретную целевую архитектуру однозначно будут свои методы оптимизации. Наверняка, методы оптимизации для x86 отличаются от методов оптимизации под ARM. Подозреваю так же что оптимизации будут разнится для разных микроархитектур процессоров. Не очень понятно где такую информацию можно найти.
источник

PS

Peter Sovietov in Compiler Development
Chris Calvin
Мне известно что есть машинно-независимые и машинно-зависимые оптимизации кода. Под конкретную целевую архитектуру однозначно будут свои методы оптимизации. Наверняка, методы оптимизации для x86 отличаются от методов оптимизации под ARM. Подозреваю так же что оптимизации будут разнится для разных микроархитектур процессоров. Не очень понятно где такую информацию можно найти.
Тут много нюансов. Например, так называемая "машинно-независимая" оптимизация на самом деле таковой не является. x86 и ARM не так сильно отличаются друг от друга, если их сравнивать с процессорами, которые действительно открывают для программиста свою микроархитектуру :)

В учебниках обычно начинают с RISC-подобных архитектур, на которые хорошо ложится 3-адресное IR. Вот я бы и предложил для начала попробовать реализовать генератор кода для MIPS или RISC-V.
источник

A

Alex in Compiler Development
Я так скажу - под конкретную микроархитектуру - либо в целевых докладах, либо в исходниках. Но тут надо понимать что "машинноНЕзависимых" оптимизаций гораздо меньше чем принято считать. Тот же самый inline невероятно сильно зависит от целевой машины (не просто архитектуры, а именно машины). Как и большинство других оптимизаций. Поэтому у меня и возник вопрос "про что конкретно Вы спрашиваете". Кроме того, могут быть машиннозависимые оптимизации для "немейнстримных" архитектур, там вообще свой мир будет
источник

A

Alex in Compiler Development
Peter Sovietov
Тут много нюансов. Например, так называемая "машинно-независимая" оптимизация на самом деле таковой не является. x86 и ARM не так сильно отличаются друг от друга, если их сравнивать с процессорами, которые действительно открывают для программиста свою микроархитектуру :)

В учебниках обычно начинают с RISC-подобных архитектур, на которые хорошо ложится 3-адресное IR. Вот я бы и предложил для начала попробовать реализовать генератор кода для MIPS или RISC-V.
> Например, так называемая "машинно-независимая" оптимизация на самом деле таковой не является.

Прям одновременно о наболевшем )
источник

PS

Peter Sovietov in Compiler Development
Alex
> Например, так называемая "машинно-независимая" оптимизация на самом деле таковой не является.

Прям одновременно о наболевшем )
Да уж! Кстати, об этом в учебниках действительно редко пишут. Разве что про CSE и его влияние на регистровый файл я у кого-то встречал. А еще есть правила "канонизации" IR в готовых backends в духе LLVM, и с этими канонизациями потом приходится бороться ("зачем ты все перевел в целочисленные умножения! В моем процессоре это дорогая операция!!") %)
источник