metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2016-02-21 03:42 pm

Статья про хаскель в проде, где все правильно написано

http://www.stephendiehl.com/posts/production.html

Про типичную опердень и как она умучает рантайм хаскеля:

A common performance problem is that of many small updates updates to records with large numbers of fields. Records of hundreds of fields are somewhat pathological but in practice they show up in a lot of business logic that needs to interact with large database rows. Too much of this can very noticeable impact on GC pressure by doing allocations on each update.

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

И про метапрограммирование: Avoid TemplateHaskell. Half the appeal of Haskell is that its high-level design allows you to avoid huge amounts of useless boilerplate code that you have to write in other languages. If you need compile-time code generation, you’re basically saying that either your language or your application design has failed you.

Как без метапрограммирования нормально делать опердени, где 99% кода - это бойлерплейт по перекладыванию между полями разных объектов и БД - хрен его знает.
Всякие ORM с рефлекшенами и кодогенерацией в рантайме - это то же самое, только медленно и уныло.

[identity profile] qnikst (from livejournal.com) 2016-02-26 08:39 pm (UTC)(link)
Ответ (точнее его отсутсвие) принято.

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

[identity profile] vit-r.livejournal.com 2016-02-26 08:43 pm (UTC)(link)
Бля. Я говорю, что кода хорошего от хакселистов не видел. А тут опять старая песня "Да мы! Да у нас! Да как ты смеешь! Раз ты такой гадкий, ничего не покажем!"

[identity profile] qnikst (from livejournal.com) 2016-02-26 08:53 pm (UTC)(link)
А я всего лишь спросил, какой код Вы видели и посчитали плохим, и желательно пару слов почему. В случае ответа на этот прямой вопрос будет более-менее понятно, какие примеры показывать или не показывать вообще, а сконцентрироваться на уже виденном Вами проекте, или вообще показывать что-либо не имеет смысла. У людей очень разные понятия об извращенности дизайна, и разный опыт работы, разная теоритическая база, так в определенных mind set-ах никакая программа на случайно выбранном языке не будет "нормальной".

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

P.S. для меня просьба показать "хороший код" должна быть явной, тут её не было.

[identity profile] vit-r.livejournal.com 2016-02-26 09:32 pm (UTC)(link)
Ох, ну в школе должны были учить, что в данном случае доказательство только от противного. "Вы утверждаете, что не существует Х, обладающих У. Вот Х, который обладает."

У людей очень разные понятия об извращенности дизайна, и разный опыт работы, разная теоритическая база, так в определенных mind set-ах никакая программа на случайно выбранном языке не будет "нормальной".

Это иллюзия. Такое впечатление, что разговор идёт об абстрактной живописи.

[identity profile] qnikst (from livejournal.com) 2016-02-26 09:42 pm (UTC)(link)
Может быть не будем про школу, а то там были учить тому , что существуют разные аксиоматики. А ещё и классы есть, и обучение происхдит последовательно и на уроках физики не вываливают на людей знания требующие функционального анализа. Это так, чтобы об абстрактной живописи было немного.

Ещё раз, а то как-то печально диалог движется, ответ на вопрос какие "проекты вы видели, на основе которого делаете такие выводы", является обязательным для продолжения дискусии и приведения примеров (в всяком случае в подветке разговора со мной). Почему это так, написано в комментарии, заставившем вас вспомнить школьный опыт.

[identity profile] vit-r.livejournal.com 2016-02-26 10:01 pm (UTC)(link)
Может быть не будем про школу

Будем, будем. Основы доказательств там должны были объяснять.

[identity profile] qnikst (from livejournal.com) 2016-02-26 10:06 pm (UTC)(link)
Ну чтобы приводить доказательство нужно понимать, что собеседник способен его воспринять, для этого мне нужен был ответ на очень простой вопрос, от которого вы старательно уходите. Допустим я посмотрел на имя и и возраст и поверил, вам, хотя и не забыл, того, что вопрос не отвечен. Так, что представим, что мы меня уговорили, тогда допустим так: https://github.com/tweag/HaskellR и так: https://github.com/GaloisInc/cryptol .

[identity profile] qnikst (from livejournal.com) 2016-02-26 10:08 pm (UTC)(link)
Ну чтобы приводить доказательство нужно понимать, что собеседник способен его воспринять, для этого мне нужен был ответ на очень простой вопрос, от которого вы старательно уходите. Допустим я посмотрел на имя и и возраст и поверил, вам, хотя и не забыл, того, что вопрос не отвечен. Так, что представим, что мы меня уговорили, тогда допустим так: HaskellR и так cryptol . Поскольку я в lj человек второго сорта, то ссылки привести не могу, или придётся ждать пока metaclass не подтвердит комментарий.

[identity profile] vit-r.livejournal.com 2016-02-26 10:34 pm (UTC)(link)
Ещё раз.
Смотрим моё утверждение.
Как доказывается его неправильность?

Фиг с ним, с дизайном. Есть задачи, для которых Хаскель годен. Достаточно показать хорошие комментарии.

Поскольку я читаю с мейла, ссылки я вижу сразу. Какой файл в этом cryptol содержит хорошие комментарии и хорошую обработку ошибок?

[identity profile] qnikst (from livejournal.com) 2016-02-26 10:43 pm (UTC)(link)
> У меня подозрение, что люди, программирующие на Хаскеле, пишут очень хреновые комментарии и создают извращённый дизайн. Поэтому ...

в моём комментарии приведены программы с хорошим дизайном. Если в Вашем утверждении квантор exists, а не forall, то утверждение является тривиальным, т.к. естественно программисты пишущие извращенный дизайн на любом языке существуют.

> Какой файл в этом cryptol содержит хорошие комментарии и хорошую обработку ошибок?

возьмем произвольный файл, например Cryptol.TypeCheck.Solve. Я не заметил, в каком месте у вас появились "комментарии", или документация теперь == комментарии?

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

[identity profile] vit-r.livejournal.com 2016-02-26 10:55 pm (UTC)(link)
Я не заметил, в каком месте у вас появились "комментарии

В цитате двумя абзацами выше.

Честно говоря, мне даже влом объяснять, почему конструкции вроде

Just (imps,extra) ->
do let su = importImps imps
gs0 = apSubst su gs

или
$ DelayedCt { dctSource = lname
, dctForall = as
, dctAsmps = ps
, dctGoals = us
}, su)

не являются хорошим кодом.

[identity profile] qnikst (from livejournal.com) 2016-02-26 10:59 pm (UTC)(link)
про комментарии принято.

я бы все же на вашем месте постарался и объяснил. Т.к. если это то, о чем я думаю, то я бы в эту дискуссию не вступал бы изначально.

[identity profile] qnikst (from livejournal.com) 2016-02-26 11:08 pm (UTC)(link)
т.к. если это предположение о том, что код должен быть написан как:

   Just (implications, side_conditions) -> do
      let substitutions = importImplications implications
            new_goals  = applySubstitutions substitutions goals


и

... $ DelayedConctraints  { delayed_constraints = local_name
                                          , delayed_contstraints_universals = type_parameters
                                           , delayed_constriants_assumptions = assumed_contraints
                                           , delayed_constraints_goals = collected_constraints
                                           }, substitutions)


то мне остаётся только скромно промолчать.

[identity profile] vit-r.livejournal.com 2016-02-26 11:09 pm (UTC)(link)
Любители Хаскеля не пишут код, а кодируют хитроумное решение.

Что годится для упражнений ума на лекции или статьи в математическом журнале, который читают по шесть страниц в день, но совершенно не пригодно для коммерческого использования.

Плюс обработка ошибок хреновая. Впрочем, с ними практически никто работать не умеет.

[identity profile] qnikst (from livejournal.com) 2016-02-26 11:24 pm (UTC)(link)
Я, честно, вас не понимаю.

Замечу, я первый раз читаю этот код, мне просто нравится этот проект и я знаю людей его писавших, плюс использовал немного не заглядывая во-внутрь. Я читаю этот код и не вижу никаких проблем с пониманием того, что там происходит, 1 раз мне пришлось сделать поиск (чтобы понять кто-такой DelayedCT, в редакторе даже этого бы не пришлось, т.к. документацию бы сразу увидел), и мне сразу понятно, что он делает. Поэтому я честно не понимаю, где здесь "кодирование хитроумного решения", и constraint solver-а может проще выглядеть в привычных языках, которые я знаю и имел опыт работы. я вижу, как в императивных языках он будет выглядеть хуже, так, не помещаться на экран, не являться последовательной декомпозицией по типу данных (ADT), быть завернутым в несколько слоёв проекто-специфичных абстракций, и все это будет мешать мне понимать, сопровождать и отлаживать код.

> Плюс обработка ошибок хреновая. Впрочем, с ними практически никто работать не умеет.

Если не лень, то Вы можете рассказать, что вы понимаете под хорошей обработкой ошибок? Ссылки на статьи или книги тоже принимаются.

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

[identity profile] vit-r.livejournal.com 2016-02-26 11:37 pm (UTC)(link)
Я преследую свои личные цели. В очередном показанном коде я не вижу того, что заявлено.

Дело не в языках. На любом языке можно писать понятно и надёжно, а можно так, что работа с кодом превратится в мучение.

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

[identity profile] qnikst (from livejournal.com) 2016-02-26 11:48 pm (UTC)(link)
Смотрите, мы пришли к тупику, вы выделили 2 элементарных куска кода и сказали, что он сложный и непонятный и ненадежный. При этом я смотря на этот код не вижу того, что он сложный, он для меня понятный и я не вижу ни одной причины пояему он не надежный. Какая-то тут проблема, не находите?

Я, конечно, не скажу какая, но напомню то, о чем я много раз сказал в данном треде, какой код вам показывали, и что не понравилось. Для того, чтобы показать простой пример. Вдруг у вас 40 летний опыт использовпния слабовыразительных императивных языков :) типа си или явы. А любая функциональщина бужеи встречена как этот проект.
Играть покажите мне то, что мне понравится, мне тоже не сильно интересно, особенно при такой подробности аргументации. Так что наверное лучше остаться при мнениях, что хацкелисты пишут неподдерживаемые программы с извращенным дизайном, а мне при том, что мнение человека с недостаточным опытос в ФП малоинтересно при обсуждении ФП и design choices там.
Уточную, что на прочие вопросы в ИТ и программировании мои выводы не распространяются и о той же обработке ошибок можно вполне и поговорить/послушать.

[identity profile] vit-r.livejournal.com 2016-02-27 08:08 am (UTC)(link)
я не вижу ни одной причины пояему он не надежный

Да хотя бы потому, что куча переменных из одной и двух букв. Причём, двухбуквенные переменные отличаются одной буквой.

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

И мне пофиг, какие парадигмы.С Лиспом я знаком давно.

[identity profile] metaclass.livejournal.com 2016-02-26 10:41 pm (UTC)(link)
Не могу подтвердить, козлопитоны жжшные сломали комментарии, я их просто не вижу :)

[identity profile] qnikst (from livejournal.com) 2016-02-26 10:45 pm (UTC)(link)
наверное, ничего страшного, нагуглить все смогут. Разве, что я прямые линки на гитхаб с выделением кода давать не смогу. Да и в любом случае я подозреваю, что эта ветка скоро закроется и все останутся при своих мнениях, к сожалению.