@Fsharp_chat

Страница 614 из 772
Roman
25.06.2018
10:16:10
Но аннотации это ужасно

Evgeniy
25.06.2018
10:17:40
Страшненькие? :)

Ayrat
25.06.2018
10:18:10
попахивает джавой @NotNull

Evgeniy
25.06.2018
10:18:24
Прототип тайпклассов для F# тоже с аннотациями.

Google
Evgeniy
25.06.2018
10:18:32
Ну, и всякие [<Struct>].

Vlad
25.06.2018
10:19:20
Страшненькие? :)
Аоп вносит неясность

Ayrat
25.06.2018
10:19:41
Ну, это не от хорошей жизни. Это компромисы. А в случае рекорд тайпов аннотация struct норм, т.к. она всего лишь изменяет способ аллокации, а не поведение

т.е. это как AggresiveInlining

на код никак не сказывается

Roman
25.06.2018
10:20:29
т.е. это как AggresiveInlining
вот с рекордами ок, я не против. ПРосто Fable в итоге изучается как отдельный язык

Ayrat
25.06.2018
10:20:51
Это в C# struct меняет поведение, т.к. там сразу появляется non null, поля инициализируются и прочая тема. Помимо аллокации на стеке

Evgeniy
25.06.2018
10:20:54
Roman
25.06.2018
10:20:57
И типы нельзя переиспользовать, часто из-за аннотаций

Ayrat
25.06.2018
10:23:49
Я вот считаю что C# в этом плане плоховат. Он смешивает бизнесовые, логические вещи (record types, non-nullability) с инфраструктурными (аллокация на стеке/в куче). Ну и эта фигня в F# проникает, да Понятно что сейчас разделять никто не будет, но видимо 20 лет назад это казалось хорошей идеей

Ayrat
25.06.2018
10:27:02
А как разделять?
ну логические вещи типа non-nullable/nullable ключевым словом например. Компилятор будет орать что ты не инициализировал все поля в Immutable классе, или ещё чо А способ аллокации так: 1) если аллоцируется через stackalloc -> на стаке 2) если есть заданная аннтоция, следуем ей 3) всё остальное по дефолту на куче

Google
Igor
25.06.2018
10:42:29
вот с рекордами ок, я не против. ПРосто Fable в итоге изучается как отдельный язык
Кажись скоро будет как в хаскеле, разные фичи-расширения языка под флажками

Ayrat
25.06.2018
12:54:39
https://www.reddit.com/r/ProgrammerHumor/comments/8tlqo9/javascript_is_getting_real_tired_of_your_jokes/ "C# is a dull language for corporate schmucks. He takes advantage of his sister F# and then hides her in the basement."

Pavel
25.06.2018
13:16:43
да, тоже сегодня улыбноло это про C# ))

Evgeniy
25.06.2018
13:30:46
https://twitter.com/demystifyfp/status/1011229606379061248

HOPAC!!!1

Vlad
25.06.2018
13:32:16
Ayrat
25.06.2018
13:32:26
танцуем, сегодня мы с тобой танцуем (гопак)

Evgeniy
25.06.2018
13:32:45
no
Там хорошая серия постов.

Vlad
25.06.2018
13:33:44
Там хорошая серия постов.
а юз кейсы для него какие?

Ayrat
25.06.2018
13:33:45
Да и гопак в целом ничо. После унылых асинков, к которым даже map надо руками прикручивать так вообще огонь

Ayrat
25.06.2018
13:34:09
haf вообще мечтал hopac дефолтной асинхронной либой в F# сделать. Но думаю не сложится у него с этим)

Vasily
25.06.2018
13:39:09
Joinads!!!!!

Ayrat
25.06.2018
13:39:26
даже у них мало шансов по-моему

Vasily
25.06.2018
13:44:03
Мне понравился подход сам

А учитывая, что пейпер писали Петричек с Саймом, все ок

Evgeniy
25.06.2018
13:45:02
task

Vlad
25.06.2018
13:45:12
Google
Ayrat
25.06.2018
13:46:22
task
https://vaskir.blogspot.com/2015/01/parallel-reduce-hopac-vs-asyncs-vs-tasks.html

Evgeniy
25.06.2018
13:48:01
Ага.

Я лишь про то, что таск будет в стандартной либе.

Ayrat
25.06.2018
13:48:37
А, эт да. Давно пора

Roman
25.06.2018
13:49:52
Я лишь про то, что таск будет в стандартной либе.
прям будет? Это где такое сказано?

Ayrat
25.06.2018
13:50:37
Я кстати толком понял как тасковая стейт машина работает отсюда https://github.com/rspeele/TaskBuilder.fs/blob/master/TaskBuilder.fs В C# сырцах там размазано по десятку классов с кучей воды. F# код хоть и не 100% повторяет, но мысль понять можно

прям будет? Это где такое сказано?
я где-то в пропозалах на гитхабе видел

Evgeniy
25.06.2018
13:51:37
прям будет? Это где такое сказано?
https://github.com/fsharp/fslang-suggestions/issues/581#issuecomment-344927068

Vasily
25.06.2018
14:56:19
Немного странный вопрос. Могу ли я объявить event.Publish в модуле с целью дальнейших Observable.subscribe?

Вопрос снимается, таки можно

Ayrat
25.06.2018
16:12:32
Я вот понял что мне не нравится засовывать юнит в конструктор: Class(()) Выглядит ужасно. Что можно сделать?

Vasily
25.06.2018
16:13:09
Не засовывать его туда

Ayrat
25.06.2018
16:13:30
Допустим. А если надо всё же присунуть, то?..

Vasily
25.06.2018
16:13:35
Зачем он там?

Сайд эффекты?

Ayrat
25.06.2018
16:14:43
Ну всякие ситуации бывают. Мне надо соорудить в гопачке промиз, который всегда выполняется. что-то типа Alt.always, но промиз Promise() возвращает промиз который никогда не выполнится, это пустой промиз, ок А вот Promise(()) как раз то что надо

Promise 42 тоже всегда выполняется, но будет выглядит тупо

Vasily
25.06.2018
16:16:04
А зачем тебе такой промис?

Я почему вопросы такие задаю, потому что с трудом могу представить такую ситуацию

Google
Vasily
25.06.2018
16:19:18
Когда это потребуется

Ayrat
25.06.2018
16:20:43
У меня там такое в хранилище ищется файлик. Если он есть, то его выкачиваем, мемоизим (переиспользуется, поэтому промиз). Если его нет, запускаем тяжкую логику его сборки, сайд эффектом (который надо ОБЯЗАТЕЛЬНО дождаться) заливаем в хранилище. соответственно остальная часть логики принимает два промиза - промиз на файлик (он будет выкачан из хранилища, или собран заново) и промиз сайд эффекта (это тот самый Promise(()) ), т.к. мы можем очень быстро закончить программу, а заливки надо дождаться асинхронно. Промиз на сайд эффект тут затем чтобы два раза заливка не пошла

Надеюсь понятно объяснил

промиз сайд эффекта тоже может быть в двух вариантах - либо это тяжкий сайд эффект аплоада, или пустой промиз, который всегда выполняется (если мы файл нашли, не собирали его заново и заливать его собсно не надо)

Vasily
25.06.2018
16:24:41
Что мешает написать две функции аплода и передавать в промиз одну из них?

Ayrat
25.06.2018
16:25:44
Оборачивать функцию в промиз это слишком ФП, ща попробую обмыслить

Vasily
25.06.2018
16:29:29
Промиз скорее про способ исполнения кода, чем про воркфлоу,кмк

Ну и неясно, почему аплоад сайд эффектом

И нельзя ли завернуть в промиз функцию аплода, которая как раз проверяет мемоизацию и подгружает файл, если надо

Ayrat
25.06.2018
16:31:31
В гопачке промиз - это способ мемоизить джобы, которые как и F# асинки являются генераторами, т.е. будут каждый раз заново запускаться. А у меня тяжёлый IO, который не хочется гонять два раза если двум функциям понадобятся одни и те же данные.

Vasily
25.06.2018
16:31:59
Дык разрули его внутри функции

Ayrat
25.06.2018
16:32:33
Я понимаю, типа разбиндить промиз в нормальную переменную, но всё не так просто когда у тебя десятки этих промизов)))

проще не разворачивать

Не поверишь, нашёл применение аппликативному функтору в продакшн коде Всё через промизы/джобы. Пишешь обычные функции (без промизов и джобов). Через инфиксный apply закидываешь промизы в функцию (как в nodeJs)

Vasily
25.06.2018
16:34:02
Имеет смысл подумать над укрупнением блоков, которые заворачиваются в промисы,имхо

Ayrat
25.06.2018
16:34:57
Ну и неясно, почему аплоад сайд эффектом
я оговорился. Это не то чтобы сайд эффект, а это важный эффект, который надо дождаться, но не синхронно. Т.е. джойн сделать основного куска говнокода и этого аплоада в конце программы

Vasily
25.06.2018
16:35:52
А,два разных потока событий

Типа waitall?

Ayrat
25.06.2018
16:36:20
Типа да

Vasily
25.06.2018
16:36:54
Ну просто не добавляй промис загрузки, если нет необходимости

Google
Vasily
25.06.2018
16:37:21
Или оно так не работает?

Ayrat
25.06.2018
16:38:10
Т.е. основной кусок кода такой - получи как нибудь важные данные (из хранилища или собери заново) -> (если получены заново, начинай заливать в хранилище, но асинхронно) -> используй важные данные и собери ещё более важные данные -> убедись что залит как основной результат, так и запущенный (возможно) ранее

Ну просто не добавляй промис загрузки, если нет необходимости
Возвращаясь к изначальному вопросу. Если заливка не требуется, я для промиза заливки создаю Promise(()), который нифига не делает)

и вот мне не нравится синтаксис!

Vasily
25.06.2018
16:39:17
Зачем создавать, когда можно не создавать!

А по вопросу

let p f = Promise(f)

Ayrat
25.06.2018
16:42:02
Зачем создавать, когда можно не создавать!
Если у меня есть условный if который делит контрол-флоу на части (надо собирать заново и заливать) и (не надо собирать заново), то если я в первом куске кода запускаю джоб и не получу какой-нибудь хендл на него (ну типа таск/асинк/ и т.п), то в конце программы я не смогу его повейтить чтобы убедиться что он залился. Он просто может очень долго заливаться, дольше чем остальная программа выполняется, соответственно тред умрёт и заливка сдохнет

Vasily
25.06.2018
16:42:34
Ну выглядит странно, если честно

Ayrat
25.06.2018
16:42:42
т.е. условные оба бранча этого ифа должны возвращать какой-то хендл на заливку

или полный или заглушку.

Vasily
25.06.2018
16:47:19
Тааак

Ayrat
25.06.2018
16:47:38
Бля, нарисовал)

Vasily
25.06.2018
16:49:15
Так вот

В нижней ветке квадратик лишний

Ayrat
25.06.2018
16:50:08
там один квадратик :D

и прям он лишний?

Просто т.к. это F#, то типы верхей и нижней ветки должны сходиться. В данном случае в крайний правый терминирующий квадратик должно прилетать одинаковое что сверху, что снизу

Vasily
25.06.2018
16:52:14
Массив состояний ожидания

Все, пошёл тренироваться

Ayrat
25.06.2018
16:52:44
ООПешечкой пахнуло :D

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