@Fsharp_chat

Страница 751 из 772
Friedrich
10.10.2018
17:47:34
Именно вот так, Y/7ОР0tO.

Ayrat
10.10.2018
17:47:41
Ayrat
10.10.2018
17:47:51
Так оно всю жизнь можно было

Google
Friedrich
10.10.2018
17:47:55
стой, это ж то же самое
Ну, тут имена есть.

Так оно всю жизнь можно было
Я про это всю жизнь не знал

Ты смотри, там в тупле именуются компоненты

Собственно, ещё столько же буду про это не знать, потому что больше нигде не пригодилось :)

Andrew
10.10.2018
17:48:49
https://github.com/ForNeVeR/Tracktor/blob/363a7eeb469a933e92b8cd1d8ae4355f3a197c71/Tracktor.Contracts/ITracktorServiceCallback.fs#L7
а вот если параметр имеет свою сигнатуру - то нельзя. проблемы какие-то у компилятора. попробуй мой пример, если есть F# ide под рукой

Grigoriy
10.10.2018
17:48:52
Ты смотри, там в тупле именуются компоненты
а их чо - по имени можно доставать?

Friedrich
10.10.2018
17:48:56
И, кажись, там нельзя расставить скобочки, чтобы было менее упорото

а их чо - по имени можно доставать?
Рефлекшен знает имена аргументов

А криво написанный рефлекшен очень удивляется, если их нету.

Grigoriy
10.10.2018
17:49:47
а... т.е. просто так без декомпозиции всё равно не достать?

Friedrich
10.10.2018
17:49:49
WCF потом по этим колбэковым интерфейсам в рантайме чего-то кодегенил у меня, поэтому это вдруг стало важно.

а... т.е. просто так без декомпозиции всё равно не достать?
Не достать. Никакой практической пользы от этого нету в нормальной ситуации

По именам можно будет доставать из новых анонимных структур, которые одно время допиливали.

Google
Anna
10.10.2018
17:56:39
Никогда не мог их различить, увы :(
я однажды запомнила, а потом опять забыла и стала путать

Friedrich
10.10.2018
17:56:55
https://stackoverflow.com/questions/36165981/is-there-a-way-to-specify-named-arguments-for-a-function-in-an-f-constructor вот на SO чувачок спросил похожую вещь, ему сказали, что нельзя.

Ayrat
10.10.2018
18:00:31
Ты смотри, там в тупле именуются компоненты
подразумевалось, что вот так type IService = abstract member StartDownload: uri: string -> dest: string -> progressCb: (param1: int64 * param2: int64 -> unit) -> completeCb: (unit -> unit) -> unit сделать нельзя

Friedrich
10.10.2018
18:00:37
Ну и вообще-то непонятно, как это будет работать

Там же в типе делегат

progressCb: FSharpFunc<int64, int64, uint> – ну вот куда в это определение делегата ты присунешь аргументы?

Ayrat
10.10.2018
18:01:19
Там же в типе делегат
так сам интерфейс в примере состоит из одной большой функции

Friedrich
10.10.2018
18:01:32
Ayrat
10.10.2018
18:01:39
обмазать всё атрибутами в рантайме

Friedrich
10.10.2018
18:01:49
известно куда! в метаданные!
Метаданные ради метаданных?

У нас метаданные делаются даже ещё более жоско, чем в C#.

Я же рассказывал: львиная доля метаданных у нас не в атрибутах, а в отдельном волшебном блобе, который у сборки запихивается в ресурсы!

Google
Nick
10.10.2018
20:21:56
Привет :)

прогаю на питоне, прознал про ваш чатик, решил почитать про код немножко

Grigoriy
10.10.2018
20:23:40
прогаю на питоне, прознал про ваш чатик, решил почитать про код немножко
да у нас тут питон тоже иногда проскакивает :) но в негативном контексте

Nick
10.10.2018
20:23:58
ну эй, норм язык)

Grigoriy
10.10.2018
20:24:27
да никто не спорит, но чатик про F# )

Nick
10.10.2018
20:25:02
я не навязываюсь, я хотел про F# и почитать

Ayrat
10.10.2018
20:25:37
Grigoriy
10.10.2018
20:26:17
https://fsharpforfunandprofit.com/

вот - про почитать :)

ну, а если вопросы - то задавай конечно :)

Nick
10.10.2018
20:30:39
спасибо!

вопросы по мере поступления)

Grigoriy
10.10.2018
22:42:35
Привет!

Ayrat получилось у меня разбить +- равномерно на N кусочков но дальше было не понтяно что - либо вкрячивать в каждый RunSync - тогда это ничем не лучше PSeq, либо в каждый кусок Async.Parallel, тогда это [наверное] ничем не лучше простого изничально распараллеливания. Попробовал ща самый примитивный Array.map (... async { }) |> Async.Parallel... И ОНО ПРОСТО ЗАЛЕТАЛО! 18-20 секунд вместо исходных 4х минут (ну и остальных). Скорее всего это связано с тем, что нашим офисом сейчас никто не пользуется... поэкспериментирую в рабочее время! спасибо за идеи!

Ayrat
11.10.2018
03:44:58
Ayrat получилось у меня разбить +- равномерно на N кусочков но дальше было не понтяно что - либо вкрячивать в каждый RunSync - тогда это ничем не лучше PSeq, либо в каждый кусок Async.Parallel, тогда это [наверное] ничем не лучше простого изничально распараллеливания. Попробовал ща самый примитивный Array.map (... async { }) |> Async.Parallel... И ОНО ПРОСТО ЗАЛЕТАЛО! 18-20 секунд вместо исходных 4х минут (ну и остальных). Скорее всего это связано с тем, что нашим офисом сейчас никто не пользуется... поэкспериментирую в рабочее время! спасибо за идеи!
Это связано с тем что у тебя ио работа, а не цпу. Так делать не стоит даже в ио, т.к. запустив в 1000 потоков аплоад 1000 файлов ты скушаешь весь тредпул, что-то отвалится по таймауту, придется ретраить все сразу. Даже в ио надо регулировать уровень параллелизма просто он не связан с количеством ядер. Например у меня в даталужу доступно 28 коннектов одновременных с одного токена. Все прочие будут получать рефьюз коннекшн. Теперь про тред старвейшн. В случае гопака я бы мог даже миллионный массив на пофиг кинуть в Job.conCollect (аналог Async.Parallel) потому что гопак молодец и не юзает тредпул, он грамотно расшедулит с максимальной утилизацией цпу эту тыщу джобов по 4м (на 4х ядерном цпу) тредам. С Асинк.Параллел ты рискуешь увидеть тыкву в конце.

Grigoriy
11.10.2018
03:54:53
Да я жопой чувствую, что это не кошерно. Но не могу придумать, как список асинков каждой группе запустить :(

Завтра на свежую голову ещё подумаю

Google
Grigoriy
11.10.2018
04:39:08
да, но в каждой группе - тоже надо что-то впендюрить - иначе тип результата не совпадает

или я что-то не допонимаю

Pavel
11.10.2018
04:53:27
/help@FailsBot

FailsBot
11.10.2018
04:53:27
/help@FailsBot
USAGE: /help - prints this message; /vzhuh [message] - do vzhuh; /start - info about bot.

Pavel
11.10.2018
05:05:08
Ayrat можешь за гопак пояснить?

Ayrat
11.10.2018
05:05:17
Pavel
11.10.2018
05:05:21
https://sharplab.io/#v2:DYLgZgzgNAJiDUAfA9gBwKYDsAEAJNAhgMYCwAUOQC4CeG2AsuhBAQObrYC852v2i2ACroATgFsAlpgKV0PPgIDS6atmRhsRABYER5csHSVsW7QUyZ0wLtgDCWgDyNmbdAD4AFAEoDR7KjMLKxt7JyYWdk8fMkNjCEo0DBgbAEkANV0HACNkZGAovmx9Chi/EXQiE3RdY28bACtkLOwAb3lC3jEZbQBCOy0AOkERagHKAgBrDlMdIOsAdwlKLXaOgQBlZDEOYXEpGQ4AWjdsb1XCgQB9bGOisg6+GGQ++wHWCQA3DgDZy2sPZSqADkhyB0QevCefUoEm2AHkAK6UegSYDACQQbAARgADHjznxypQESJMH0tNURLVwRCAL58Yq+YzlSqoERSakNJqtAmdbpaF6DcZTfyBP7YRbLXn8ISiSTSWQ3E5ne4QpQqTRaJX+dmYSgaABEAFIiAbNdKIR0iSSyTqOacaQ9aYzSsyKtgptQcrpknVONhGs02qqHl1KNpTutqPF0GIBrZkJgIHl0AMAErVGCA7CUEQI9BeAaA+y6CVLFYhtbYIEARyB2qh/Ten2mYuCu3lBwtlsbr3eX1Fv3bcv2sm7EJVloEnobzyb/e+bf+2c9jstD2tpL6nu9Il9a8KzpKsQDTUx/oA2qsKTUHas2fbJ3wd8gfXfKwBdYoXhwAUT1IwAArIBybhfq62BdFI2C6KwHw2KsJ5EImRAkuUeoAFJnjYWFZAMyGYCkrCYMg5SnlkECrHmOAEahIjoZQuGUZW966vqOAGgAIom6AGqsOJ3OQQA===

почему когда я нажимаю кнопку все встает колом. потом нажимаю еще раз и все продолжается печать?

Ayrat
11.10.2018
05:11:20
Ага, понял

у тебя хартбиты зависят от наличия в hchannel значения, непонятно зачем кстати

т.е. я понял что ты хочешь терминировать хартбиты, то если в хченел ничего нет, то хартбит залочится

Pavel
11.10.2018
05:13:20
прибить его когда q

Ayrat
11.10.2018
05:13:22
тут нужны альтернативы!

т.е. или ты получаешь терминейт, ИЛИ делаем хартбит. Далее рекурсимсчя

Pavel
11.10.2018
05:14:01
а там же Try он не спасет от лока?

и при запуске в канале то ниче нет и хартбит не лочится

я чет упускаю в логике видимо

Ayrat
11.10.2018
05:38:38
https://sharplab.io/#v2:DYLgZgzgNAJiDUAfAxASQAQAFMCIDCIAOgKoQCmAThCeRYQHQB2ArgOZkAuhADgIYDGAa17tqACwD2ffoQAM9ACz0AjIWABLAEaFGnBQHZlOALAAoZBXQ4AElIH08EimRPnLNu/1dmpZRultpH24/AM96VEYwdQAPMggzM2BOdEEyAE88MXQAXnQsgAoASiSUiA4pEJhc9FQANV4KYsTTZI50Z350MTJG9uKas3Rh9ABBYA56fkkJciGRhYBtdHLKsmqAPQBaAD56dGbTBePUjKz0ACoAHi30AHItu/QNnL30DnUAWzIAeWYOACy6mAGgg6GUskh6AAuvNhi8dt1ehQOC02h0yF1uBR1Ix+kVcnCxhMpjM5kcTuhlqtuFVnrt9odKSMCmlMtltojsbiOGArABSLwEhHobl4mFolKddDsDgAaQyAxyRM+vA40wOAGV0uUyJ8HBJGBAJMl6AAlXowBXpd4UZhkIr0a1ZRroADu6g4YiJiHuAEcnrsVhVaetLlc8gNEIi/fb7T7Tjag2zztd4In0NGOsxGABuGWca2HUrtVW49AAfUGFOGPT6UZjcbIqFYjCcZCJYo4DfQsbI9pbbecRNl1p9iIAUhJNPRDQAVMTOXgwAAKEhN6HHvabg/bRM7OLxYH8OAAIoaXETZJvTGYy/5FohENCgA=

Google
Ayrat
11.10.2018
05:39:24
основные изменения - keyboard уехал на тредпул, т.к. это офигенно плохо для гопака, который владеет всего-то N тредами что-то блочить в нём. Ну и заюзаны альтернативы

усё работает

ты увидишь один run в теле, это на самом деле нормально, т.к. там неблокирующая операция

Grigoriy
11.10.2018
05:40:29
Котики уже и в коде :)

<- '-' ^=>

Ayrat
11.10.2018
05:40:51
чиорт побери, да

страшное место

Ayrat
11.10.2018
05:42:14
спасибо. пойду медитировать.
лучше в IDE, т.к. я типы все вырезал

я кстати в heart() ошибся, там надо рекурсивный вызов во вторую ветку альта впихнуть

а так получается что он вечно крутится)

причём не просто крутится, а прям унижает проц

Roman
11.10.2018
05:44:36
операторы типа ^=>. имеют какое-то общепринятное толкование? Или это чистая отсебятина от автора?

Ayrat
11.10.2018
05:44:53
let rec heart () = Alt.choose [ stopped ^->. () keyCh *<- '-' ^=>. timeOutMillis 1000 ^=> heart ]

так много где обозначают оператор который отбрасывает противоположную часть

типа >>=. тот же монадический байнд но с игнором левой части

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