Size: a a a

Scala User Group

2020 October 17

ΑZ

Αλεχ Zhukovsky in Scala User Group
Ilya
Хм. Там-же вроде совместить сломали при введении async/await?
нет, во-первых просто самим асинк-авейтом нельзя было пользоваться, а во-вторых потом сделали либы-полифиллы для более старых версий дотнета
источник

O

Ortofax in Scala User Group
темплэйты метапрограммны в том смысле, что это нашлёпка над другим языком
источник

I

Ilya in Scala User Group
Ortofax
темплэйты метапрограммны в том смысле, что это нашлёпка над другим языком
В плюсах это часть языка
источник

O

Ortofax in Scala User Group
в плюсах есть по крайней мере два подмножества языка: темплэйты и, эммм, не темплэйты
источник

Oℕ

Oleg ℕizhnik in Scala User Group
"нашлёпка над другим языком" слишком туманно, теглес файнал тоже нашлёпки над другими языками, это не метапрограммирование меж тем
источник

O

Ortofax in Scala User Group
ну ещё препроцессор есть
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Я вот как сформулировал
Иными словами, это позволяет писать программы, которые будет запускать ваш компилятор, генерируя конструкты, которые будут использованы как часть ваших программ.
источник

ΑZ

Αλεχ Zhukovsky in Scala User Group
Ilya
Ну для мета-программирования не так много подходов
0 - препроцессор языка на (всякие project lombok и annotation processors тоже тут)
1 - рантайм кодогенерация
2 - темплейты
3 - вейвинг
4 - типы высоких порядков
(а больше ничего так и не вспомню)
не понимаю где хкт это метапрограммирование
источник

O

Ortofax in Scala User Group
ну вот лисп это прям метапрограммирование, там на лиспе оперируешь программами на лиспе и тут же их исполняешь, а в плюсах у тебя есть язык шаблонов, который оперирует сиподобным языком, но никак иначе
источник

ΑZ

Αλεχ Zhukovsky in Scala User Group
а то так и генерики можно к ним отнести ненароком
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Αλεχ Zhukovsky
не понимаю где хкт это метапрограммирование
Я выше описал
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Αλεχ Zhukovsky
не понимаю где хкт это метапрограммирование
Telegram
Oleg ℕizhnik in Scala User Group
Грубо говоря чистый полиморфизм - это когда ваш тип высшего порядка не имеет права анализировать свой аргумент.
Т.е. есть параметрические типы данных, есть какие-то алиасы, которые анализировать свой аргумент не могут, могут только передать аргумент в какой-то другой тип высшего порядка.
Очевидно такая "тайплямбда" может определить не очень сложную логику, никакой интересной программы на ней не напишешь.
Но когда появляются match-types, type families вы можете определить тип высшего порядка, который будет анализировать структуры ваших аргументов нетривиальным образов.
Фактически это позволяет написать программу, вычисляющую типы сложным образом, что уже может быть использовано для вашего компилятора, когда к сложным типам цепляются сложные экземпляры.
Иными словами, это позволяет писать программы, которые будет запускать ваш компилятор, генерируя конструкты, которые будут использованы как часть ваших программ.
Если такие программы могут быть довольно сложными, это и можно назвать "метапрограммированием"
На матч…
источник

O

Ortofax in Scala User Group
шаблоны это больше такой сложный тьюрингполный препроцессор
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Сложный тьюрингполный препроцессор - достаточно для того, чтобы считаться метапрограммированием
источник

I

Ilya in Scala User Group
Oleg ℕizhnik
Я вот как сформулировал
Иными словами, это позволяет писать программы, которые будет запускать ваш компилятор, генерируя конструкты, которые будут использованы как часть ваших программ.
Ну тогда почему ТФ не мета-программа? У меня может быть 2 разных интерпретатора. Имхо TF это тоже мета-программа.
И со своим компилятоом (то что это обычно интерпретатор мало что меняет)
источник

O

Ortofax in Scala User Group
в этом смысле он мета- по отношению к сиподобной части плюсов
источник

I

Ilya in Scala User Group
Oleg ℕizhnik
Сложный тьюрингполный препроцессор - достаточно для того, чтобы считаться метапрограммированием
Да
источник

O

Ortofax in Scala User Group
а вот тайпклассы в хачкеле это мета?
источник

O

Ortofax in Scala User Group
там тоже тьюрингполный язык над мирандо-подобным языком, только логический
источник

ΑZ

Αλεχ Zhukovsky in Scala User Group
Oleg ℕizhnik
Telegram
Oleg ℕizhnik in Scala User Group
Грубо говоря чистый полиморфизм - это когда ваш тип высшего порядка не имеет права анализировать свой аргумент.
Т.е. есть параметрические типы данных, есть какие-то алиасы, которые анализировать свой аргумент не могут, могут только передать аргумент в какой-то другой тип высшего порядка.
Очевидно такая "тайплямбда" может определить не очень сложную логику, никакой интересной программы на ней не напишешь.
Но когда появляются match-types, type families вы можете определить тип высшего порядка, который будет анализировать структуры ваших аргументов нетривиальным образов.
Фактически это позволяет написать программу, вычисляющую типы сложным образом, что уже может быть использовано для вашего компилятора, когда к сложным типам цепляются сложные экземпляры.
Иными словами, это позволяет писать программы, которые будет запускать ваш компилятор, генерируя конструкты, которые будут использованы как часть ваших программ.
Если такие программы могут быть довольно сложными, это и можно назвать "метапрограммированием"
На матч…
но хкт и тайпфемили это разные вещи
источник