@Fsharp_chat

Страница 578 из 772
Roman
21.05.2018
10:14:54
hi?

Ni hao?

Vasily
21.05.2018
10:25:16
https://sharplab.io/#v2:DYLgZgzgNAJiDUAfALgTwA4FMAEBZTEEAhgOaYA8A5EQHwC8+hpOA9mNgBQCuAdgJbIAtDWoBKALAAoNFmwAFAE4sAxgQgsFHUXSnZgmZNgBGLAB7Y6eIn2AnTilWo0A6AMrIiC5BzC9sfHjthXWxQsPCIyKjo0P1DBUxlPRYWdGweC2wQmJzc6KIIVB5lAG9svIqKuIBCbABbSwC7ZwAlRMw+ADdMLXLK/ui6omRlAAt67AB3AXG+gfnwxEZiMmwFKA4FZRAAQULitvRgVABhUaIeHkxgKlpRYS3WzCPUTYlJBc+v77CE5C4FDxasAUmkAAxzH55AC+WQ+UP6INS2Ah8IR0Xe9UwdSMmAU2GQoz4EGcci4hg4phAAWQ2machYEGQOx4MEOxx8fi2wmWzE4vh4WmEplEUC2mLq2Nx+MJxNJ5I4qBATIUARIdLMpMZzNZ7NeArWyh5aj5nMF9xoqFF4qAA===

Примерно так

Google
Vladimir
21.05.2018
10:28:06
Да это же похоже на экзистенциальные типы, про которые недавно рассказывали) https://www.gresearch.co.uk/2018/04/05/introducing-crates

проблема не в мейлбоксе а в твоем типе Message

Vasily
21.05.2018
10:33:33
И как его написать правильно?

Vladimir
21.05.2018
10:34:07
в статье есть код, нужно специальный тип заюзать ObjectCrate

Ну или сделать OR- тип, IntMessage, StringMessage без дженерика

Vasily
21.05.2018
10:41:56
Ну вот судя по всему придется

Потому как с генериками оно заводиться не хочет ((((

Pavel
21.05.2018
10:43:22
https://sharplab.io/#v2:DYLgZgzgNAJiDUAfALgTwA4FMAEBZTEEAhgOaYA8A5EQHzYC82ieBxZ2A9mNgBQCuAOwCWyALQ1qASgCwAKGCZk2IQOAqcAIw4APHpIbY52Y3iJDgW7QAUAThwDGrDjYB0AZWREbyHkZP+AkzBBZQFLbHE/QOiY7AUlG0x7OI4OdGwBAyjYnMCiCFQBewBvbNzygPiAQl4AW2wQFkJSCmo6ACpsAEECooAlTHRgVABhAAsiAQFMYHJBEQi6Nv1GFUsXAcchADdMPTKKw9qiZHsx7HqAdxFzg8Py5nxm9hsoHht7EB7C+wGh0YmUxmc2ESnE2GW4g+G0Gw3eMlk9yR2ESyD4NgENWAqXSAAY7sj/ABfQyIwmVHHYfFkwkI0loLDYWwOJw2PT0Iy1TC1DSYGzYZBjIQQFxWPhKHjaEAqZCSeiWPSijgQZBdAQwP5w4KZD7iJ5sHA8bV6cTaSRQD50rk8vkCoUisU+VAgFU2FQkOUKyRKlVqjWw1BGkK6mj6lq8Y2ScSoc2WoA=

без понятия работает или нет

Vasily
21.05.2018
10:44:19
Не сработает, но трюк понятен

Получается несколько инстансов мейлбоксов

ПО одному на каждый тип

Мда, проблема-то серьезная, получается

Google
Vasily
21.05.2018
13:30:52
На самом деле я решаю проблему синхронизации чтения/записи данных из ssl stream

Проблема возникает, когда отрабатывают джобы, посылающие в канал сообщения и ждущие ответа

И как это нормально синхронизировать, не вполне понятно

Vladimir
21.05.2018
14:48:46


Подскажите, как это без ResizeArray написать в каноническом фп?

Friedrich
21.05.2018
14:58:52
Можно же на экспрешенах?

Evgeniy
21.05.2018
14:59:20
Да!

Friedrich
21.05.2018
14:59:21
Типа seq { yield claim1 yield claim2 if smth then yield claim3 }

Vladimir
21.05.2018
15:03:13
Ага, пасиб)

Vasily
21.05.2018
15:24:21
Хммм... заюзал мейлбокс для хранения состояния сессии, получилось весьма

Мутабельность без мутабельности

Очень круто

Завтра -таки прикручу обработку сообщений нормальную, т.к. сейчас стало понятно, как именно

Это сделать

Интересно, что получится, если скрестить мейлбокс с билдером

Oleg
21.05.2018
17:58:29
Смотрите что я накопал по Akka Persistance: https://bit.ly/2x9OlJ1. Этот F# сломался, все расходимся ?

А самое обидное что подходящих альтернативных сериализаторов похоже нет

Klei
21.05.2018
18:02:08
А какой тип у deser?

obj?

Google
Klei
21.05.2018
18:10:02
obj?
obj

Vagif
21.05.2018
18:11:15
Я помню, что Бартош как-то писал, что вообще не пользовался Json для сериализации persistence, а вместо этого бы взял Protobuf, поддерживающий versioning.

Roman
21.05.2018
18:12:26
Я не про сериализаторы, но про акторы

Vagif
21.05.2018
18:12:27
А в приведённом примере Microsoft.FSharplu.Json не может помочь?

Evgeniy
21.05.2018
18:12:28
Roman
21.05.2018
18:13:03
А ещё есть же hyper-как-то там
Бывший wire по моему

Или там обязательно json?

Evgeniy
21.05.2018
18:13:39
? https://github.com/gsomix/blog/issues/1

Evgeniy
21.05.2018
18:14:49
Но я не тестировал.

Oleg
21.05.2018
18:16:05
Спасибо за ссылки, на fspickler я бы попробовал. Но мне кажется в ньютонсофте ошибка всё-таки есть

Roman
21.05.2018
18:33:56
А в приведённом примере Microsoft.FSharplu.Json не может помочь?
Он сырой ещё. Иногда при обыкновенной сериализации DU где-то в недрах падает null reference. Причем даже на кейсе без внутренних полей

Roman
21.05.2018
18:35:08
Ишшуй завел?
Нет, я раздолбай. Завтра заведу точно

Evgeniy
21.05.2018
18:36:48
Нет ишшуя — нет проблемы!

Roman
21.05.2018
18:37:04
? https://github.com/gsomix/blog/issues/1
Chiron deprecated in favor fsharplu

Если правильно помню

Google
Vagif
21.05.2018
18:38:22
У нас не очень сложные структуры, но нас он не подводил.

Roman
21.05.2018
18:44:23
У нас не очень сложные структуры, но нас он не подводил.
Наигрывается крайне нестабильно. Я никакой закономерности не нашел

Klei
21.05.2018
18:47:45
Кто шарит в Akkling.TestKit, этот тест всегда падает, это баг или "фича"? testDefault <| fun tck -> tck.Sys.Scheduler.ScheduleTellOnce( System.TimeSpan.FromSeconds 1., typed tck.TestActor, 2) expectMsg tck 2 |> ignore

Evgeniy
21.05.2018
19:05:13
https://github.com/ionide/ionide-vscode-fsharp/pull/795 ?

Владислав
21.05.2018
21:27:29
Видел часто пишут свои типы поверх примитивов. Есть какой-то вариант чтобы в web api сразу биндилось на модель с такими типами?

Klei
21.05.2018
22:02:30
Кто шарит в Akkling.TestKit, этот тест всегда падает, это баг или "фича"? testDefault <| fun tck -> tck.Sys.Scheduler.ScheduleTellOnce( System.TimeSpan.FromSeconds 1., typed tck.TestActor, 2) expectMsg tck 2 |> ignore
Оказывается там встроен хитрый IScheduler, и это таки фича. testDefault <| fun tck -> tck.Sys.Scheduler.ScheduleTellOnce( System.TimeSpan.FromSeconds 1., typed tck.TestActor, 2) System.TimeSpan.FromSeconds 3. |> (tck.Sys.Scheduler :?> Akka.TestKit.TestScheduler).Advance expectMsg tck 2 |> ignore

Владислав
21.05.2018
22:15:42
Klei
21.05.2018
22:22:33
Я в Giraffe ручками биндю, пробовал сериализаторы переписывать, но как только сталкиваешься с необходимостью вразумительной ошибки теряешь ясность происходящего и возвращаешься к ручному мапу.

Alex
22.05.2018
06:18:12
list |> List.sortBy(fun (e:int) -> e) |> List.sumBy (fun (i:int) -> Convert.ToUInt64( i))

вот такой код в dotnet core 2 медленнее linq-версии в C# в 2 раза, а императивной(на голом цикле) в 4. Возможна ли оптимизация?

Pavel
22.05.2018
06:20:22
может, использовать Seq, а не List?

Alex
22.05.2018
06:21:14
сейчас проверю

никакой разницы

Pavel
22.05.2018
06:24:19
а как бенчмаркал?

Alex
22.05.2018
06:24:45
open System open System.Diagnostics open System.Numerics let rnd = Random((int) DateTime.Now.Ticks &&& 0x0000FFFF) let list = Seq.init 10_000_000 (fun i -> rnd.Next()) let watch = Stopwatch.StartNew() let loop () = watch.Restart() let sorted = list |> Seq.sortBy(fun (e:int) -> e) |> Seq.sumBy (fun (i:int) -> Convert.ToUInt64( i)) printfn "%A \t %A" watch.Elapsed sorted for i in 1..10 do loop ()

var rnd = new Random((int) DateTime.Now.Ticks & 0x0000FFFF); var list = new List<int?); for (int i = 0; i < 10_000_000; i++) list.Add(rnd.Next()); var watch = Stopwatch.StartNew(); for (int i = 0; i < 10; i++) { watch.Restart(); var copy = new List<int?list); copy.Sort(); ulong sum = 0; for(int j = 0; j < copy.Count;j++) sum += (ulong) copy[j]; Console.WriteLine($"{watch.Elapsed} \t {sum}"); }

Pavel
22.05.2018
06:29:07
а если создать не Seq.init, а List.init?

Seq.init, вроде бы, внутри создаёт ленивые объекты

Alex
22.05.2018
06:34:40
так маленько пошустрей

Google
Pavel
22.05.2018
06:35:58
больше нет идей =D

Evgeniy
22.05.2018
06:36:01
Alex Нужно понимать, что list в F# и List<'T> в BCL (или ResizeArray<'T> в F#) — это разные структуры данных, некорректно их сравнивать.

Klei
22.05.2018
06:36:09
1. Зачем сортировка перед суммой? Она же только ресурсы отжирает. 2. Seq, List и т.п. всяко будут медленнее ResizeArray.Sort(), т.к. в последнем используется сортировка на внутреннем массиве, а не в новой структуре произвольной длины.

Alex
22.05.2018
06:37:30
всяко будут медленнее ResizeArray.Sort() - вопрос в том как сделать в F# также или без вариантов?

Evgeniy
22.05.2018
06:38:07
Pavel
22.05.2018
06:38:49
только чаще всего перфоманс в таких местах не очень-то и нужен :)

Klei
22.05.2018
06:41:01
let arr = Array.init 20 (fun _ -> rnd.Next()) Array.sortInPlace arr ...

Pavel
22.05.2018
08:23:00
для начала не мешало бы сравнивать одинаковые наборы данных

let list = Seq.init 10_000_000 (fun i -> rnd.Next()) |> Seq.toArray + let sorted = list |> Array.sortBy(fun (e:int) -> e) |> Array.sumBy (fun (i:int) -> Convert.ToUInt64( i)) медленее на 30% чем core

ну и sort разный. если в фш юзать безпараметров как в c# то скорость еще подрастет

Vasily
22.05.2018
10:19:12
Кстати, еще один способ нашел создать бесконечный seq

?‍?
22.05.2018
10:23:26
Vasily
22.05.2018
10:57:15
Seq.initInfinite

Roman
22.05.2018
10:59:02

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