Ayrat
и чтение как происходит, ты кидаешь буфер в ТСП и тебе оттуда выезжает заполненный?
Ayrat
а если буфер маленький?
Vasily
Не, я из тсп читаю блобы
Vasily
Ну типа сколько пришло
Vasily
А дальше с ними ебусь
Ayrat
понятно, эти блобы где висят? ты на выходе из тсп получаешь массивы на хипе или там (out byte[] array) ?
Ayrat
вот ты сделал let bytesReaded = tcp.ReadNext() ты далее чо делаешь:?
Vasily
Дальше посылаю в мейлбокс с состоянием
Vasily
У состояния есть длина и преалоцированный MemoryStream
Roman
Такс, а кто у нас со всякими мемори/спанами плотно работал?
Завтра посмотрю как у нас реализовано. Такая же задача была
Roman
Только у меня этот кусок ещё на сишарпе
Vasily
Ну я почти наговнякал на ArraySegment
Alexey
ArraySegment - странная штука...
Vasily
Ну вроде аллокаций не делает
Vasily
Мда, код получился страшноватеньким, но работает
Vasily
Короче, надо, чтобы кто-то его глянул
Vasily
Ща гист сделаю
Romɑn
Есть у нас онлайн бенчмарки для кода? типа вот две раелизаии ф-ции, вот входные данные для них. Проведи бенчмарк плз
Vasily
Онлайн нет, но можно на BenchmarkDotnet
Romɑn
Но шпашибо
Vasily
Expecto вроде имеет поддержку этого дела
Vasily
Кароч, набрасывайте https://gist.github.com/vshapenko/4b0b912d521ba7ac008f0d013432f807
Romɑn
Это не жабаскрипт!
Vasily
все плохо!
Это понятно
Romɑn
Кароч, набрасывайте https://gist.github.com/vshapenko/4b0b912d521ba7ac008f0d013432f807
type private DataMsg= |Raw of byte[] match msg with |Raw m->let seg=new ArraySegment<byte>(m) Можно же сразу
Romɑn
let! (Raw m) = inbox.Recieve()
Romɑn
минус вложенность
Vasily
минус вложенность
Беспокоит другое, если честно
Romɑn
Беспокоит другое, если честно
сорян не читал что беспокоит
Romɑn
что?
Vasily
Код громоздкий
Vasily
Надо упрощать
Romɑn
раззделяй и властвуй
Vasily
Переписал я код
Vasily
Теперь он занимает 20 строк
Ayrat
давай тот который на 20
Vasily
https://gist.github.com/vshapenko/4b0b912d521ba7ac008f0d013432f807
Vasily
Еще несколько строк можно убрать за счет |> по идее
Vasily
В общем, вышеприведенный код вкупе с Sockets.Pipelines.Unofficial нормально так читает данные из tcp
Vasily
Приятнее и читаемее
Вестимо. Отрефакторил ведь
Shub
скажите, зачем вы так пишете?
Shub
let empty (msg:ArraySegment<byte>)= let length=readInt msg.Offset msg.Array|>fst let stream=new MemoryStream(length+4) stream
Shub
не лучше ли так:
Shub
let empty (msg: ArraySegment<byte>) = let (length, _) = readInt msg.Offset msg.Array new MemoryStream(length + 4)
Hog
дебажить проще
Shub
дебажить проще
дедушка, зачем тебе дебажить?
Hog
я тебе просто один и ризонов даю
Vasily
Я вот, кстати, переписанный код просто запустил и он работал
Hog
про fst тоже думал
Hog
про декомпоз при лете
Shub
точка остановки покажет тебе все нужные детали, если что
Shub
еще меня беспокоят излишние аннотации
Shub
Сайм тебе Хидни-Милнера дал. выводи, выводи типы! нет, не хочу выводить типы, хочу аннотировать все вручную
Shub
компилятор может вам сам сгенерить файлы сигнатур
Vasily
Там не выводит
Shub
так может у вас программа не type sound?
Hog
там может вывести наверное, но только после того, как ты полчаса на красных червяков посмотришь
Hog
т.е. в процессе написания - типы помогают
Vasily
Я аннотации пишу только там, где необходимо
Hog
а потом - не мешают :)
Vasily
А дедушка Ниггурат чет возбудился. Вон, аж песок посыпался и сухие водоросли
Крылатый
Дедушка Нургл
Shub
А дедушка Ниггурат чет возбудился. Вон, аж песок посыпался и сухие водоросли
да я в общем-то и не успокаивался от самого создания времен
Shub
мне нужны жертвы
Shub
и еще я не сторонник стиля “f# as better c#”
Hog
F# is a worse OCaml ?
Vasily
F# is a worst haskell
Hog
F# is a worst haskell
ну не... нисогласинг
Hog
всё-таки хаскель из иной оперы
Vladislav
F# is a better Java
Hog
F# is a better Java
ещё один :)
Vladislav
Vladislav
Просвещаюсь
Vasily
Сайм держит на руках компилятор f#?
Anonymous
пацаны, а у кого проблемы с осанкой от работы? как решаете? кто-то стоя иногда работает за модными столами?