
Vasily
16.04.2018
12:53:33
Я просто хочу странного
Хочется дополнительного слоя абстракции над пропертями по аналогии с ? <- операторами, но со строгой проверкой типов

Evgeniy
16.04.2018
12:55:59

Vlad
16.04.2018
12:56:31

Google

Vasily
16.04.2018
12:56:50

Evgeniy
16.04.2018
12:57:03
Я на словах очень плохо понимаю.

Vasily
16.04.2018
12:58:54
Ну смотри
Есть условный билдер
По факту список, какое свойство у объекта какой функции чтения соответствует
Дык вот
Хочется по идее нотации 't->'n где t тип, 'n свойство
Т.е. задавать функции геттеров сеттеров в общем виде, без доступа к инстансу объекта
Условно , если тип 't имеет свойство A, но не имеет свойство B, то условно <'t>?A должно скомпилиться, а <'t>B нет
<'t>?B
Все обозначения, естественно, условны
В c# я это могу решить конструированием лямбды на проперти

Google

Vasily
16.04.2018
13:08:12
Точнее Linq expression
Вопрос, как это сделать в f#

Daniel
16.04.2018
13:11:30
Если я правильно, понимаю, то нужно что-то вроде
Expr<A,B> foo = (a) => a.b?

Vasily
16.04.2018
13:11:48
Угу
Причем со строгими констрейнтами

Daniel
16.04.2018
13:12:21
квотейшен же
<@ fun a -> a.b @>
а, прочитал выше про DU

Vasily
16.04.2018
13:14:24
Ну квотейшн возможен, конечно

Daniel
16.04.2018
13:14:35
можно в таком случае сделать у DU with и там добавить мембер с нужным значением
реализуюя его, видимо, через match

Vasily
16.04.2018
13:15:57
Квотейшн потом надо как-то вычислять, это раз, и скорее всего он будет untyped, это два
Мрак - в спеке вместо описания квотейшнов ссылка на мсдн...

Evgeniy
16.04.2018
13:17:28

Vasily
16.04.2018
13:18:46
Ну перед тем , как спросить, в это надо погрузиться
Нырнуть поглубже, так сказать

Daniel
16.04.2018
13:20:02
ну и да, почему Untyped?

Evgeniy
16.04.2018
13:20:25
Посмотри пункт 6.8

Daniel
16.04.2018
13:21:19
динамические операторы уж точно не вариант

Google

Vasily
16.04.2018
13:21:21
Спасибо, ща гляну
Хммм... начал смотреть на Гьялахорн. По виду очень крутая библиотека
Особенно элегантно там решена проблема code behind
Прям аж захотелось ее попробовать

Roman
16.04.2018
14:56:43
Привет!

Sergey
16.04.2018
15:36:46
5 минут как понеслось! https://channel9.msdn.com )

Vasily
16.04.2018
15:49:37
Чо там есть чо для ф шарпа?

Igor
16.04.2018
15:50:01
FsharpConf с леночкой ?.
Можно наверное передать привет в прямой эфир от f#-russia.

Klei
16.04.2018
16:16:04
Оно же в записи будет?

Mykola
16.04.2018
16:26:27

Klei
16.04.2018
16:27:15
Ок. Что щас hopca видел, просто времени прямо сейчас смотреть нет.

Evgeniy
16.04.2018
17:11:15
Хехе, скоро до 1.0.0 доберутся, хехе.
https://github.com/gusty/FSharpPlus/commit/1dd1c0b1a5617439c98ad90491922b1b31153458
https://twitter.com/mlusiak/status/985911274612645889
Они туда @terrajobst (.NET PM) притащили. Офигеть. :)
Слева от Лены.

Igor
16.04.2018
17:23:59
Я на вас надеялся ? (это был завуалированный призыв к действию)

Sergey
16.04.2018
17:24:54

Evgeniy
17.04.2018
06:27:38
https://github.com/Wkalmar/SokkerPlayersCrawler/pull/1

Google

Evgeniy
17.04.2018
06:29:11
Vasily ?

Летучая
17.04.2018
06:55:18
Привет!

Evgeniy
17.04.2018
07:06:15

Artemy
17.04.2018
07:52:53
https://github.com/dotnet-websharper/mvu

Evgeniy
17.04.2018
07:57:06
Интересно, что разработчиков W# не видно на конференциях.
Не хайпят!

Artemy
17.04.2018
07:58:33
Возможно, не успевают ездить
Ну или просто считают, что ещё не время хайпить.))

Pavel
17.04.2018
08:02:41
Выглядит неплохо.
А мне не нравится темплейты. Получается view разбивается на две части: разметка и связывание разметки с моделью. Complexity + boilerplate

Artemy
17.04.2018
08:08:28
А как больше нравится?

Evgeniy
17.04.2018
08:08:42
Вот пример.
http://try.websharper.com/snippet/loic.denuziere/0000Kc

??
17.04.2018
08:17:50
Вопрос больше по Net части, если функция inline - она встраивается, и по идее она будет вырезаться (?) как отдельный метод из сборки компоновщиком и её, например, из рефлексии не вызвать в релизе?

Pavel
17.04.2018
08:27:22

Vladimir
17.04.2018
08:35:20
не вырезается

Roman
17.04.2018
08:48:14
Много нас осталось?

Igor
17.04.2018
08:52:24
Напомните плиз есть ли в f# tail rec в каком либо виде?

Evgeniy
17.04.2018
08:53:11

Google

Vasily
17.04.2018
08:54:01
Если вычисления до входа в следующий цикл рекурсии - это тейл рек, иначе - обычная рекурсия. Вроде так

Igor
17.04.2018
08:56:47
А проверять надо дизасемблером?

Sergey
17.04.2018
08:57:24
А проверять надо дизасемблером?
еще стоит понимать что компилятор будет стараться умничать, и если tail rec не очень сложный и понятный компилятору, то в декомпилированном коде будет просто цикл - и это нормально (это значит что tail)

??
17.04.2018
09:16:21
не вырезается
Этот сайт не собирает в релиз. https://sharplab.io/#v2:DYLgZgzgPg9gDgUwHYAIDKBPCAXBBbAWACgBiASzBQCUBRAGRoEE0bjgFsUylhuEU8GACoBXOOwBMKAIYoARigC8xFCgAU0gDTyAlMRIJgEBGw5cefAcLHsAjPJQBjJSvVztjvaWQATCsTgAJ25sSgAiAFJGMPVBUXEEeykAZh0gA===

Friedrich
17.04.2018
09:19:37

??
17.04.2018
09:21:29

Friedrich
17.04.2018
09:21:44
Это два совершенно разных случая. У них ничего общего.

??
17.04.2018
09:22:02
Но если например можно на C# агрессить геттеры/сеттеры, то у F# ошибки билда

Friedrich
17.04.2018
09:23:40
F# inline — это фича языка. Компилятор будет делать специализацию функции для всех случаев её использования. Исходная функция тоже будет, но, вроде бы, только в метаданных (в декомпиляторе ты её, возможно, не увидишь) — чтобы из других сборок юзать.
Атрибут AgressiveInlining — это хинт для JIT. Соответственно, на выводе декомпилятора он вообще никак не отражается, а чтобы понять, сработал он или нет — надо читать дизасм.
F#-компилятор сам умеет много чего инлайнить в байткоде (без дополнительных хинтов, совсем самостоятельно). C#-компилятор так никогда не делает.


??
17.04.2018
09:25:33
F# inline — это фича языка. Компилятор будет делать специализацию функции для всех случаев её использования. Исходная функция тоже будет, но, вроде бы, только в метаданных (в декомпиляторе ты её, возможно, не увидишь) — чтобы из других сборок юзать.
Атрибут AgressiveInlining — это хинт для JIT. Соответственно, на выводе декомпилятора он вообще никак не отражается, а чтобы понять, сработал он или нет — надо читать дизасм.
Ну это как __forceinline как я понимаю из C++, то есть функция просто встраивается в цепочку вызовов и, например, будет одна большая функция, если собирать её из инлайнов.

Friedrich
17.04.2018
09:26:40