@Fsharp_chat

Страница 273 из 772
Artem
18.08.2017
11:03:04
А у меня есть много интеропа на F#! Смотрите! https://github.com/ForNeVeR/strafesharp/blob/c4657387b1f4915a3c3054da0144f528677acf65/StrafeSharp/Platform.Windows/Native.fs
? есть вещи которые ты не пробовал? ты небось и емаксом умеешь пользоваться

Artemy
18.08.2017
11:03:22
И зачем мне тогда F#? Я взял его для изучения фп, очень слабо представляю себе его использование в реальных тасках
Тут точно есть люди, которые в какой-то степени его в реальных задачах используют. Наверняка они смогут привести несколько примеров из своего опыта.

Vlad
18.08.2017
11:03:28
на самом деле фридрих сидит в виме и не признается.

Friedrich
18.08.2017
11:03:40
? есть вещи которые ты не пробовал? ты небось и емаксом умеешь пользоваться
Я не то чтобы умею им пользоваться, но иногда пишу для него плагины, чтобы было удобнее программировать на CIL ;3 https://github.com/ForNeVeR/cil-mode

Google
Artemy
18.08.2017
11:04:28
На самом деле, F# можно везде использовать. Полноценный язык.

Кроме UWP пока что.)

Дед Пегас
18.08.2017
11:05:30
Он всё!

Roman
18.08.2017
11:05:30
И зачем мне тогда F#? Я взял его для изучения фп, очень слабо представляю себе его использование в реальных тасках
Потому что даже ООП в F# сделан лучше чем в C#. Ну и не можешь сразу писать в ФП можно учиться постепенно, начиная с той точки которую ты знаешь.

Friedrich
18.08.2017
11:05:36
На самом деле, F# можно везде использовать. Полноценный язык.
Как минимум практически везде, где можно использовать C#. За исключением некоторых специальных моментов, которые гвоздями прибиты к C# (например, при работе с WPF и UWP могут быть сложности).

Artemy
18.08.2017
11:07:00
Ну с WPF сейчас всё более менее

Friedrich
18.08.2017
11:07:00
Фридрих, напомни, ты солюшн архитект, СТО или техлид?
Я .NET-техлид в аутсорс-конторе, ну и ещё в медицине подрабатываю (всякой интеграцией занимаемся для клиник и моргов).

Friedrich
18.08.2017
11:08:11
Ну с WPF сейчас всё более менее
Ну как сказать... наши F#-ребята нашли способы настрополить некоторые библиотечки, которые делают взаимодействие с WPF возможным. Это не нативный опыт; не тот же самый, который получают пользователи C#. Но возможность есть, да. У меня есть небольшие проекты, где это используется.

Artemy
18.08.2017
11:13:26
Ну FsXaml + FSharp.ViewModule нормально работает. Их пробовал.

Ещё бы Gjallarhorn глянуть

Google
Evgeniy
18.08.2017
11:17:45
Ещё бы Gjallarhorn глянуть
Это же про события?

Artemy
18.08.2017
11:18:16
Там Signal и Mutable

Мне напоминает View и Var из WebSharper.UI.Next

Evgeniy
18.08.2017
11:20:38
Там Signal и Mutable
Все, вспомнил.

А сложно будет эти библиотеки под Avalonia портировать?

Artemy
18.08.2017
11:21:34
Инфы маловато. Про привязку данных документации вообще нет, вроде.

А сложно будет эти библиотеки под Avalonia портировать?
Не знаю. Но, вроде, основная часть — где работа с Signal и Mutable — платформонезависима.

Artemy
18.08.2017
11:24:26
Ну FsXaml — это провайдер типов для XAML.

Завязки на WPF не должно быть

Да и ViewModule, наверное, тоже можно не с WPF использовать.

С ГитХаба: "Library providing MVVM and INotifyPropertyChanged support for F# projects"

Evgeniy
18.08.2017
11:26:48
Надо бы изучить. Хочу утилиту на авалонию написать.

Artemy
18.08.2017
11:27:33
Думаю, должно получиться.

С ViewModule и из C# работать можно. Там в репе пример есть.

А в репе Gjallarhorn есть пример для Xamaring.Forms

@gsomix http://i.imgur.com/LAJIua7.png

В контексте: http://i.imgur.com/dqlEanJ.png

Летучая
18.08.2017
12:02:10
Ты же впф/увп дед! Помоги. :)
https://github.com/Worldbeater/Funlan/blob/master/Funlan/ViewModels.fs вот короче работающий код (но в качестве примера юзать не стоит, там императивщина и нуллы, писал в кач-ве своего первого пета на фшарпе для универа)

Google
Nikolay
18.08.2017
12:02:25
Ух!
А есть ещё мой пример DSL ?

https://github.com/fsharplang-ru/translations/issues/16

https://github.com/fsharplang-ru/translations/issues/16
Это никто не переводит?

Могу заняться переводом чего-нибудь

Vlad
18.08.2017
17:41:57
-

Evgeniy
18.08.2017
17:46:05
Это никто не переводит?
Никто. Если займешься, напиши в ишшуе.

Nikolay
18.08.2017
17:48:23
Никто. Если займешься, напиши в ишшуе.
Я правильно же понял, там, где нет комментариев, значит никто не переводит?

Iskander
18.08.2017
17:55:05
Добрый вечер! Такой вопрос, если есть некий сервис, в котором бОльшая часть работы - сортировка\фильтрация\выборка\математические вычисления, то насколько выгодно написать эту часть на F#? Какие преимущества можно получить по сравнению с C#\LINQ?

Например, такой пример, можно ли более лаконично переписать это на F#?

https://pastebin.com/SxbA26Tq

Evgeniy
18.08.2017
17:57:49
https://twitter.com/kot_2010/status/898600325782749186

@IskanderRaimbayev А можно определение Room?

Я попробую набросать пример на F# и кое-какие соображения напишу.

Iskander
18.08.2017
18:16:23
Зависит от стиля. :)
В функциональном стиле

https://pastebin.com/Ke1MCRmv

Что-то вроде этого

Важный момент - RoomType позже может стать отдельной таблицей, а не конечным множеством, как сейчас

т.е. если позже RoomTypes будут в виде некой таблицы в БД, расширяться в рантайме, то каждый раз код править придется

Google
Nikolay
18.08.2017
18:25:25
http://fsharpforfunandprofit.com/learning-fsharp/ Этой статьи кажется нет в issue, я думаю будет полезным её перевести

И на C# можно написать лаконичнее: rooms.Where(p => rulesOfSort.Any(r => p.RoomType == (RoomTypeEnum)r)) .ToList()

Iskander
18.08.2017
18:29:44
А почему Sort? Это же вроде Filter?
Вы про название метода? Sort меняет последовательность, но не удаляет, Filter удаляет, разве нет?

Nikolay
18.08.2017
18:30:40
Вы про название метода? Sort меняет последовательность, но не удаляет, Filter удаляет, разве нет?
Filter возвращает новую последовательность по заданному предикату

Вообще в IEnumerable почти все методы возвращают новую последовательность, кроме ForEach, Remove, может ещё несколько

Но я предложил бы не оффтопить тут, а переместиться, например, в .Net Talks

Iskander
18.08.2017
18:35:21
Filter возвращает новую последовательность по заданному предикату
Да, у вас более точное определение filter. В моем же случае возвращаемая коллеция является полной копией полученной, лишь меняется порядок элеметов - разве это не Sort? Да, задам этот вопрос в другой группе, здесь я хотел узнать, наксколько выгодно\удобнее написать все аналогичные элементы логики в ФП\f#

Evgeniy
18.08.2017
18:52:40
@IskanderRaimbayev Я начал писать, но, кажется, провалился. :)

Если правильно подойти к созданию правил для сортировки.

То все уместится в пару простых функций.

Nikolay
18.08.2017
18:54:30
У меня в рабочем проекте есть экстеншн метод для такого случая

rooms.OrderByKeys(rulesOfSort, p => (int)p.RoomType).ToList()

Evgeniy
18.08.2017
18:57:26
@IskanderRaimbayev Мое короткое решение, на оптимальность, конечно, не претендую. let makeRule (orderedRoomTypes : #seq<RoomType>) = orderedRoomTypes |> Seq.mapi (fun ord rt -> (rt, ord)) |> dict let sortRoomsByRule (rooms : #seq<Room>) (rule : IDictionary<RoomType, int>) = rooms |> Seq.sortBy (fun r -> rule.[r.roomType])

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

Во-первых, в F# можно писать generic numeric code. http://tomasp.net/blog/fsharp-generic-numeric.aspx/

Во-вторых, есть units of measure, которые повышают корректность кода. https://fsharpforfunandprofit.com/posts/units-of-measure/

И в конце, конечно, система типов довольно приятная в F#. Например, можно легко написать враппер-тип над тем же int. Вот, например, как я определил RoomType. По сути это новый тип-обертка над обычным int. Это тоже дает некоторые дополнительные статические гарантии. type RoomType = RoomType of id : int

Google
Evgeniy
18.08.2017
19:12:37
То есть выигрыш я вижу в чуть более удобной системе типов, ибо в функции высшего порядка, кажется, все языки худо-бедно умеют.

Igor
18.08.2017
19:18:57
А правда что async { } всегда создает новый тред? Если я делаю там что-то тяжелое, но синхронное - это не страшно (нигде НЕ используется RunSynchronized)?

Igor
18.08.2017
19:32:38
Можно запускать в тредпуле, можно в текущем потоке.
А можно пример, как по простому сделать асинхронным тяжелый синхронный метод?

Egoarka
18.08.2017
19:33:27
@angmarr await Task.Run(() => {}); ?

Igor
18.08.2017
19:34:48
@angmarr await Task.Run(() => {}); ?
Кажется мы не в C# чатике ? (у нас это харам ☠️)

Egoarka
18.08.2017
19:36:09
ой, ну да, извините)

Aleksander
18.08.2017
19:40:42
если ты хочешь вызвать что-то тяжелое из UI потока, и не хочешь его блокировать, то наверное так: let! result = Async.StartChild heavyStuffWrappedInAsync

Evgeniy
18.08.2017
19:48:45
Привет! o/

Nikolay
18.08.2017
20:00:37
Как насчёт того, чтобы помещать переводы с fsharpforfunandprofit в одну папку?

Evgeniy
18.08.2017
20:01:24
Как насчёт того, чтобы помещать переводы с fsharpforfunandprofit в одну папку?
Можно. Но давай сначала переведенный контент наберем.

Nikolay
18.08.2017
20:01:55
Ну никто не ответил, и я начал переводить http://fsharpforfunandprofit.com/learning-fsharp/

Просто задумался, куда его закинуть

По идее: F# for fun and profit/learning-fsharp.md

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