
Grigoriy
23.10.2018
00:45:05
И это уже всё пора во флудилку переносить :)
только я не умею. Утром придут знающие - почистят :)

Darth
23.10.2018
00:48:57
В моём тезисе была простота , новый функционал - новый класс, и его можно легко заинжектить куда нужно

Google

Grigoriy
23.10.2018
00:53:37
Надо файлик определенного вида обработать - всё там, вне зависимости от входов/выходов. Иного вида файлик - иной модуль с ф-циями.
и, кстати, тот пример с C# так же рубился
но это не С в солиде. С - это внутри одной ф-ции :)


Darth
23.10.2018
00:59:16
Похоже диалог немного зашёл в тупик:) думаю те, кто увидят столько текста от меня итак будут не в восторге, сорян, поэтому откланюсь...

Grigoriy
23.10.2018
00:59:34
счастливо :)

Roman
23.10.2018
03:09:47

Grigoriy
23.10.2018
03:11:08

Roman
23.10.2018
03:16:24

Roman
23.10.2018
03:18:12

Grigoriy
23.10.2018
03:20:46

Ayrat
23.10.2018
04:20:17

Google

Ayrat
23.10.2018
04:25:48
люди на однопоточном питоне пишут веб-сервисы, карл!
а вы тут меряете разницу в 2 инструкции от разных компиляторов которые всё одно в JIT попадут
это надо быть настолько не очень чтобы об этом думать
извини

Vladimir
23.10.2018
05:08:40
Я думаю там главный вопрос был - быстрее ли работает программа на фп, можно было дать простой ответ, что не быстрее)

Ayrat
23.10.2018
05:11:03
Почти)
Вот к слову гопак. Код написанный на гопаке - чистое фп. Унижает по скорости ооп поделие целой команды топовых программистов. Какой вывод можно сделать из этого кейса про скорость ФП вс ООП? Никаких

Roman
23.10.2018
05:26:11

Anatoly
23.10.2018
05:26:46

Roman
23.10.2018
05:26:57
спс

Grigoriy
23.10.2018
05:32:34
Чую, надо подосвоить :) но я ту простыню из асинксеков сделал женериком :))) просто и понятно :)))

Ayrat
23.10.2018
05:45:55

Grigoriy
23.10.2018
05:47:07

Vladimir
23.10.2018
06:14:14


Ayrat
23.10.2018
06:17:09
зато сам гопак это никак даже не ооп, а процедурное программироване с goto =) вопрос же не про либу, а наоборот, как такую либу написать чтобы было быстрее
Гопак написан с использованием правильных абстракций - стейт машины (да, через goto), CPS (через трамплины), linked list для очереди работ (с подменой ссылки на голову для скорости), n:m кооперативный шедулер. При этом там много эээ ООП? - сабтайпинг IVar :> Alt :> Job по словам самого автора даёт нетривиальное ускорение чтобы не аллоцировать лишнего.
Его делает быстрым не то что написан в каком-то конкретном стиле, а то что он написан пиздец как грамотно с применением всех стилей. И процедурное, и фп, и ооп
Автор страдал что по его прикидкам можно ускорить гопак ещё на 30%:
https://github.com/Hopac/Hopac/blob/master/Docs/Internals.md#could-something-like-hopac-be-even-faster

Vladimir
23.10.2018
06:23:35
Оки, принимается) Но все же тезис что чистое фп точно не быстрее остается в силе)

Google

Ayrat
23.10.2018
06:23:41
если что, текст по ссылке 3 года назад написан, так что может с текущими C# новшествами типа ref var может чо и можно сделать, но хз
Оки, принимается) Но все же тезис что чистое фп точно не быстрее остается в силе)
чистое ООП (или то что под ним понимается сейчас) так же будет умирать в перформансе
AbstractFactoryOfFactories factoryForFactories = FactoryLocator.CreateFactoryFactory(new FactoryFactorySettings(...));
IProductFactory productFactory = factoryForFactories.CreateProductFactory(new ProductFactorySettings(...));
IProduct product = productFactory.CreateProduct(new ProductSettings(...));
...
Я коненчо возвёл в абсолют, но мысль понятна.

Vladimir
23.10.2018
06:32:24
Этот код конечно так себе) Тут все фактори и сеттинги в единичном экземпляре должны быть, new не нужно писать, а продукт может шарить свой стейт с другими продуктами например. Так что перформанс не пострадает)

Ayrat
23.10.2018
06:33:24
нормально же общались!

Vladimir
23.10.2018
06:33:42
))

Ayrat
23.10.2018
06:54:52
чорт, надо спеку перечитать

Darth
23.10.2018
08:01:42

Ayrat
23.10.2018
08:04:04

Roman
23.10.2018
08:28:50

Ayrat
23.10.2018
08:52:13
Когда же?
Нескоро, но попытки уже есть
https://dotnext-moscow.ru/2018/msk/talks/6qxwwyq5yqo2megee6swke/

Anna
23.10.2018
09:01:14
LLVM же не починит асимптотику
И кто-то жаловался, что ML-подобное не очень с помощью LLVM компилить

Ayrat
23.10.2018
09:06:13
LLVM же не починит асимптотику
Если ты про внезапно превращение O(n) в O(1), то я могу показать случай когда может!
let veryLongFunction (seq: _ seq) =
for item in seq do () //nothing
42
я утрирую
мне кажется даже наш доморощенный оптимизатор сможет превратить эту функцию из O(n) в константный возврат 42, но это не точно

Anna
23.10.2018
09:07:55
Не, ну если код ничего не делает, то его грех не соптимизировать

Google

Vlad
23.10.2018
09:08:07
А на какой стадии моно ллвм использует?

Ayrat
23.10.2018
09:08:10
может там хитрый датафлоу анализ, баунд чеки, вся херня, и доказывается что стейт не меняется по факту, поэтому вырезаем целый модуль!

Anna
23.10.2018
09:09:08
Ну в общем случае если алгоритм написан неоптимально (скажем, квадрат где можно n log n), то оптимизатор не поможет, каким бы он ни был умным
в каких-то частных случаях может и поймёт что-то

Ayrat
23.10.2018
09:14:48

Anna
23.10.2018
09:18:31
И если теоретически что-то можно доказать и оптимизировать, это ещё не значит, что это можно прям взять и реализовать в компиляторе из жизни и для прода ?

Ayrat
23.10.2018
09:21:24

Roman
23.10.2018
12:04:27
Привет, ты тоже со странным именем

Сергей
23.10.2018
12:31:11

Ayrat
23.10.2018
12:54:29
А вы говорили фпарсек с гопаком упоролись по операторам
https://github.com/fsprojects/FSharpPlus/blob/1bf075391d76013eeaa2e9c837f66de3cacf35cb/src/FSharpPlus/Operators.fs#L751

Grigoriy
23.10.2018
12:54:57

Ayrat
23.10.2018
12:55:07
(=) <!> x <*> y
это если что определение оператора ( .=. )
¯\_(ツ)_/¯

Anna
23.10.2018
12:55:47

Сергей
23.10.2018
12:56:09

Ayrat
23.10.2018
12:56:11

Grigoriy
23.10.2018
12:56:12
А такой - (__!__)

Google

Anna
23.10.2018
12:56:33
Надо либу такую писать!

Ayrat
23.10.2018
12:56:38
А такой - (__!__)
тогда уж такой!
(__*__) - девственный оператор
(__o__) - слегка развальцованный
(__O__) - полный жопак

Grigoriy
23.10.2018
12:56:38
Вместо failwith конечно же :)
В жопаке

Ayrat
23.10.2018
12:57:24
да чиорт тебя дери
короче, авторы FSharpPlus упоролись
haskell wannabe
Но там есть плюсы.
Я обычно для своих структур определяю ручками моноид:
type Abc =
...
static member (+) (a,b) = ...
static member Zero = ....
Так вот F# плюс позволяет такие структуры без лишнего гемора сразу в Seq.sum засовывать!
Я-то раньше как плебей писал так
|> Seq.fold (+) Abc.Zero
а теперь можно так
|> Seq.sum
символов 10 мне сэкономили, черти. Это стоит того чтобы тащить эту либу! /s

Grigoriy
23.10.2018
14:08:26
Привет!

Roman
23.10.2018
14:22:40
Привет!