metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-03-06 08:17 pm

Better safe than sorry или О иммутабельности

Сегодня с утра устроили с [livejournal.com profile] artureg срачь на тему "почему мутабельные структуры данных это плохо".
Вообще все началось с того что он пишет некую хитрую штуку на кложури, но при этом использует ее не в идиоматическом стиле, в то с мысле, что вместо кошерных иммутабельных структур использует 100500 ref которые ссылаются на структуры внутри которых еще ref и в итоге у него это все автоматически не сериализуется в json. То есть закат солнца вручную и изготовление из кложури перла и цэ-с-крестиками и поселение там ядовитых жаб и пауков. И все это внутри Software Transactional Memory, т.е. (dosync ...)
Два дня на пару с [livejournal.com profile] theiced пытались ему объяснить почему ему не нужно столько ref, особенно вложенных, и как кошерно пользоваться иммутабельными структурами данных. Но артурег отнекивается, не желая менять парадигму.
Впрочем, ему там и структуры такой сложности не нужны, посколько достаточно хранить обновления для этих структур в виде списка, а текущее состояние интегрировать исходя из них.

Аналогичным образом я спорил с канадскими линуксоидами, которые обвиняли меня в том, что я, используя статически типизированные языки и иммутабельные структуры данных, возвожу защитное программирование до уровня паранойи, ограничиваю себя в возможности отстрелить себе ногу, так как не верю даже себе.
То же самое и здесь: я использую языки с иммутабельностью, потому что НЕ верю сторонним либам, которые вызываю я, не верю сторонним фреймворкам, которые вызывают мой код, и более всего я не верю самому себе, когда я пишу код, который вызывает мой собственный код, написанный 10 лет назад. Потому что я помню, что всю жизнь писал код в чаду угара, в дедлайнах, на основе отсутствующих или неполных спек и вообще наугад.
Артурег же считает, что что-то полученное из черного ящика, будет хотя бы документировано, если его нельзя менять, а то что он отдает из своего кода, он нигде больше не использует и соответственно, дальше пользователи его либ могут делать с данными что хотят. Все бы хорошо, но только иммутабельные данные, ссылочная прозрачность и персистентные структуры данных - это и есть тот же самый принцип, но возведенный на уровень теоретического обоснования и реализации в языке.

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

[identity profile] falcrum.livejournal.com 2012-03-06 05:20 pm (UTC)(link)
Паранойя - нашефсё!

[identity profile] victor bolshakov (from livejournal.com) 2012-03-06 05:29 pm (UTC)(link)
Хорошая трава. Отсыпь...

[identity profile] avnik.livejournal.com 2012-03-06 05:43 pm (UTC)(link)
Не, когда у всех "своя копия" жить спокойнее (ну кроме тех случаев, когда мы работает с persistent объектом)

PS Это я за ядовитых питонов скажу

[identity profile] dr-hyder.livejournal.com 2012-03-06 06:23 pm (UTC)(link)
Религиозные нотки detected.

[identity profile] juan-gandhi.livejournal.com 2012-03-06 06:24 pm (UTC)(link)
А я так уже устал спорить. Если человек хочет научиться чему-то новому, он разует уши и будет слушать умных людей. А учиться каждый может найти чему. Если же человек не хочет учиться, да ты хоть кол на голове теши, у него другие мысли, и всё. Так что встать и пойти.

[identity profile] plumqqz.livejournal.com 2012-03-06 06:45 pm (UTC)(link)
Откажитесь от банков и автоматической телефонной связи.

[identity profile] plumqqz.livejournal.com 2012-03-06 06:47 pm (UTC)(link)
И вдогонку. "Срач" же вроде как мужского рода.

[identity profile] denisioru.livejournal.com 2012-03-06 07:37 pm (UTC)(link)
я кстати иногда подрачиваю на STM и лелею надежду что .NET framework enabled for STM все таки выйдет из инженерных проектов в релиз...

(Anonymous) 2012-03-06 07:41 pm (UTC)(link)
Ребяты, примерно треть инженеров имеет проблемы с использовние const и написания простых циклов в С. И чем больше компания тем больше там инженеров и этой трети.

[identity profile] djuffin.livejournal.com 2012-03-06 08:02 pm (UTC)(link)
>> а это автоматом означает иммутабельность и статические типы

Clojure?

[identity profile] vit-r.livejournal.com 2012-03-06 08:39 pm (UTC)(link)
Это не паранойя - это опыт.

[identity profile] noop.livejournal.com 2012-03-06 10:00 pm (UTC)(link)
Самая надежная и сопровождаемая программа - программа не написанная вообще )

[identity profile] antontsau.livejournal.com 2012-03-07 12:40 am (UTC)(link)
а потом ребе Б удивляется "что это за каменновековые релюшки и ебонитовые панельки образца 1935 года". А это всего лишь полный аналог подобного стиля, но в хардвари. Только чугун, только провернные решения, только логика на релюшках! Никаких новомодных транзисторов внутри которых жабы и электроны, поди пойми как оно работает! вот подадут туда 800 вольт - релюшкам нихрена не будет, а транзисторы все мигом сдохнут!


[identity profile] nivanych.livejournal.com 2012-03-07 05:34 am (UTC)(link)
> на кложури

Ударение на последний слог делает название изящным!

[identity profile] nivanych.livejournal.com 2012-03-07 05:35 am (UTC)(link)
> не нужно столько ref, особенно вложенных

Видимо, память экономить..........

(ворчливо) ... Опять всякой фигни притащил ...

[identity profile] pingback-bot.livejournal.com 2012-03-07 06:38 am (UTC)(link)
User [livejournal.com profile] mdajoke referenced to your post from (ворчливо) ... Опять всякой фигни притащил ... (http://mdajoke.livejournal.com/72938.html) saying: [...] (http://metaclass.livejournal.com/670899.html [...]

Про іммутабельність

[identity profile] pingback-bot.livejournal.com 2012-03-07 06:55 am (UTC)(link)
User [livejournal.com profile] madf referenced to your post from Про іммутабельність (http://madf.livejournal.com/223848.html) saying: [...] уровня паранойи, ограничиваю себя в возможности отстрелить себе ногу, так как не верю даже себе." [...]

[identity profile] sorhed.livejournal.com 2012-03-07 09:09 am (UTC)(link)
Янепонял.

[livejournal.com profile] antilamer же уже давно написал исчерпывающую статью про иммутабельность (на Кровавой Энтерпрайзной Джаве, чтобы уж совсем для тупых), ссылку на которую я и предлагаю давать всем заинтересованным лицам для окончательного решения вопроса.

Ну, а кто не просветился — тот сам себе злобный буратино, и ConcurrentModificationException ему в горбатую спину.

[identity profile] n16bs.livejournal.com 2012-03-07 05:25 pm (UTC)(link)
А вот я ещё за nonullable переменные по дефолту. Если поле или переменная должны уметь хранить нулл - так их и помечаем. Жаль в мейнстримных языках такого нет.

[identity profile] maholet.livejournal.com 2012-03-07 09:18 pm (UTC)(link)
Канадские линуксоиды - новый мем, да?

Конечно можно согласится, что это продуктивно использовать написанный в угаре 10 лет назад код, при этом заботливо окружив его try{}catch{} блоками.
Но с другой стороны, скелеты из шкафов желательно периодически вынимать и внимательно пересчитывать кости.

Я может уже изрядно подзаебал напоминанием того, что просто программист знает, что надо написать, а ХОРОШИЙ программист знает что нужно переписать.

Это как мне кажется Yet Another Good Reason (YAGR) чтобы ператрахивать свои байты.