Alexander
или поменяет правила разрешения конфликтов
Alexander
эти ребята нужны если ты хочешь обобщать и иметь различные имплементации исполнителя
Не только. Скажем, мой подход позволяет написать минимальную STM там, где нет нативно подерживаемой, и при этом рантайм будет совсем маленьким. Да, тормознутей в 6 раз, но в том же C++ вообще с STM плохо
Alexander
Обобщение - это только часть задач FT / Free
Alexander
я не вижу зачем для этого нужно обобщение
Alexander
Борьба со сложностью ПО - еще одна часть задач. Иной подход к имплементации (не интерфейсу) - третья
Oleg
И делать часть промежуточных действий Unwrapped
Alexander
я думал про разные режимы транзакций
В моей библиотеке можно даже разные рантаймы для больших моделей и маленьких
Alexander
твой интерфейс это твой модуль
Alexander
твой интерфейс это твой модуль
Мой интерфейс - это далеко не всегда модуль, и утверждать такое - значит, отбрасывать другие способы дизайна
Alexander
я не согласен с этим утверждением
Alexander
Вариантов создания функциональных интерфейсов довольно много на текущий момент. FT, Free, ReaderT паттерн
Alexander
т.к. какой бы способ дизайна ты не предложил он укладывается
Alexander
И еще есть ряд
Alexander
вышепредложенные укладываются
Alexander
Оно, может, и укладывается, но это нифига не единственно возможная практика.
Alexander
возможно неукладывающиеся скрываются в "и другие"№
Alexander
Я ж говорю, покажи мне свои интерфейсы
Kirill
@graninas а чем http://hackage.haskell.org/package/concurrency-1.6.1.0/docs/Control-Monad-STM-Class.html не FT?
Kirill
при том, что тут вот как раз реальная есть задача и применение
Kirill
в рамках dejafu как минимум
Alexander
@graninas а чем http://hackage.haskell.org/package/concurrency-1.6.1.0/docs/Control-Monad-STM-Class.html не FT?
Оно, может, и FT, но использует нативную имплементацию, так? Не показатель
Alexander
это FT
Kirill
не использует
Alexander
не использует
Как тогда оно работает?
Alexander
смысл FT и Free в том, что интерпретатор можно менять
Alexander
они ничего не говорят про интепретатор и его реализацию
Kirill
дак тут и есть это
Kirill
хочешь нативный stm - есть на нём
Kirill
а в тестах - своя имплементация
Alexander
смысл FT и Free в том, что интерпретатор можно менять
Смысл совсем в другом. Что можно абстрагировать и убирать сложность. Эффективно разделять на интерфейс и имплементацию. Менять или не менять интерпретатор - дело десятое. У меня может быть только 1 потенциальный интерпретатор, но если мне нужно разделить мой код на интерфейс и имплементацию, я все равно буду это использовать
Kirill
http://hackage.haskell.org/package/dejafu-1.11.0.3/docs/Test-DejaFu-Conc-Internal-STM.html
Alexander
Alexander
в качестве отделения интерфейса от имплементации они FT и Free ничем не отличаются
Alexander
Я не говорил, что они сильно отличаются. Где?
Alexander
ещё и с логикой беда : (
Alexander
я не говорил, что ты говорил, что они *сильно* отличаются
Alexander
я говорил, что вопрос покажите мне это бесмысленнен
Alexander
особенно после предоставления class STM
Alexander
Вы в чем меня пытаетесь сейчас убедить?
Big Bux Chungus
отделение интерфейса от имплементации полезно тем, что облегчает мышление
Alexander
отделение интерфейса от имплементации полезно тем, что облегчает мышление
кто-то в этом чяте с этим спорит, вот зачем вы это написали?
Alexander
кто-то в этом чяте с этим спорит, вот зачем вы это написали?
Не понимаю, почему бы благородному дону не написать это
Alexander
ну видимо это должно как-то относиться к дискуссии и подтверждать какое-то утверждение высказанное ранее
Alexander
или опровергать что-то
Big Bux Chungus
ты не прав
я про это. возможно не так понял
Alexander
утверждение о том, что Free отделяет интерфейс от имплементации не более, чем module Foo
Alexander
и там и там есть граница абстракции
Alexander
и там и там имплементация отделена от реализации
Alexander
но что дает Free - возможность реализации различных интерпретаторов
Alexander
module Foo без функторов и сигнатур этого не дает
Alexander
Ну, в хаскельном сообществе, конечно, еще нужно работать над распространением знаний о подходах
Big Bux Chungus
module Foo не отделяет интерфейс от имплементации на мой взгляд. да, можно не экспортировать то, что не хочешь
Alexander
отделяет конечно
Alexander
в модуле может быть любая имплементация, и она тебе как пользователю модуля не важна
Alexander
и там и там имплементация отделена от реализации
Разница в том, что когда мы говорим про модули, работающие с чистыми данными, то их имплементация тоже будет чистой. Когда мы говорим про Free/FT, имплементация может быть потенциально нечистой, а это значит, что может существовать некая служебная рантаймная информация, и эту информацию _нет никакого смысла_ показывать в интерфейсе языка
Alexander
это вроде как в 70е было известно
Big Bux Chungus
да, но когда я читаю код модуля
Алексей
Модули бекпековские или старорежимные?
Alexander
отделение - старорежимные
Alexander
разные имплементации - бекпек
Андрей
А что в хаскеле интерфесом считать? Полиморфный тип?
Alexander
да, но когда я читаю код модуля
а когда ты смотришь реализацию интепретатора Free структуры?
Alexander
интерфейс тут обобщенно - те типы и функции, с которыми ты можешь работать
Big Bux Chungus
я вижу интерфейс отдельно от реализации
Alexander
когда ты делаешь import Foo ты видишь интерфейс
Big Bux Chungus
нет, компилятор видит интерфейс
Alexander
в модуле может быть любая имплементация, и она тебе как пользователю модуля не важна
Имея некий интерфейс в модуле, ты вынужден пользоваться им в тех модулях, которые имплементируют. Я же хочу, чтобы имплементация могла содержать дополнительную инфу в рантайме, элементы которой не должны появляться в интерфейсе модуля никак вообще. Тут только type class, Free или прочая интерпретация сейчас может помочь
Big Bux Chungus
haddock показывает мне интерфейс
Big Bux Chungus
но если я на код смотрю я вижу и то, и другое в мешанину
Alexander
А что в хаскеле интерфесом считать? Полиморфный тип?
Интерфейсов в хаскеле очень много всяких, и они могут решать разные задачи. Полиморфный тип - тоже
Alexander
в чем проблема?
Ты можешь легко привести опровергающий пример, как это сделать, раз тебе это известно.
Alexander
я почему выше спросил, я не понимаю твою проблему
Alexander
я не вижу пример чего ты хочешь увидеть
Alexander
то, что ты пишешь, не вызывает у меня понимания, какой либо проблемы
Алексей
Я тоже не понимаю