@Fsharp_chat

Страница 440 из 772
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
Это одна из стадий знакомства с ФП :) - Ничего не понятно - О, прикольно! - Как раньше жил без этого? - Применяю и в процедурных языках - Понял, что лучше в процедурщину не тащить ФП, потому как убого получается <--- - Умею процедурщину процедурно и функциональщину функционально (но первое - не хочется) - Не могу процедурно ибо уже ФП глубоко проросло - Почитаю как ещё пейперов, т.к. настоящее программирование, это уныло

> Не могу процедурно ибо уже ФП глубоко проросло я где-то тут :)

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
Бугаенко местами прав, но он просто не может сделать последний шаг и уйти накоец в ФП :)

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
Мы тут скорее говорим о прадигме, а не о каманли практиках. И вот парадигмы, насколько я понимаю, друг другу не противоречат.
Проблема в том, что понятие "ООП" можно определить только из конкретного использования. :) В смоллтолке вот так, а в C# иначе, в F# рекомендуют третье.

Есть чат @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 хорошо "программируются" декларативно

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

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

A64m
24.12.2017
09:59:22
Rust вполне себе ФП. Однако в железки его точно запихнут.
даже по минимальному требованию к ФП - не ФП

в ФЯ как минимум 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
оспади, попробую свои 5 копеек всунуть в обсуждение ООП и ФП и прочего вот попробуйте забить отвёрткой гвоздь, так же и с языками, у каждого изначально свои задачи и каждым нужно УМЕТЬ пользоватся по назначению (а не как егор твердить что ооп порочно) и не совать их повсюду, да и дико сомневаюсь что на функциональщине с иммутабильностью можно написать что-то для эмбеддед девайса с ограниченной памятью и иными ресурсами... ровно так же и с процедурщиной получается - её засунуть в энтерпрайз грешно. у егора есть идеи а-ля синтаксис языка это объект (это я про EO, "if" типо объект) так это смахивает на DSL.. но DSL это вообще тонкая тема, вавилонская башня рядом, каждый расширяет язык своими терминами в итоге никто никого не понимает ибо терминология может быть не едина
Не думаю, что ООП и ФП предназначены для решения разных задач. Вообще ни одного аргумента в защиту этого мнения не приходит в голову

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

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

Т.е. объектно можно писать и там и там

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
Я так и не понял что это
Редактор + эмулятор какого-то MIPS процессора.

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 вроде

Страница 440 из 772