@Fsharp_chat

Страница 563 из 772
Friedrich
28.04.2018
15:06:56
Ну то есть оно, может, и более логично (синхронная часть таски всегда работает синхронно), но несколько неожиданно.

Vladimir
28.04.2018
15:08:43
task { dosmth() } |> Task.Run - так не работает

Friedrich
28.04.2018
15:08:55
Синхронная часть всегда работала синхронно и в c#
Нет, смотри вот два куска кода: let t1 = task { dumpThread "f1" } let t2 = System.Threading.Tasks.Task.Run(fun () -> dumpThread "TaskRun") Вернёт такое: f1: thread 1 // это главный тред, т.е. работаем синхронно TaskRun: thread 2 // работаем в пуле

Google
Friedrich
28.04.2018
15:10:05
task { dosmth() } |> Task.Run - так не работает
А это интересно, почему не хочет?

Friedrich
28.04.2018
15:10:54
Task Method() { dumpThread "f1" }
Да, тут ты прав, а я нет. Изначальное моё утверждение о том, что task {} аналогичен Task.Run, было неверным.

Roman
28.04.2018
15:12:12
task { dosmth() } |> Task.Run - так не работает
по идее и не должна же, нет?

Vladimir
28.04.2018
15:12:13
Roman
28.04.2018
15:12:22
а у task есть методы?

Friedrich
28.04.2018
15:12:49
не компилится)
Щя сделаем

Смотри, тут у тебя не работает потому, что там не та перегрузка

Ты хочешь, грубо говоря, F#-аналог такого C#-кода: Task.Run(() => f3())

Vladimir
28.04.2018
15:13:38
да, я уже нахимичил, но работает все равно как-то не так

Friedrich
28.04.2018
15:13:43
В F# это можно написать так: Task.Run<int>(fun () -> f3())

Google
Friedrich
28.04.2018
15:13:57
(аннотация типа обязательна, иначе он не компилится)

Vladimir
28.04.2018
15:14:11
let tempTask = task { Thread.Sleep(4000) } let goodTask = Task.Run(fun () -> tempTask :> Task)

Friedrich
28.04.2018
15:14:33
(если кто запамятовал, в C# реально есть перегрузка Run(Func<Task<T>>))

let tempTask = task { Thread.Sleep(4000) } let goodTask = Task.Run(fun () -> tempTask :> Task)
Ага, я то же самое записал. Это то, что тебе нужно — синхронная часть метода тоже отгружается в тредпул.

Friedrich
28.04.2018
15:15:45
Task.Run<int>(f3) ?
Ага, тоже работает ?

К сожалению, от аннотации никак не избавиться, но это уже красиво.

Roman
28.04.2018
15:16:12
слава бгу, я думал там они прсят как-то expression зачем-то

f3 |> Task.Run<int>

Friedrich
28.04.2018
15:17:09
let tempTask = task { Thread.Sleep(4000) } let goodTask = Task.Run(fun () -> tempTask :> Task)
Ой, нет, это не торт, сам понимаешь почему: синхронное начало таски выполняется в текущем треде

Надо именно с функцией

Или на асинках.

Щас покажу как.

Vladimir
28.04.2018
15:17:42
это я симулирую длинный метод

Friedrich
28.04.2018
15:17:54
это я симулирую длинный метод
Дак ты его в текущем треде симулируешь

Vladimir
28.04.2018
15:18:06
да, плохо получается)

Friedrich
28.04.2018
15:18:11
И потом в Task.Run ты передаёшь лямбду, которая возвращает уже завершённый таск

Vladimir
28.04.2018
15:20:33
все, получилось

let tempTask() = task { Thread.Sleep(4000) } let goodTask = Task.Run<unit>(tempTask)

Friedrich
28.04.2018
15:21:56
let doWork = async { dumpThread "inside" Thread.Sleep 5000 return 5000 } let poolizer (t : Async<'a>) = async { dumpThread "before" do! Async.SwitchToThreadPool() dumpThread "after" return! t } poolizer doWork |> Async.StartAsTask результат: before: thread 3 after: thread 4 inside: thread 4

Google
Friedrich
28.04.2018
15:22:50
Хотя на самом деле хватает уже Async.StartAsTask doWork

Evgeniy
28.04.2018
15:27:00
Привет.

Roman
28.04.2018
15:27:08
Привет.
Мы тебя заждались!

Evgeniy
28.04.2018
15:32:42
Вы же в курсе, что там @cartermp пишет стайл гайд для F#?

Он местами смешной, поэтому предлагаю поучаствовать в ревью. https://github.com/dotnet/docs/pull/4916

Friedrich
28.04.2018
15:36:26
Смешной или нет, а Филипп в итоге сделает хорошо, я верю :)

Evgeniy
28.04.2018
15:37:18
Да, он с инженерами в Jet много общался, в частности с Царьпалисом.

Friedrich
28.04.2018
15:37:38
Царьпалис и ревьювит же сейчас, да?

Evgeniy
28.04.2018
15:39:31
Угу.

Friedrich
28.04.2018
15:42:02
Ну ок, я им там начал заливать.

Evgeniy
28.04.2018
15:42:07
К другим новостям. Тут FSharpPlus 1.0.0 зарелизился, теперь-то F# точно готов к продакшену. ? https://twitter.com/ozzymcduff/status/990127173905403904

Friedrich
28.04.2018
15:42:29
?

(не использую эту библиотеку, но дело всё равно хорошее)

Evgeniy
28.04.2018
15:53:32
Им документации не хватает, правда. :)

Friedrich
28.04.2018
15:54:16
Им документации не хватает, правда. :)
Берёшь любой талмуд по теоркату — и вот тебе документация! Это же Спарта!

Evgeniy
28.04.2018
15:58:29
У них есть тесты какие-то. https://github.com/gusty/FSharpPlus/blob/master/tests/FSharpPlus.Tests/General.fs#L821-L841

</catch/> выглядит потешно. Ну, вы поняли, да, они определили операторы </ и />. Интересно, насколько использование F#+ увеличивает время компиляции... ?

Интересно, сложно прикрутить в fsi команду вроде #type , которая бы выдала нужную информацию?
Запили! Я думаю, это должно быть несложно, все редакторы справляют с отображением генерик типов. Как раз и suggestion есть зааппрувленный. https://github.com/fsharp/fslang-suggestions/issues/599

Sergey
28.04.2018
16:56:47
@nevoroman не пропусти https://twitter.com/FableCompiler/status/989455305066057728

Google
Evgeniy
28.04.2018
18:00:57
https://twitter.com/sergey_tihon/status/990285256300400640

Roman
29.04.2018
14:20:23
http://community.fsharp.org/user_groups
Visit Google Maps, Zoom to your location, and click on the map where your group most commonly meets. У нас это Москва и бар Брюссель чтоль?) @vshapenko

Friedrich
29.04.2018
14:24:24
Это перебор, бро. Вопрос-то по C#. С этим обсуждением перекатываемся в @DotNetRuChat.

Roman
29.04.2018
14:46:09
https://github.com/fsharp/community.fsharp.org/pull/86

Mr.
29.04.2018
19:05:19
Вопрос эстетический. Метод isDeterminated() определяет, вырожденная ли матрица, или нет. У вырожденной матрицы определитель равен нулю, но определитель имеет только квадратная матрица. Если методу isDeterminated() передать неквадратную матрицу, то он должен возвратить false, или сгенерировать исключение?

Mr.
29.04.2018
19:18:46
Гугл переводчик мне перевёл на isDeterminated. isSingular() - будет путаница с сингулярными значениями матрицы, сингулярным разложением и т п

Evgeniy
29.04.2018
19:19:45
Путаницы не будет, если пользоваться правильной терминологией.

https://twitter.com/SuaveIO/status/990676448506761217

Ну, допиливают немного. https://github.com/Microsoft/visualfsharp/pull/4798

Мне кажется, следующий релиз F# опять будет скромным, с мелкими фичами.

Evgeniy
30.04.2018
09:11:04
А анонимные рекорды? Или позже?
На последней посиделке в #langdesign Сайм был довольно скептичен по отношению к анонимным записям.

Но его, кажется, смогли переубедить.

Roman
30.04.2018
09:11:29
Скандалы интриги расследования

Google
Evgeniy
30.04.2018
09:13:08
Сейчас только три RFC реализованы для F#4.5 — анонимные записи, match! и вот этот про — DU и flexible types.

Я очень надеюсь на продолждение работы над SRTP. https://github.com/Microsoft/visualfsharp/pull/3582

Vlad
30.04.2018
09:29:09
Но его, кажется, смогли переубедить.
Там вроде кейс с даппером был же? Что он анонимные объекты как параметры принимает и это удобно

Evgeniy
30.04.2018
17:11:24
Merged
Мы теперь официальные? :)

Roman
30.04.2018
17:16:16
Friedrich
01.05.2018
14:53:26
Чуваки. Как отформатировать? type Point<'T> = Point of x : 'T * y : 'T * z : 'T vs type Point<'T> = Point of x:'T * y:'T * z:'T

Дед Пегас
01.05.2018
14:53:58
Я за первый, ИМХО.

Friedrich
01.05.2018
14:54:43
Его сложнее прочитать, хотя я тоже к нему склоняюсь.

Vladimir
01.05.2018
14:59:55
2

Anna
01.05.2018
15:00:38
Я тоже за 2

Evgeniy
01.05.2018
15:01:47
Friedrich
01.05.2018
15:02:14
У меня ортогональный вопрос — почему не record?
Деструктурирование намного симпатичнее выглядит, не?

Хотя можно активный шаблон присобачить.

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