Меньше редиректов ценой дубликации кода. https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#specialize-pragma
ну так-то это наоборот средство уменьшить дупликацию кода
позволяет заранее заготовить ходовые специализации для функции, чтоб компилятор не пытался их потом делать снова и снова
А почему "снова и снова"? не понимаю
ну локально в разных местах специализировать одно и то же
А, вот оно шо. Он реально так делает? А зачем?
ну конечно, без специализации все тормозить будет
Ну то есть почему локально?
Наоборот ведь, иначе будет одна полиморфная функция, в которую словарики параметрами передаются, а так их будет много, но со специализированными типами и словарями. Агрессивно и повторно специализирует С++, нет?
ну он попытается, чтоб не была одна полиморфная функция, возможно много раз
Если функции в разных модулях, то и пытаться не должен.
должен, конечно, и будет
> By default, functions are not specialised across modules. Только если поменлось что-то за 3 года. https://wiki.haskell.org/Inlining_and_Specialisation
это не соотвествует действительности, для функций определенных (настройками) размеров будут сохранятся развертки, даже если они не помечены инлайнабл/инлайн, ну и они часто помечены этими прагмами
правда в хедер-файл попадают развертки для неаннотированных функций примерно такого размер, который инлайнится, так что технически это корретно, как таковой специализированной функции не будет, будет ее заинлайненое тело
Обсуждают сегодня