Size: a a a

Scala User Group

2020 October 17

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
ещё метапрограммирование
источник

O

Ortofax in Scala User Group
ну там два полиморфизма в одном - параметрический и адхок
источник

I

Ilya in Scala User Group
Любое метратрограмиирование это вид полиморфизма. А представление структуры кода в виде объектов это рефлексия (чисто мое имхо)
источник

O

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

O

Ortofax in Scala User Group
> метратрограмиирование это вид полиморфизма

разве?
источник

I

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

O

Ortofax in Scala User Group
что там полиморфного?
источник

I

Ilya in Scala User Group
Ortofax
> метратрограмиирование это вид полиморфизма

разве?
Ну я всегда считал что мета-программа это порождающий паттерн
источник

O

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

I

Ilya in Scala User Group
Ortofax
что там полиморфного?
Изменение поведения в зависимости от "гипер-параметров"?
источник

O

Ortofax in Scala User Group
полиморфизм - не обязательно изменение поведения, это может быть наоборот одинаковое поведение для множества типов (т.е. параметрический полиморфизм)
источник

I

Ilya in Scala User Group
Ortofax
полиморфизм - не обязательно изменение поведения, это может быть наоборот одинаковое поведение для множества типов (т.е. параметрический полиморфизм)
Ну да. Не вижу противоречия
F(x)=const  всё-таки ф-ция от x
источник

O

Ortofax in Scala User Group
но в случае метапрограммирования о каком именно изменении поведения идёт речь? у функции тоже поведение может быть разное в зависимости от параметров
источник

Oℕ

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

I

Ilya in Scala User Group
Ortofax
но в случае метапрограммирования о каком именно изменении поведения идёт речь? у функции тоже поведение может быть разное в зависимости от параметров
А может идти речь не об изменении. Может это просто сериалтзатор который для каждой модели код генерит
источник

O

Ortofax in Scala User Group
если сериализатор код генерит - значит он метапрограммированием занимается наверно
источник

Oℕ

Oleg ℕizhnik in Scala User Group
На с++ темплейты тоже тюринг полные, значит тоже достаточно сложные.
Сами по себе темплейты типами не являются, значит и ХКТ их назвать нельзя, но метапрограммированием можно
источник