[identity profile] math-mommy.livejournal.com 2016-08-17 09:24 pm (UTC)(link)
Кстати, о книжках.
Есть такая вещь "R Inferno", Patric Burns. Как раз о смешном.
Несколько эмоционально и временами товарищ нагнетает, но на оглавление глянуть весьма познавательно.
Edited 2016-08-17 21:26 (UTC)

[identity profile] juan-gandhi.livejournal.com 2016-08-17 09:48 pm (UTC)(link)
Пока что я оттягиваюсь. Посчитал средний BMI американских женщин только-что.

[identity profile] math-mommy.livejournal.com 2016-08-17 10:03 pm (UTC)(link)
Там еще графика замечательная.

[identity profile] juan-gandhi.livejournal.com 2016-08-17 10:58 pm (UTC)(link)
Да, я что-то уже попробовал.

[identity profile] vissarion.livejournal.com 2016-08-17 09:25 pm (UTC)(link)
Я так и не понял что он хотел сказать, кроме того что скала и F# говно.

Вот, допустим есть новый коммерческий гринфилд энтерпрайз проект.
На чём его писать ? Неужели на хаскеле, без ide с гигабайтами отложенных вычислений?

[identity profile] 4da.livejournal.com 2016-08-17 09:37 pm (UTC)(link)
> Instead, developers should seriously consider a completely fundamentalist option as well: embrace pure lazy functional programming with all effects explicitly surfaced in the type system using monads.

Не понял почему обязательно Lazy и почему эффекты обязательно должны описываться в манатках.

Похоже на какое-то фанбойство
Edited 2016-08-17 21:37 (UTC)

[identity profile] juan-gandhi.livejournal.com 2016-08-17 09:49 pm (UTC)(link)
Эффекты и так в манатках, хоть ты тресни (это почти из Эрика цитата). Надо просто открыть на это глаза.

Не знаю, можно ли посчитать эÑ

[identity profile] 4da.livejournal.com 2016-08-17 10:07 pm (UTC)(link)
https://eb.host.cs.st-andrews.ac.uk/drafts/effects.pdf

One often cited benefit of pure functional programming is that pure code is easier to test and reason about, both formally and informally.
However, real programs have side-effects including state management, exceptions and interactions with the outside world.
Haskell solves this problem using monads to capture details of possibly side-effecting computations — it provides monads for capturing State, I/O, exceptions, non-determinism, libraries for practical purposes such as CGI and parsing, and many others, as well as monad transformers for combining multiple effects.

Unfortunately, useful as monads are, they do not compose very well. Monad transformers can quickly become unwieldy when there are lots of effects to manage, leading to a temptation in larger programs to combine everything into one coarse-grained state and exception monad. In this paper I describe an alternative approach based on handling algebraic effects, implemented in the IDRIS programming language. I show how to describe side effecting computations, how to write programs which compose multiple fine-grained effects, and how, using dependent types, we can use
this approach to reason about states in effectful programs.

Edited 2016-08-17 22:07 (UTC)

Re: Не знаю, можно ли посчитать Ñ

[identity profile] juan-gandhi.livejournal.com 2016-08-17 10:59 pm (UTC)(link)
It's a fact of life that they don't compose, not the defect of monads. Try to compare list of sets and set of lists, for instance.

Re: Не знаю, можно ли посчитать Ñ

[identity profile] kika.livejournal.com 2016-08-18 06:34 am (UTC)(link)
> Unfortunately, useful as monads are, they do not compose very well.

Monads do not, but effects perfectly do as soon as you get effect rows.

Re: Не знаю, можно ли посчитать Ñ

[identity profile] kika.livejournal.com 2016-08-18 06:38 am (UTC)(link)
> monad transformers for combining multiple effects.

This is a Haskell problem, not the fundamental one.

doFiles::forall e. Eff (fs::FS, console::CONSOLE|e) Unit
doHttp::forall e. Eff (http::HTTP, console::CONSOLE|e) Unit

doStuff::forall e. Eff (fs::FS, console::CONSOLE, http::HTTP|e) Unit
doFiles <<< doHTTP

You can also handle effect, which means you remove the effect from the row and once you get to the Eff () you can runPure and transform the effectful computation into the pure one. Bingo.
Edited 2016-08-18 06:42 (UTC)

RE: Re: Не знаю, можно ли посчитатÑ

[identity profile] huzhepidarasa.livejournal.com 2016-08-18 01:32 pm (UTC)(link)
Correct me if I'm wrong but Eff looks exactly like the IO monad. Naturally it composes with itself. But it's too coarse.
Edited 2016-08-18 13:32 (UTC)

[identity profile] pbl.livejournal.com 2016-08-18 01:38 pm (UTC)(link)
More like IO with refinement on top of it, innit? But there are other encodings of effects that do not involve monads and, according to rumour, are composable (for some values thereof). I believe F* featured something like that, they even had Div or somesuch for divergence.

[identity profile] huzhepidarasa.livejournal.com 2016-08-18 02:26 pm (UTC)(link)
Yes, parameterized by list (set?) of effects that occurred. I think this should be possible in Haskell too, with some existing or plausible extension. Need to think about it.

[identity profile] pbl.livejournal.com 2016-08-18 03:23 pm (UTC)(link)
DataKinds and friends should be enough methinks, at least for a rough approximation of this. Is type inference for this decidable, though? Type checking should be.

Re: Re: Не знаю, можно ли посчитатÑ

[identity profile] kika.livejournal.com 2016-08-18 09:59 pm (UTC)(link)
Yes, it does. But it is parametrized with either an open or closed row of effects and thus Eff (console::CONSOLE) doesn't compose with Eff (fs::FS). By opening and closing the row and adding and removing effects I can control the composability. This is also not fine-grained enough (esp. with the "inflation of effects" when everybody and their grandmother invents new type of effect which implicitly may include others) but it's much, MUCH, more fine-grained than IO() which is just "some IO" who knows what it does.

Re: Re: Не знаю, можно ли посчитатÑ

[identity profile] juan-gandhi.livejournal.com 2016-08-19 03:31 am (UTC)(link)
Oh. Puzzle solved. Thanks!

[identity profile] tridecahedron.livejournal.com 2016-08-17 09:48 pm (UTC)(link)
Все равно надо хотя бы 4 байта mutable state.

[identity profile] no more turtles (from livejournal.com) 2016-08-17 11:06 pm (UTC)(link)
спасибо, очень познавательно.

[identity profile] soonts.livejournal.com 2016-08-17 11:10 pm (UTC)(link)
Афтар приводит примеры кода с простыми багами, которые обнаруживаются за 1 минуту с отладчиком, и ещё за минуту чинятся.
Правильный, но неинтересный вывод из этого — на C# с лямбдами можно написать код с багами.
Какая неожиданность! Шо, уже придумали язык, на котором нельзя так?
Афтар же делает странный вывод о том, что концепция не работает.

Functional programming затащили нынче во все императивные языки совсем не ради safety, как почему-то решил афтар, а потому что функциональные абстракции для некоторых задач очень хорошо подходят.
Иногда можно написать немного простого функционального кода вместо кучи сложного императивного.
Иногда производительность лучше становится.
Иногда API design сильно упрощается.

Интересно, откуда афтар взял идею о том, шо если impure, то сразу unfeasible?

[identity profile] perdakot.livejournal.com 2016-08-17 11:41 pm (UTC)(link)
> шо если impure, то сразу unfeasible?

А как узнать, что там в кишках творится? Есть есть f и g, можно ли их выполнять в любом порядке, можно ли их выполнять парралельно?

[identity profile] soonts.livejournal.com 2016-08-18 03:54 pm (UTC)(link)
Откуда вы узнали, что они такие есть, f и g?
И откуда у вас стремление их выполнить?
Похоже у вас есть какие-то ожидания, шо именно они вычисляют. Откуда?

Вот оттуда же вы можете узнать, можно ли их параллельно.

Если сами написали, вы и так вероятно в курсе.
Если SDK/библиотека, читайте документацию.
Если untrusted код, я вам не советую выполнять ни одну из них, совершенно независимо от языка и рантайма. Разве что в хорошей песочнице (CLR + sandbox, или процесс с закрученными правами, или уж VmWare/HyperV/Xen), и то с оговорками.

[identity profile] perdakot.livejournal.com 2016-08-18 03:58 pm (UTC)(link)
> Если сами написали, вы и так вероятно в курсе.

Наша команда написала. Коллективное творчество. Полгода назад захотелось несколько копий f запускать, каждую в своем треде. Пришлось просматривать весь код.

[identity profile] soonts.livejournal.com 2016-08-18 04:30 pm (UTC)(link)
Так у вас куча legacy кода, написанного командой (вероятно за много лет) в предположении, что он будет работать в одном потоке?
Тогда ответ на ваши вопросы выше очевиден.
>можно ли их выполнять в любом порядке, можно ли их выполнять парралельно?
Нет, ваши функции нельзя выполнять параллельно.

Алсо вы могли не просматривать весь код, а починить функции, сделав их thread safe.

[identity profile] perdakot.livejournal.com 2016-08-19 01:58 am (UTC)(link)
> в предположении, что он будет работать в одном потоке?

Есть миллиард функций, какие-то можно выполнять в одном потоке, какие-то нет.

> Нет, ваши функции нельзя выполнять параллельно.

Оказалось, что можно (ну или я совсем немного поменял, чтобы было можно).

> а починить

Ага, весь миллиард. А если сразу писать все thread safe, то получится то, про что написано по ссылке в посте.

[identity profile] yussouf.livejournal.com 2016-08-18 12:45 am (UTC)(link)
так!

под каждым словом!

> Афтар приводит примеры кода с простыми багами, которые
> обнаруживаются за 1 минуту с отладчиком, и ещё за минуту
> чинятся.

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

[identity profile] yussouf.livejournal.com 2016-08-17 11:54 pm (UTC)(link)
опять схоластика с ненавязчивой религиозной пропагандой

как и всякая - основанная, чуть более чем полностью, на:
I) ложной индукции
II) паттерне
1. do this
2. do that
3. do something else
4. ....
5. PROFIT!

ЗІ я правильно понял (из, например, википедии): этот штемп, автор-то - он звезда цомпуктер сциенс?
уважаемый специалист?
Edited 2016-08-18 00:33 (UTC)

[identity profile] juan-gandhi.livejournal.com 2016-08-18 01:12 am (UTC)(link)
Автор - человек очень серьезный, в смысле профессионализма. В смысле чисто по человечески он веселый голландец.

[identity profile] yussouf.livejournal.com 2016-08-18 01:23 am (UTC)(link)
ок, но зачем же он так делает?

опять подобный флюсу?

ЗЫ вообще, конечно, мало ебашат людей палками за любое проявление религиозного сознания, пока маленькие
ох, мало

от оно потом и вылазит

ЗЗЫ хорошо еще если в тотальную шизофрению не переходит, как у бесноватого Максимки

[identity profile] kika.livejournal.com 2016-08-18 06:41 am (UTC)(link)
Это тот самый Эрик Майер? ТОТ САМЫЙ?!? Ээээ, а как же ООП и все такое?

[identity profile] soonts.livejournal.com 2016-08-18 04:34 pm (UTC)(link)
Другой конечно, один Scott (https://en.wikipedia.org/wiki/Scott_Meyers), фторой Erik (https://en.wikipedia.org/wiki/Erik_Meijer_(computer_scientist)).

[identity profile] pbl.livejournal.com 2016-08-18 04:57 pm (UTC)(link)
А ведь есть третий (https://en.wikipedia.org/wiki/Bertrand_Meyer).

[identity profile] yussouf.livejournal.com 2016-08-18 09:31 pm (UTC)(link)
этот жадина

[identity profile] kika.livejournal.com 2016-08-18 09:54 pm (UTC)(link)
А, ну слава богу, а то я уж испугался что небо рухнуло на землю.

[identity profile] thedeemon.livejournal.com 2016-08-18 07:47 am (UTC)(link)
Он чуть ли не отец всего LINQ.

"His 1992 dissertation at the University of Nijmegen offered a mathematical justification for what would later become known as Language Integrated Query (LINQ), the important .NET technology that smoothes out differences in data forms by identifying a common set of operations that work across all data. Meijer's acclaimed work on lightweight code generation, the C# language extension C-Omega, and C# 3.0 and Visual Basic 9, has helped bridge object-oriented, relational, and hierarchical data types—the three major contemporary data models that prevail in the industry today."
https://www.microsoft.com/about/technicalrecognition/erik-meijer.aspx

[identity profile] perdakot.livejournal.com 2016-08-18 01:28 am (UTC)(link)
У меня есть вопрос про то, что эффекты должны быть в интерфейсе. Не окажется ли так, что тип функции - это тело функции?

[identity profile] juan-gandhi.livejournal.com 2016-08-18 05:37 pm (UTC)(link)
Ну как это так! Тело же не специфицирует параметры.

[identity profile] perdakot.livejournal.com 2016-08-18 05:49 pm (UTC)(link)
А параметры как в питоне, просто перечислены.