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] metaclass.livejournal.com 2012-03-07 10:49 am (UTC)(link)
Библиотеки для IOC, да еще и с xml конфигурацией - ужасает :)

[identity profile] artureg.livejournal.com 2012-03-07 10:53 am (UTC)(link)
говно у вас в голове, если вы считаете такой замечательный язык как жаваскрипт - говном

[identity profile] blackyblack.livejournal.com 2012-03-07 10:55 am (UTC)(link)
Да нет вроде. Не видел ни одного реального применения STM и не верю, что можно добиться надежной многопоточности без перекраивания всей архитектуры системы в этом направлении.

[identity profile] bydl0coder.livejournal.com 2012-03-07 11:00 am (UTC)(link)
а у вас в голове органчик (из говна).
еще раз прочитайте комментарий, может догадаетесь, что имелось в виду.

[identity profile] artureg.livejournal.com 2012-03-07 11:01 am (UTC)(link)
научитесь толком выражать свои мысли

[identity profile] bydl0coder.livejournal.com 2012-03-07 11:02 am (UTC)(link)
айсед, залогиньтесь.

[identity profile] artureg.livejournal.com 2012-03-07 11:05 am (UTC)(link)
даю ещё одно попытку изложить ваши соображения доступно для окружающих

[identity profile] dr-hyder.livejournal.com 2012-03-07 11:30 am (UTC)(link)
Just tool for the right job.

[identity profile] tonsky.livejournal.com 2012-03-07 12:46 pm (UTC)(link)
> А он не дозрел а не я просто потому что вы не знаете никакого контекста, но пытаетесь его угадать.

Почему ответ на такой универсальный вопрос вдруг зависит от контекста конкретного разговора вас с кем-то?

> Как я уже говорил - надо дозреть.

Ну, такую аргументацию я уже читал. This is a good thing, take my word for it.

> Вам чувствую очень хочется пообсуждать с кем нибудь свои мысли по поводу dependency injection.

Я лишь пытался сказать, что ответ на вопрос кто кого должен слушать далеко не всегда так очевиден, как кажется, и слушать всегда надо в обе стороны.

[identity profile] dr-hyder.livejournal.com 2012-03-07 01:02 pm (UTC)(link)
> Я лишь пытался сказать, что ответ на вопрос кто кого должен слушать далеко не всегда так очевиден, как кажется, и слушать всегда надо в обе стороны.

Вы всех в интернете считаете тупее себя и пытаетесь им прописные истины обьяснить, просто потому что они МОГУТ БЫТЬ не правы? Я мог быть там не прав а он прав, да. Однако в данном случае это не так. Верите вы мне или нет не важно, смысл моего сообщения был не в том что dependency injection нужно юзать везде и всегда, там был конкретный случай с конкретным technology stack. Обсуждать который смысла не вижу, поэтому ежели вы в своей карьере не сталкивались с необходимостью dependency injection через всякие дурацкие фреймворки - ну я могу вам только позавидовать.

> Почему ответ на такой универсальный вопрос вдруг зависит от контекста конкретного разговора вас с кем-то?

Потому что правильного ответа на этот универсальный вопрос в общем случае не существует. Есть только частные ответы для конкретных случаев.

> Ну, такую аргументацию я уже читал. This is a good thing, take my word for it.

Я вам посоветовал как можно самостоятельно вывести нужду в dependency injection. Without taking my word for it.
Edited 2012-03-07 13:11 (UTC)

[identity profile] dr-hyder.livejournal.com 2012-03-07 01:15 pm (UTC)(link)
А в чём заключается окончательное решение вопроса? Надо везде юзать immutable types и все проблемы решатся? Не пора ли товарищу антиламеру нобелевскую давать за окончательное решение еврейского concurrency вопроса?
Edited 2012-03-07 13:17 (UTC)

[identity profile] sorhed.livejournal.com 2012-03-07 01:19 pm (UTC)(link)
Давать ли нобелевку — это нобелевский комитет решает, а не я, а вообще рекомендую посмотреть хотя бы выступление SPJ "The Future is Parallel, and the Future of Parallel is Declarative" вот тут.

Когда будут процессоры с парой сотен ядер, других альтернатив просто не останется — все будут использовать иммутабельность как миленькие. А процессоры такие ожидаются лет через пять, да и сейчас, когда ядер всего десяток (на моём десктопе, например, 16), уже подпирает.

[identity profile] sorhed.livejournal.com 2012-03-07 01:21 pm (UTC)(link)
Связь на эрланге делают (местами), там всё хорошо. А банки да. Вообще удивляюсь, как там хоть что-то работает.

[identity profile] plumqqz.livejournal.com 2012-03-07 01:25 pm (UTC)(link)
Кроме связи есть такая унылая порнография, ради которой это все делают, как деньги.
Кстати, в бытность мою работы в телекоме эрланг воспринимался местным населением как аккадский - что-то такое было, не без этого, но письмена ныне уже позабыты.

[identity profile] bydl0coder.livejournal.com 2012-03-07 01:25 pm (UTC)(link)
Действительно, с людьми, моск которых был поражен мозговой жабой, надо попроще.

Обясняю:
1. Для кучи народа JS - первый язык, им будет сложней засрать мозги паттернами-хуятернами.
2. Время server-side web forms приложений проходит, сейчас все ориентируются на single page, значит JS будет еще больше
3. Так как JS все-таки говно, то его лучше не писать самому, а генерить. Соответственно, в мейнстриме будет больше всякой функциональщины, которая, хоть и старье, но все равно прогресс по сравнению с.

[identity profile] sorhed.livejournal.com 2012-03-07 01:27 pm (UTC)(link)
А, вы про биллинг. Да, не без того. Но тогда вообще страшно жить — вот у меня недалеко атомная электростанция облака делает, а кто знает, может, там в управляющем софте тоже dependency injection и global shared mutable state во все поля.

[identity profile] bydl0coder.livejournal.com 2012-03-07 01:30 pm (UTC)(link)
Просто признайте, что уж очень неудачный пример.
Есть вещи, до которых надо "дойти", но для них аббревиатур не придумано.

[identity profile] plumqqz.livejournal.com 2012-03-07 01:31 pm (UTC)(link)
На все боля Вожья.
Пока, как я понимаю, обходилось.

[identity profile] artureg.livejournal.com 2012-03-07 01:32 pm (UTC)(link)
Какой бред:
1. для какой кучи, что значит первый, какими патернами, ояебу - набор бессвязных слов
2. кто все?
3. Говно, потому что он слишком сложен для большинства недоумков с жабы, дотнетов и крестиков. Соответственно схуяли?

Резюмирую: ваш комментарий -
набор слов, бессвязных, нарушения причинно следственных связей и ошибочные обобщения.

[identity profile] dr-hyder.livejournal.com 2012-03-07 01:42 pm (UTC)(link)
Отличный пример я считаю. A bit controversial, sure, but that's expected from russian heavy cowboy-coder driven programming community.
Edited 2012-03-07 13:56 (UTC)

[identity profile] bydl0coder.livejournal.com 2012-03-07 01:45 pm (UTC)(link)
Правильно ли я понял, что JS не говно, а слишком сложный? OH SHI

[identity profile] artureg.livejournal.com 2012-03-07 01:46 pm (UTC)(link)
правильно

[identity profile] bydl0coder.livejournal.com 2012-03-07 01:49 pm (UTC)(link)
Так это одно из определений плохого языка.

[identity profile] artureg.livejournal.com 2012-03-07 01:50 pm (UTC)(link)
нет, это всего лишь констатация факта, у жс порог вхождения выше чем у дотнетов жаб и плюсиков

[identity profile] dr-hyder.livejournal.com 2012-03-07 01:54 pm (UTC)(link)
Уже давно подпирает и давно юзают, но есть огромное количество задач которым они не обязательно нужны. Процессы которым не требуется 100500 ядер, а нужно 2-3-10, задачи где невозможно использовать полностью immutable стркутуру данных просто потому что она слишком большая, например(отдельные листья-ноды-компоненты там могут быть вполне immutable) ну и т.д. Ну а самое главное - допустим процессы не используют shared ресурсы и обмениваются исключительно immutable данными - ок. Но что мешает каждому конкретному процессу например для перформанса использовать внутри себя mutable данные, без всяких последствий? А вообще я только за immutable, просто удивляет категоричность, like it's a silver buller or something.

Page 4 of 5