
Roman
03.10.2018
06:26:24

Ayrat
03.10.2018
09:14:05
Не нашёл в спеке объяснения вот такой записи
let a = struct (2,3)
Т.е. мне понятно что она делает, но непонятно можно ли её ещё к чему пришпандорить.

Vlad
03.10.2018
09:49:12

Vasily
03.10.2018
09:49:23
Value struct создаёт?

Google

Ayrat
03.10.2018
09:49:32
Value struct создаёт?
точнее обычный
let a = 1,2
создаёт на хипе объект Tuple<int,int>
на C# это
var a = new Tuple<int,int>(1,2);
а вот
let a = struct (1,2)
создаёт ValueTuple
на C# это же
var a = (1,2)
А в fslang suggestions есть?
нашёл такое, но оно ничего не объясняет
https://github.com/fsharp/fslang-design/blob/master/FSharp-4.1b/FS-1046-consistent-tuple-types.md
всё, нашёл
https://github.com/fsharp/fslang-design/blob/master/FSharp-4.1/FS-1006-struct-tuples.md
Как всегда костыли из-за C#!!11

Vlad
03.10.2018
09:56:54

Ayrat
03.10.2018
09:57:55
Ну так-то до этого стракт туплей не было
Ну скажем так, в F# тупли давно были, но свои. Потом их привели к виду как в C# (когда ещё они не были частью либы и их надо было явно нугетом подключать), а потом C# сделал ход конём и поменял обычные тупли на StructTuple
свои были тупли потому что других не было вообще
Ну ладно, с этим можно жить. Но я бы предпочёл стракты по умолчанию, наверное

Alexey
03.10.2018
10:00:27
хммм... функциональщик, думающий об оптимизациях производительности и использовании кучи?
я раньше думал что так не бывает

Vasily
03.10.2018
10:03:39
Бывает

Google

Vasily
03.10.2018
10:03:56
Но это следующий этап

Ayrat
03.10.2018
10:25:38

Roman
03.10.2018
11:16:14

Ayrat
03.10.2018
11:16:38

Roman
03.10.2018
11:17:08
Таки да.
"Но не гопак!" - выскакивает из-за угла Айрат)

Ayrat
03.10.2018
11:17:14
Я пытался сделать ещё лучше и протащить спан между асинками в том же треде через контекст сихронизации и поинтеры. Неудача меня постигла

Roman
03.10.2018
11:17:29

Ayrat
03.10.2018
11:17:57

Roman
03.10.2018
11:17:59
Но вопрос тебе на засыпку.

Ayrat
03.10.2018
11:18:04
всё было так хорошо

Roman
03.10.2018
11:18:15
А что будет со стек-фреймом, когда твой тред другой таск возьмёт?)

Ayrat
03.10.2018
11:18:23

Roman
03.10.2018
11:18:29
Конинюэйшон другого таска выполнять
хе-хе)

Ayrat
03.10.2018
11:19:18
короче да. Как только мы выполняем асинк байндинг и создаём трамплин или отдаём континуейшн, метод-то заканчивается и твой спан (в текущим стекфрейме) уходит в унитаз
и хоть поинтер валидный и стек на том же треде, там уже будут рандомные данные

Vasily
03.10.2018
11:20:05
Шо как бы логично

Ayrat
03.10.2018
11:20:16
Ну как бы да. Но мне по началу так не казалось

Vasily
03.10.2018
11:20:26
С другой стороны, если использовать mvar...

Roman
03.10.2018
11:20:28
Можно конечно свой шедулер написать, выделить память офхип и прокидывать её в каждую таску, в итоге получим что-то типа стекаллока, но менеджмент памяти целиком в руках шедулера.

Google

Ayrat
03.10.2018
11:20:37
Типа, камон. Я же свичнулся в тот же тред. Вот мой поинтер, отдай мне падла данные на стеке

Vasily
03.10.2018
11:21:43
Звучит не очень

Roman
03.10.2018
11:21:54

Vasily
03.10.2018
11:21:59
Отзвуки тредлокал

Anna
03.10.2018
11:23:28
Вы stackful корутины что ли хотите?

Ayrat
03.10.2018
11:24:26
Да, стекфрейм пропал. Тут ещё момент с хвостовой рекурсией. Надо сделать тред, который вызовет функцию в стекфрейме которой объявить спан. далее эта функция вызовет хвостато рекурсивную асинхронную функцию которая никогда не вернёт.
Вся соль этой хвостато рекурсивной функции в том что она будет ждать инвоков в неё но будет иметь доступ к стекфрейму выше и соответственно к спану через поинтер.
Победа? победа. Зачем это нужно? Хз

Roman
03.10.2018
11:26:38
Ну и плюс твоих стекаллок-кусков будет по количеству тредов.

Ayrat
03.10.2018
11:27:33
сделать сразу мегабайт 50
:D

Roman
03.10.2018
11:27:43

Ayrat
03.10.2018
11:28:10
По сравнению с жавой никто и не заметит!
не, у нас маты можно. Не все одобряют, но можно

Roman
03.10.2018
11:29:38
По сравнению с жавой никто и не заметит!
Не, вариант с шудулером и офхип памятью круче - ты там можешь под каждую таску аллоцировать буфер. Более того, если таска/джоба холодная, то и аллоцировать не надо. А если она отработала/отменилась/упала, то её буфер почистить и дать кому-то другому!

Ayrat
03.10.2018
11:30:24

Roman
03.10.2018
11:30:55
Но это надо запинить кусок памяти и не давать гц что-либо делать с ним.

Google

Ayrat
03.10.2018
11:32:15
https://hopac.github.io/Hopac/Hopac.html#dec:module%20Hopac.Scheduler
Можно даже сразу создавать шедулер с воркерами у которых стак по 20мб и всё там крутить)))

Alexey
03.10.2018
11:55:43
20 миллибайт? О_о

Bonart
03.10.2018
12:01:43

Ayrat
03.10.2018
12:01:58
нормально же общались

Bonart
03.10.2018
12:02:34

Roman
03.10.2018
16:17:22
https://habr.com/post/424895/
Уже обсуждали?

Grigoriy
03.10.2018
16:18:32
Невыразимыми...

Roman
03.10.2018
16:19:20

Grigoriy
03.10.2018
16:19:34
я так понимаю, что эта статья - часть его книжки по DDD
все верно)
я бы просто написал - Как избавиться от некорректных состояний
ну что это за слово такое...

Roman
03.10.2018
16:22:01

Grigoriy
03.10.2018
16:22:04
ты можешь сходу сказать - какая это часть речи? :)

Roman
03.10.2018
16:22:20
прилагательное

Grigoriy
03.10.2018
16:23:00
угу
но слово всё равно - ужасное :)
а книжка - хорошая

Klei
03.10.2018
16:29:57
Кто админит F# news?

Google

Grigoriy
03.10.2018
16:30:50
Вот что меня беспокоило ) в русском - невыразимый - то, что нельзя передать словами. И надо 3 раза заголовок перечитать... ну, по крайней мере мне :)

Petr
03.10.2018
16:38:35
Тут есть кто?

Grigoriy
03.10.2018
16:38:54

Petr
03.10.2018
16:38:56
Все привет, мне нужна помощь по F#
Всем(
*
Сможете помочь начинающему программеру на F#?