
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 написать в каноническом фп?

Evgeniy
21.05.2018
14:55:39

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

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
Или там обязательно json?

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

Oleg
21.05.2018
18:14:05

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

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

Roman
21.05.2018
18:33:56

Evgeniy
21.05.2018
18:34:12

Roman
21.05.2018
18:35:08

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

Roman
21.05.2018
18:37:04
Если правильно помню

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

Владислав
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