
Vasily
29.03.2018
19:56:30

Ivan
29.03.2018
19:56:36
Кстати если интересно, объясню как связан орлеанс, сериализация и мой интерес на практике.
На флете - 0 копирование

Vasily
29.03.2018
19:57:19
Ну как вариант, да

Google

Vasily
29.03.2018
19:57:53
В теории должно что- то вроде линз получиться для массивов

Evgeniy
29.03.2018
19:58:01

Vasily
29.03.2018
19:58:22
Ну хочется написать генерик же
А компилятор ругается

Ivan
29.03.2018
19:59:20
Просадка на сериализации:
нативный протокол Orleans - 10000 rps
Grpc + protobuf - 5000 rps
Один и тот же протокол. Сервер grpc in server orleans, без клиентского оверхида.

Vasily
29.03.2018
20:00:17
10000 rps тоже как- то маловато

Ivan
29.03.2018
20:00:18
Все на Immutable<>

Evgeniy
29.03.2018
20:00:25

Vasily
29.03.2018
20:01:00
Ну генерик функцию, которая принимает значение типа а,и возвращает енам типа б

Ivan
29.03.2018
20:01:11
На 2 процаx, клиент + сервер. Я по разнице на локале. Там еще докер под винду на 2 проца.

Evgeniy
29.03.2018
20:01:39

Vasily
29.03.2018
20:01:49
Она не генерик

Ivan
29.03.2018
20:02:10
Не по общей - так и на 50000 легко выходит. Больше не нагружали.

Google

Vasily
29.03.2018
20:02:56

Evgeniy
29.03.2018
20:03:19
@vshapenko Кажется, я начал понимать, какая задача.

Vasily
29.03.2018
20:05:47
Ну типа ’’’getenum<'a,'b> (d:'a):'b

Ivan
29.03.2018
20:05:54
Только что админ написал - на тройке 38 ядерных машин - порядка 2 миллионов rpc
10 Гигабит по сети - возможно дал бы больше

Vasily
29.03.2018
20:07:02

Ivan
29.03.2018
20:07:25
Не, у нас пишут плохо...

Evgeniy
29.03.2018
20:07:48
Ну типа ’’’getenum<'a,'b> (d:'a):'b
Смотри, EnumOfValue отлично работает, если прописать возвращаемый тип.
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 : uColor = EnumOfValue 2u
@vshapenko Или ты хочешь соответствие?
тип значения - тип енума

Vasily
29.03.2018
20:08:13
А насчёт языка для сериализации - имхо, самое сложное, написать язык для десериализации
Конкретно под каждый енам я уже написал
Теперь хочется поведение обобщить

Ivan
29.03.2018
20:09:09
Попробую. Выкаяу на гитхаб отпишусь. Писать буду на F#

Evgeniy
29.03.2018
20:09:14

Vasily
29.03.2018
20:09:47
На рекордах получается криво

Ivan
29.03.2018
20:10:07
Пармер и АСТ, а прцессинг все же пока нет нативной поддержки на C#
На интерфейсах и методах через Memory<> и Span<>

Google

Vasily
29.03.2018
20:12:02

Ivan
29.03.2018
20:12:32
И кодогенерация, возможно на тайп провайдерах

Vasily
29.03.2018
20:12:38
Вариант как сделать обратное преобразование не очень криво весьма интересен

Ivan
29.03.2018
20:12:58
Меня больше интересует прямое

Vasily
29.03.2018
20:13:07
Прямое легко
Эту задачу я уже решил

Ivan
29.03.2018
20:13:25
Оно дороже, как делать десериализацию, я представляю

Vasily
29.03.2018
20:14:04
Я не представляю, как описывать десериализации в определенные поля структуры данных

Ivan
29.03.2018
20:14:21
Хотелось бы потоковую, но не изобретается

Vasily
29.03.2018
20:14:43
Ну вот я тоже про потоковую ща говорю

Ivan
29.03.2018
20:15:33
А нее надо в поля. Надо в методы. Внизу просто буфер, метод знает смещение и читает. Пока самая главная проблема - UTF8String
Тут палка, что чтение не нужно делать потоковым. По моему мнению. А вот запись - никак не получается без 1 копирования
Так я могу взять из потока буфер и не освобождать, пока он мне нужен. Но чтобы записать, нужно место...

Evgeniy
29.03.2018
20:19:21
@vshapenko Подходит? Я ссылку поправил.

Vasily
29.03.2018
20:36:51

Evgeniy
29.03.2018
20:37:02
Да блин. :)

Vasily
29.03.2018
20:37:13
По факту опять на каждый енам преобразование

Evgeniy
29.03.2018
20:38:21

Google

Evgeniy
29.03.2018
20:38:38
Или мы ее берем из контекста, или жестко прописываем правила вывода.

Vlad
29.03.2018
20:42:27

Evgeniy
29.03.2018
20:43:01
Магия
Просто выбор правильной перегрузки.
Магия
Этой магии бы нормальный синтаксис.
Чтобы делать простенький статический диспатч по типу.

Roman
29.03.2018
20:51:09
он статический

Evgeniy
29.03.2018
20:52:58
Например, в стандартной библиотеке разрешен вот такой синтаксис.
https://github.com/Microsoft/visualfsharp/blob/master/src/fsharp/FSharp.Core/prim-types.fs#L3442-L3463
Сложно сказать, правда, что там конкретно можно, потому что документации нет.

Roman
29.03.2018
20:55:04
(# это же il инъекции вроде
или это <# ?

Evgeniy
29.03.2018
20:55:25
Да, это про IL.
Но я говорю про when после тела функции.

Roman
29.03.2018
20:57:11

Evgeniy
29.03.2018
20:58:42
Я подозреваю, что не неявно, а когда не получилось статически разрешить. Тогда вызывается вспомогательная функция для "динамического" сложения.

Artemy
29.03.2018
21:53:17
всмысле про биндинги
Типа импорт .d.ts облегчает работу? Или в Fable проще и вручную биндинги делать?

Дмитрий
29.03.2018
22:14:49
Не, у нас пишут плохо...
В юду на фишарпах пишут? Похоже, моего друга, что к вам пару месяцев назад устроился ждёт сюрприз

Google

Roman
29.03.2018
22:16:18

Artemy
29.03.2018
22:24:39
Вот возможно скоро попробую к Вебшарперу какой-нибудь простой биндинг сделать; заценю, каково оно.

Roman
29.03.2018
22:25:39

Artemy
29.03.2018
22:26:33
Ну мне пока видится, что .d.ts могут знатно сократить объём рутинной работы в случае сложных биндингов
Тут большое преимущество, похоже.

Roman
29.03.2018
22:27:55

Artemy
29.03.2018
22:27:58
А в случае генерации биндинга с помощью ts2fable оно прямо корректно всё транслирует или нужно обычно подправлять?

Roman
29.03.2018
22:28:13
Он транслирует так что работает
Дальше над этим можно писать обертки
Но к слову вебшарпера реализовал ddp из meteorjs, а на fable у меня не получилось meteorjs портировать
Но это скорее всего мое неумение тогда было, сейчас meteor js уже не нужен)
Кстати, я видел провайдер типов для graphql для fable(если не ошибаюсь) было бы интересно получить tp в js
https://github.com/fsprojects/FSharp.Data.GraphQL/blob/dev/README.md
https://www.npmjs.com/package/fable-providers-graphql
Для свагера было бы круто такое

Artemy
29.03.2018
22:33:35
Знаю, что в Вебшарпере тоже какие-то провайдеры есть из FSharp.Data

Roman
29.03.2018
22:34:11

??
30.03.2018
03:10:18

Klei
30.03.2018
03:18:01

??
30.03.2018
04:02:49

Pavel
30.03.2018
04:28:41