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

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

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

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

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

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

Date: 2016-08-17 09:37 pm (UTC)
From: [identity profile] 4da.livejournal.com
> 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 Date: 2016-08-17 09:37 pm (UTC)

Date: 2016-08-17 09:49 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Эффекты и так в манатках, хоть ты тресни (это почти из Эрика цитата). Надо просто открыть на это глаза.
From: [identity profile] 4da.livejournal.com
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 Date: 2016-08-17 10:07 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
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.
From: [identity profile] kika.livejournal.com
> 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.
From: [identity profile] kika.livejournal.com
> 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 Date: 2016-08-18 06:42 am (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
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 Date: 2016-08-18 01:32 pm (UTC)

Date: 2016-08-18 01:38 pm (UTC)
From: [identity profile] pbl.livejournal.com
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.

Date: 2016-08-18 02:26 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
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.

Date: 2016-08-18 03:23 pm (UTC)
From: [identity profile] pbl.livejournal.com
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.
From: [identity profile] kika.livejournal.com
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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

> а починить

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Date: 2016-08-18 07:47 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Он чуть ли не отец всего 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

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

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

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

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

May 2025

S M T W T F S
    1 2 3
456 7 8 9 10
11 121314151617
181920 21222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 12:23 pm
Powered by Dreamwidth Studios