
Friedrich
24.12.2017
07:07:24
Не могу аргументированно сказать, что в ФП-коде из-за мутабельности «сломается» больше вещей, чем в ООП.

Aleksey
24.12.2017
07:08:17
В "ФП-коде" - нормальном, а не "с элементами" - нет мутабельного состояния, ибо оно просто не нужно, т.к. задачи иначе решаются
Если приходится втыкать мутацию направо и налево, то имеет место недостаточное понимание парадигмы, увы

Friedrich
24.12.2017
07:09:04
Ну ок. Значит, у меня на практике бывает только код «с элементами» ФП. Чистого ФП на F# не практиковал.

Google

Aleksey
24.12.2017
07:09:24
В F# это норма :)
Такой код обычно уже сильно лучше, чем голая процедурщина :)
Алгебраические типы и паттернматчинг уже делают язык пристойным ;)
И в F# волей-неволей "элементов ФП" будет больше, чем в каком-нибудь питоне, потому что язык к этому сподвигает - и это отлично! :)

Friedrich
24.12.2017
07:11:29

Aleksey
24.12.2017
07:11:33
Ага

Friedrich
24.12.2017
07:12:53
Потому что вот на C# мне частенько хочется написать какой-нибудь функциональный код, частично применить что-нибудь куда-нибудь — и неизменно в этих местах я вынужден городить какую-нибудь дребедень типа вложенных вложенных функций, ну или выносить всё в DI-контейнер, резолвить, конструировать какие-то сервисы, добавляя для них интерфейсы.
Шо так фигня, шо эдак фигня.

Aleksey
24.12.2017
07:15:49
Это одна из стадий знакомства с ФП :)
- Ничего не понятно
- О, прикольно!
- Как раньше жил без этого?
- Применяю и в процедурных языках
- Понял, что лучше в процедурщину не тащить ФП, потому как убого получается <---
- Умею процедурщину процедурно и функциональщину функционально (но первое - не хочется)
- Не могу процедурно ибо уже ФП глубоко проросло
- Почитаю как ещё пейперов, т.к. настоящее программирование, это уныло
> Не могу процедурно ибо уже ФП глубоко проросло
я где-то тут :)

Evgeniy
24.12.2017
07:21:19

Aleksey
24.12.2017
07:32:18
ООП, это в первую очередь поднятие абстракции до уровня бизнес-сущностей. А вот способы достижения абстракции могут быть разными. И уж никак не "только наследование, полиморфизм, инкапсуляция" :)
Если мы пишем
player
|> stepTo North
|> drink HealthPotion
|> equip Shield
|> attack (player |> targetsOf |> first)
то это вполне себе объектненько

Google

Aleksey
24.12.2017
07:35:18
Мутабельное состояние, это всего лишь особенность конкретной реализации. Да, в процедурном коде она "увеличивает" абстракцию. Но это не самоцель

Dmitry
24.12.2017
07:35:30
Чтото беседа Бугаенковщиной отдаёт

Aleksey
24.12.2017
07:36:07
Бугаенко местами прав, но он просто не может сделать последний шаг и уйти накоец в ФП :)

Evgeniy
24.12.2017
07:36:33

Aleksey
24.12.2017
07:36:42
В широком смысле - да

Evgeniy
24.12.2017
07:36:45
Ок.

Aleksey
24.12.2017
07:37:46
Смоллтолков ООП тоже больше похож на на модель акторов, чем на "мейстримовый" ООП, хотя это и есть одна из классический версий парадигмы :)

Evgeniy
24.12.2017
07:39:17
Этот факт всегда любят вспоминать. Но меня больше "мейнстримовый" ООП интересует. :)
Как минимум потому, что это один из основных способов организации кода в F#.

Aleksey
24.12.2017
07:43:14
Наследование поведения без наследования состояния, это норм. Особенно в случае иммутабельных объектов. Полиморфизм, это тоже отлично.
Так что кое-что из мейнстримового ООП вполне применимо в ФП - в каком-то виде

Fill
24.12.2017
07:53:04
Кто сказал, что ООП требует мутабельность?

Evgeniy
24.12.2017
07:54:02
Которое еще и наследуют, создавая развесистные иерархии. :)
Поэтому сложилось некоторое негативное мнение об "ООП".

Fill
24.12.2017
07:57:08
Мы тут скорее говорим о прадигме, а не о каманли практиках. И вот парадигмы, насколько я понимаю, друг другу не противоречат.
Точнее не "мешают".

Evgeniy
24.12.2017
08:03:51
Есть чат @oop_ru, там до сих пор не могут определиться точно, что это значит.
https://github.com/dsyme/fsharp-presentations/raw/master/images/PatternMatchHints.bmp

Google

Evgeniy
24.12.2017
08:31:39
Привет из 2005.
Удивительно, с одной стороны тулинг F# улучшается, а с другой — хорошие фичи пропадают. %)

A64m
24.12.2017
09:08:42
о том, что такое ФП тоже спорят

Siarhei
24.12.2017
09:48:54
Бугаенко местами прав, но он просто не может сделать последний шаг и уйти накоец в ФП :)
оспади, попробую свои 5 копеек всунуть в обсуждение ООП и ФП и прочего
вот попробуйте забить отвёрткой гвоздь, так же и с языками,
у каждого изначально свои задачи и каждым нужно УМЕТЬ пользоватся по назначению (а не как егор твердить что ооп порочно) и не совать их повсюду,
да и дико сомневаюсь что на функциональщине с иммутабильностью можно написать что-то для эмбеддед девайса с ограниченной памятью и иными ресурсами...
ровно так же и с процедурщиной получается - её засунуть в энтерпрайз грешно.
у егора есть идеи а-ля синтаксис языка это объект (это я про EO, "if" типо объект) так это смахивает на DSL..
но DSL это вообще тонкая тема, вавилонская башня рядом, каждый расширяет язык своими терминами в итоге никто никого не понимает ибо терминология может быть не едина


A64m
24.12.2017
09:50:57
если у каждого свои задачи, то почему на языках создаваемых для программирования телевизоров, редкатирования текстов и мигания надписи "андер констракшн" на домашней страничке бекенд пишут, например?

Aleksey
24.12.2017
09:51:47
^ this

A64m
24.12.2017
09:53:10
в этом чатике еще, небось, есть те, кто бекенд пишет на языке, который создавали для скриптования пруф ассистента


Диёр
24.12.2017
09:53:43
оспади, попробую свои 5 копеек всунуть в обсуждение ООП и ФП и прочего
вот попробуйте забить отвёрткой гвоздь, так же и с языками,
у каждого изначально свои задачи и каждым нужно УМЕТЬ пользоватся по назначению (а не как егор твердить что ооп порочно) и не совать их повсюду,
да и дико сомневаюсь что на функциональщине с иммутабильностью можно написать что-то для эмбеддед девайса с ограниченной памятью и иными ресурсами...
ровно так же и с процедурщиной получается - её засунуть в энтерпрайз грешно.
у егора есть идеи а-ля синтаксис языка это объект (это я про EO, "if" типо объект) так это смахивает на DSL..
но DSL это вообще тонкая тема, вавилонская башня рядом, каждый расширяет язык своими терминами в итоге никто никого не понимает ибо терминология может быть не едина
Эмбеддед с фп не дружит не из-за ресурсов, а из-за высокоуровневых абстракций. Но вообще вроде как если пару фич завести, то вполне можно.
А что же касается ограничений по ресурсам, то тот же ghc очень агрессивно всё оптимизирует и на выходе появляется программа ни чуть не медленней написанной на сишке(ну если правильно готовить, офк)


Aleksey
24.12.2017
09:54:56
На ФП можно синтезировать код для эмбеддеда. Да и Forth - вполне себе ФП :) А уж он то точно в железки лезет :)
Опять же, железки железкам рознь. FPGA хорошо "программируются" декларативно

A64m
24.12.2017
09:56:04

Aleksey
24.12.2017
09:57:19
Вон, скоро линейные типы привезут в Haskell и смогём в железки ;)

Ivan
24.12.2017
09:58:55
Rust вполне себе ФП. Однако в железки его точно запихнут.

A64m
24.12.2017
09:59:22
в ФЯ как минимум UFP должна быть решена

Ivan
24.12.2017
10:00:12
Да, лисп тогда то же не ФП. Не стоит путать все же Pure ФП и ФП

A64m
24.12.2017
10:00:33
в лиспе UFP решена, там с этим все в порядке

Ivan
24.12.2017
10:03:02
А что такое UFP?

A64m
24.12.2017
10:03:50
Upwards funarg problem
когда можно функцию возвращать из функции, на практике без ГЦ это нормально не работает

Google

Ivan
24.12.2017
10:05:26
В Rust можно возвращать функцию из функции. Поскольку функция - это трейт.

A64m
24.12.2017
10:06:46
тут дело не в том трейт или нет, а в замыкании
решенная уфп проблема, когда ничего не делаешь а все работает, просто на переменные в скоупе из которых возвращаешь функцию ссылаешься и они переживают эту функцию

Ivan
24.12.2017
10:08:13
Неявных замыканий там нет, а вот замыкания через передачу владения есть. Но это уже совсем офтоп.

A64m
24.12.2017
10:08:37
там, где УФП не решена нужно делать специальные приседания связанные с управлением памятью
также недостаточно счетчиков, из за циклов

Ivan
24.12.2017
10:12:56
Хорошо, это не ФП. Кроме Хаскеля в таком случае ФП не завезли. Потому что без безпроблемной поддержки HKT ФП - не ФП. ?

A64m
24.12.2017
10:14:23
почему? По этому определению почти все языки с ГЦ - ФЯ

Ivan
24.12.2017
10:16:06
По этому - да. А вот по возможности и богатству применения...

A64m
24.12.2017
10:16:12
просто языков где можно себе позволить первоклассные функции, но не делали их (вроде старой Явы) почти не осталось

Диёр
24.12.2017
10:16:30
Старая ява
Звучит как ностальгический крик

Fill
24.12.2017
11:45:10

tiga
24.12.2017
11:52:13

Aleksey
24.12.2017
11:53:01
Это уже вполне функционально :)

tiga
24.12.2017
11:53:45

Aleksey
24.12.2017
11:55:14
Объектный подход абсолютно перпендикулярен оси ПП<->ФП
Т.е. объектно можно писать и там и там

tiga
24.12.2017
11:55:58

Google

Aleksey
24.12.2017
11:56:26
Да

tiga
24.12.2017
11:56:31

Aleksey
24.12.2017
11:57:20
Да не за что :)

Evgeniy
25.12.2017
12:53:43
https://visualmips.github.io
Зацените, какая штука.
На Fable написана.
https://twitter.com/realWeiJianWong/status/944905676966563840

Roman
25.12.2017
13:18:02

Evgeniy
25.12.2017
13:19:20

Roman
25.12.2017
13:19:42

Anna
25.12.2017
14:27:15
Я видела когда-то ассемблер мипса
В сетевом оборудовании встречается

Aleksey
25.12.2017
14:33:30
MIPS - довольно популярная архитектура :)

Anton
25.12.2017
15:44:44
Ребят, столкнулся с проблемой. Из этого примера не работает 39 и 84 строчка
handShakeWithSubprotocol и UTF8 попросту не существует
https://github.com/SuaveIO/suave/blob/master/examples/WebSocket/Program.fs
Может у F# API поменялся ?
@fvnever @gsomix есть мысли ?
тут тоже пример с UTF8
https://suave.io/websockets.html

Alexey
25.12.2017
16:16:53
Они сделали интернал
Utf8 модуль
С версии 2.2 вроде