LINUX.ORG.RU

Чистота. Что-то тут не так.

 , ,


0

2

Любопытная аналогия между ФП функциями, и математическими дробями.

Кагда мы пишем, например две дроби, например, для простоты, 1/2 и 1/2, мы абстрагируемся от оъектов, от которых мы их берем. Например, опять же для простоты, возьмем листы бумаги. Совершенно непонятно, например, идет ли здесь речь о разных листах или об одном? Одинаковые листы это или разные. Отсюда следует, что мы не можем просто так сложить эти дроби, не конкретизировав, сначала, о чем речь.

Для ФП, такой конкретизацией является общий контекст замыканий - в простом случае - глобальная область видимости. Пока все норм. Идем дальше.

Реальные приложения, это как известно, не застывшие раз и на всегда глыбы (даже глыбы иногда ломаются, да), а динамика. Значит, то что было когда то а=foo, станет a=bar. Программе все равно придется взаимодействовать с внешним миром.

Если у нас есть присваивания, мы поступим очень просто - перезапишем значение a в глобале.

Что же тогда становится с иммутабельныи замыканиями? Насколько я понимаю, единственный выход тут, полностью скопировать их и перезаписать все имена a. А что же тогда делать со старыми замыканиями? Выкинуть на помойку? Понятно, что если нам необходим возврат к старому состоянию, да, это нужно. И мы, тащемта, при таком подходе, всегда, вообще, можем вернуться к любому состоянию, это cool, никто не спорит. Но в остальных то случаях, мы получаем громадный перерасход памяти, и больше них-я?



Последнее исправление: anonimous (всего исправлений: 2)
Ответ на: комментарий от anonimous

Есть подозрение что у вас таких вопрос-разобрался будет еще много, а кроме того есть неслабое подозрение, что вам бы не к хаскеллям и clean лезть, а общую теорию и практикукомпиляторов надо бы попробовать осилить, правда на этом пути вас ждут структуры данных и т.д.

pylin ★★★★★
()
Ответ на: комментарий от pylin

Я сейчас пытаюсь пробежаться по программированию по диагонали, чтобы понять, что есть что в общих чертах, как можно быстрее, чтобы выбрать дальнейшее направление, пока, мне вообще больше нравиться идея интерпретации. Думаю в эту сторону капнуть пока. Но надо знать все в общих чертах, поэтому интересуюсь чистотой, есть ли реальный профит типа, выясняю.

Но за ссылку спасибо большое, почитаю на досуге:)

anonimous
() автор топика
Ответ на: комментарий от anonimous

haskell и schema совершенно разные языки. Ты даже не прадставляешь насколько. Чистота к schema не имеет отношение. Странно, что ты решил рассуждать о чистоте опираясь на свои познания в схеме. Как минимум, тебе необходимо все же изучить хаскель, чтобы рассуждать на данную тему.

anonymous
()
Ответ на: комментарий от anonimous

поэтому интересуюсь чистотой, есть ли реальный профит типа,

Чистота слишком сложная вещь, чтобы поверностно ее изучать, т.е.

поверхностное изучение тебе вряд ли даст то, что надо.

Впрочем, для начала дам тебе ссылочку, где очень неплохо описана тема чистоты http://www.reddit.com/r/haskell/comments/1qg22x/whats_wrong_with_oop_and_fp/cdcgmtm

Ну и неплохо бы почитать для начала хотя бы часть книги http://anton-k.github.io/ru-haskell-book/book/home.html

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

anonymous
()
Ответ на: комментарий от anonimous

В схеме да и в любом другом языке ты можешь писать чистые функции, и такая чистота будет иметь свои профиты. Но в хаскеле все принципиально иначе. Во-первых, чистота в хаскеле гарантируется на уровне типов, что позволяет компилятору проводить серьезные оптимизации, например. Кроме того, контроль побочных эффектов на уровне типов позволяет понятию чистоты проявиться при написании больших проектов. Например, любоой человек, посмотрев на твою функцию сможет сказать, чистая она или нет, что может быть весьма важно для работы в команде или большом проекте. В схема же ты не можешь гарантировать чистоту функции. Более того, ты можешь написать случайно функцию так, что сам будешь думать, что она чистая, а на самом деле окажется что это не так, потому что ты в ней использовал какую-то библиотечную функцию, которую считал чистой (а в реальности это оказалось не так просто потому, что ты ошибся или ее реализация изменилась впоследствии, и она перестала быть чистой - ты же ее эволюцию не контролируешь - кто-то др. пишет).

anonymous
()
Ответ на: комментарий от anonymous

Вообще статическая система типов хаскеля с явным указанием чистоты привносит совершенно новое качество в понятие чистоты.

anonymous
()
Ответ на: комментарий от anonymous

Ну и рекомендую вышеприведенную ссылку на английском прочитать полностью (как и ветку обсуждения внизу), поскольку там еще много чего по поводу чистоты написано (повышение модульности, хорошая параллельность и т.д.). Она того стоит.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.