Size: a a a

Software Design/Architecture/Zen

2020 November 27

NF

Nikita Fedorov in Software Design/Architecture/Zen
pragus
а что это за язык?
js))
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Nikita Fedorov
ну я потюнил, в итоге код различается только тем в какой момент я добавляю поведение к данным, на классах этот момент - во время определения класса, а с магическим ФП в момент вызова кода
... пожертвовав OCP - браво
источник

p

pragus in Software Design/Architecture/Zen
А как в в фп-стиле выглядит разбор какого-нибудь бинарного формата?
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
в принципе на шарпе аналогично с linq код пишется, не знаю как на других языках
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
... пожертвовав OCP - браво
не вижу связи
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Nikita Fedorov
не вижу связи
> в какой момент я добавляю поведение к данным
> в момент вызова кода

А если _такое же_ поведение надо добавить в другом месте? Копи-паста? Или всё-таки сделать один лифт в общем месте для этих двух?
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Зачем использовать ФП, если больно?
Мыши плакали, кололись, но продолжали грызть кактус?
Сначала надо мозг от-тьюнинговать, а потом уже ФП-код писать
Я пишу ФП код, но до сих пор не уверен, что это хорошая идея.
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
Sergey Alaev
Я пишу ФП код, но до сих пор не уверен, что это хорошая идея.
Много времени приходится тратить на какие-то олимпиадные задачки вместо value. Т.к. ФП = строгая типизация всего = сложные модели, создание которых можно обойти, "расслабив" ограничения.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
pragus
А как в в фп-стиле выглядит разбор какого-нибудь бинарного формата?
Parser combinators можно погуглить
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Sergey Alaev
Я пишу ФП код, но до сих пор не уверен, что это хорошая идея.
Не все умеют в ADT, да. Смотришь потом на эти все .empty(), .chain() и т. д...
Сложно искать людей, которые понимают такой код. Я не пишу ADT, монады - не хочу, чтоб меня уволили)))
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
> в какой момент я добавляю поведение к данным
> в момент вызова кода

А если _такое же_ поведение надо добавить в другом месте? Копи-паста? Или всё-таки сделать один лифт в общем месте для этих двух?
ты удивишься, но если при таком подходе нужен этот же код в другом месте, то копипаста это лучшее решение, потому что такой же код не значит что он делает то же самое)
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
pragus
А как в в фп-стиле выглядит разбор какого-нибудь бинарного формата?
DSL, формирующий структуру данных, описывающую как распарсить байты и как собрать из них выходную модель.
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Не все умеют в ADT, да. Смотришь потом на эти все .empty(), .chain() и т. д...
Сложно искать людей, которые понимают такой код. Я не пишу ADT, монады - не хочу, чтоб меня уволили)))
Ну вот отказ от ADT - это, имхо, перебор) Концепция а) простая б) полезная в) не эмулируемая традиционной джава-разработкой.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Nikita Fedorov
ты удивишься, но если при таком подходе нужен этот же код в другом месте, то копипаста это лучшее решение, потому что такой же код не значит что он делает то же самое)
Когда таких мест - два, то ок. Когда их становится 10-15 - то надо что-то менять
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Когда таких мест - два, то ок. Когда их становится 10-15 - то надо что-то менять
да, можно добавить ещё одну обертку)))
источник

p

pragus in Software Design/Architecture/Zen
Sergey Alaev
DSL, формирующий структуру данных, описывающую как распарсить байты и как собрать из них выходную модель.
С dsl понятно, вопрос самого разбора. Чтобы быть чуть ближе к реальной задаче:

Есть матрёшка из пакета [Ethernet, Vlan, IP, UDP, DNS] и хочется быстро(на потоке в 40-50 млн пакетов на ядро) уметь понимать что внутри есть DNS с определенными флагами.
источник

LS

Lev Shagalov in Software Design/Architecture/Zen
Положим, у меня 20-40к сущностей, составляющих состояние электросети. Мы можем обновлять их как по одной так и сразу 20к.

Но база умеет атомарность только на уровне документа. А еще она умеет репликацию, но не по порядку записи документа, зараза.

Если я положу все 40 в один документ - тогда нет бонуса при репликации.
Если я положу их раздельно - то нет консистентности. (Может быть она мне и не нужна, это надо подумать)

Есть ли хитрый трюк чтобы устроить консистентность при записи в разные документы? Может писать в каждом какую то версию а потом писать в базу сущность-версию (но, из-за неупорядоченности репликации это сложно перенести на другой комп консистентно)
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Не все умеют в ADT, да. Смотришь потом на эти все .empty(), .chain() и т. д...
Сложно искать людей, которые понимают такой код. Я не пишу ADT, монады - не хочу, чтоб меня уволили)))
ADT и монады это не сложно, но когда думаешь о том что нужно будет продублировать и замокать интерфейс fp-ts очень очень много раз чтобы разорвать эту зависимость, становится не хорошо, я бы лучше сменил язык
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
pragus
С dsl понятно, вопрос самого разбора. Чтобы быть чуть ближе к реальной задаче:

Есть матрёшка из пакета [Ethernet, Vlan, IP, UDP, DNS] и хочется быстро(на потоке в 40-50 млн пакетов на ядро) уметь понимать что внутри есть DNS с определенными флагами.
Сам разбор ни разу не функциональный. Классическая машина состояний, обернутая в функциональный интерфейс. ФП-идиоматичность часто конфликтует с быстродействием и это нужно учитывать, жестко разделяя код, критичный по времени выполнения и код, критичный по сложности/стоимости поддержки.
источник

SA

Sergey Alaev in Software Design/Architecture/Zen
Хороший пример ФП-парсера - это, внезапно, java.util.regex.Pattern. Входной DSL (строка) преобразуется в иммутабельное дерево (Pattern), которое интепретируется эффективным мутабельным парсером (Matcher)
источник