
Friedrich
10.10.2017
07:36:28

Nikolay
10.10.2017
07:36:53
Получить тип + токен

Friedrich
10.10.2017
07:37:10

Vasily
10.10.2017
07:37:20
Ну ссылку киньте

Google

Nikolay
10.10.2017
07:37:39
https://github.com/Microsoft/visualfsharp/issues/2406

Friedrich
10.10.2017
07:38:49
В общем, всё к тому идёт, что генеративным провайдерам на коре быть. Я уверен, что коллективными усилиями мы их запилим.

Vasily
10.10.2017
07:39:10
Там интересно, да
Особенно некоторые пассажи

Nikolay
10.10.2017
07:39:36
@fvnever но нависла новая угроза
Типы в IL коде

Friedrich
10.10.2017
07:39:51
Mono.Reflection!
А ещё там вчера была какая-то managed-читалка IL, но я её сегодня уже не могу найти. Похоже, Дон её перепрятал ?

Nikolay
10.10.2017
07:40:41
Щас Сайм скажет, что в компиляторе есть ещё какой-то рефлекшн

Friedrich
10.10.2017
07:40:53
Он был в TPSDK.

Vasily
10.10.2017
07:41:06
Как я понял, в компилятор он тащить пока не хочет поддержку generic tp
Хотя было бы неплохо

Nikolay
10.10.2017
07:41:22
А нет, Сайм не скажет

Google

Nikolay
10.10.2017
07:41:23
Скажу я
https://github.com/Microsoft/visualfsharp/issues/2406

Friedrich
10.10.2017
07:41:25
Во! https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/193707a4771b4ff6358a95fab46e6f39d5ed0513/src/AssemblyReaderReflection.fs
И, действительно, из мастера этот файл уже удалили :)

Nikolay
10.10.2017
07:43:21
А что за файл .fsy?
https://github.com/Microsoft/visualfsharp/blob/master/src/absil/ilpars.fsy

Friedrich
10.10.2017
07:43:47
Это для fsyacc, наверное?
Э, чо, не, погодь
Там парсер IL-кода на fsyacc чтоли?

Nikolay
10.10.2017
07:45:56
Хз

Evgeniy
10.10.2017
07:46:01
Bus factor компилятора равен единице.

Nikolay
10.10.2017
07:46:11
Я же сказал, нам не нужен будет даже Mono.Reflection :D

Friedrich
10.10.2017
07:46:33

Evgeniy
10.10.2017
07:47:05

Nikolay
10.10.2017
07:47:20

Friedrich
10.10.2017
07:47:22

Nikolay
10.10.2017
07:47:53
В общем, Фридрих, LSD нам ещё пригодится

Friedrich
10.10.2017
07:48:55

Nikolay
10.10.2017
07:49:58
У тебя хоть есть идеи, с чего начать?

Google

Vlad
10.10.2017
07:50:14
у вас есть репо то, чтоб хотябы понять что вы делаете?)

Friedrich
10.10.2017
07:50:41

Vlad
10.10.2017
07:51:17
у компилятора код действительно страшный, без диаграмок и блокнотиков его явно не осилить

Evgeniy
10.10.2017
07:51:21

Vlad
10.10.2017
07:51:23
а вот провайдеры еще не открывал

Vasily
10.10.2017
07:51:25
До меня дошло, зачем нужны erased providers
Их просто проще реализовать и поддерживтаь

Vlad
10.10.2017
07:51:42

Friedrich
10.10.2017
07:51:46

Vasily
10.10.2017
07:52:16

Nikolay
10.10.2017
07:52:45

Vlad
10.10.2017
07:52:55
работы на день, а реабилитации на полгода

Friedrich
10.10.2017
07:52:58

Nikolay
10.10.2017
07:53:10

Friedrich
10.10.2017
07:53:19
Ну, Дон не уверен :)
Я предлагаю вот что.

Nikolay
10.10.2017
07:53:47
Он вселил неуверенность в меня :)

Friedrich
10.10.2017
07:53:51
Я вижу сценарий, по которому реально работы на день.
Mono.Reflection + Mono.Cecil.

Google

Friedrich
10.10.2017
07:54:29
Может быть, код на System.Metadata.Reflection тоже пригодится, не знаю.
Надо собрать прототип из этого, а дальше посмотреть, сконвертуется ли провайдер. Мало ли, вдруг ещё на что-то напоремся.

Nikolay
10.10.2017
07:55:00
Но если Mono проще, почему бы и нет

Friedrich
10.10.2017
07:55:28
И параллельно уже можно будет начинать делать нормальное решение на ilwriter.fs (и, видимо, на AssemblyReaderReflection.fs тоже).

Nikolay
10.10.2017
07:56:47
А чем ридер поможет?

Friedrich
10.10.2017
07:56:53
Ну а полученную либу можно будет и оставить как есть. Я уже написал, что это будет просто общественно полезным артефактом.

Nikolay
10.10.2017
07:59:30
Ну если есть понимание, давай делать на моно

Friedrich
10.10.2017
07:59:49
Пока, вроде, есть. Будем делать на Mono.

Nikolay
10.10.2017
08:01:17
Надо ещё разобраться, как верифицировать сборки)

Friedrich
10.10.2017
08:01:25
Надо.

Nikolay
10.10.2017
08:02:21
peverify есть конечно, но он ругается на сборки, сгенерированные компилятором

Evgeniy
10.10.2017
08:25:30
Кто-нибудь пробовал Mutable.Fody?
https://github.com/ndamjan/Mutable.Fody

Friedrich
10.10.2017
08:26:37
А как это работает? Само чтоли? В смысле, никаким атрибутом не нужно помечать?

Evgeniy
10.10.2017
08:26:50
Видимо, не нужно.

Friedrich
10.10.2017
08:27:34
Но тогда оно все типы помутирует. А это редко нужно, я думаю.
Может быть нужно только из какого-нибудь неймспейса, например.

Pavel
10.10.2017
08:34:21
На сколько я помню fody достаточно гибко настраивается (для сборки, для неймспейса и т.д.)

Google

Evgeniy
10.10.2017
08:34:49
Надо только доки разыскать. :)

Friedrich
10.10.2017
08:35:03
А, то есть это предлагается рулить настройками самого Fody? Тогда ок.

Pavel
10.10.2017
08:41:59
Ну да, это же addin для fody.

Enhed
10.10.2017
10:52:32
Добрый день. Подскажите, пожалуйста, мне нужен метод который возвращает обобщенный тип abstract GetResponse : unit -> 'provider, в наследнике я пытаюсь, к примеру, вернуть строку из метода, но ругается с ошибкой, ожидается тип 'a, а получен тип string. Не могу понять, как вернуть обобщенный результат, можно ли вообще это сделать? Вот мое переопределение: override this.GetResponse () = "result"

Friedrich
10.10.2017
10:53:26
А что такое 'provider? На каком уровне привязан этот аргумент?

Enhed
10.10.2017
10:54:24
вообще ни на каком, то есть это только метод по сути должен знать, что он возвращает

Evgeniy
10.10.2017
10:54:56
А как это в C# бы выглядело? Кажется, никак.

Friedrich
10.10.2017
10:54:57
Ну вот смотри, ты в родителе объявил метод GetResponse<'T>(): 'T
Значит, он должен возвращать любой тип, который захочет вызыватель.

Enhed
10.10.2017
10:58:15
ну да, что-то я запарился) спасибо

Friedrich
10.10.2017
10:59:08
Я думаю, что твоя задача решается
- либо вообще без наследования
- либо через параметризирование родительского типа переменной <'provider>

Enhed
10.10.2017
10:59:50
Да, второй вариант я как раз хотел сделать, я внутри наследника уже знаю, что мне нужно вернуть)
В контексте этого же вопроса. Сейчас пытаюсь вернуть обобщенный тип JsonProvider. У меня есть тип type LoginResponse = JsonProvider<"..путь к файлу..">. Результатом я указываю этот тип LoginResponse и пытаюсь вернуть вот так: LoginResponse.GetSample(), а в ответ выдает: ожидался тип LoginResponse, а получен JsonProvider<...>.Root. Кто-нибудь встречался с такой проблемой?

Evgeniy
10.10.2017
11:25:59
Это тип твоего json.

Enhed
10.10.2017
11:29:14
Я почему-то не могу его указать в параметре, пишет, что такой тип не определен. Хотя в контексте тех же методов я к этому типу могу обращаться.
Решил вопрос так: объявил выше type provider = LoginResponse.Root и засунул provider в параметр, все работает, а напрямую не работает)

Evgeniy
10.10.2017
11:32:53
Проблема в том, что типы, которые генерирует JsonProvider, стираются после компиляции. Может быть сюрприз, если из другой сборки захочется вызвать метод с таким типом в сигнатуре.

Enhed
10.10.2017
11:35:01
Ну, я хотел использовать провайдеры именно для того, чтоб не писать типы руками. В ином случае смысла в них я не вижу.

Evgeniy
10.10.2017
11:36:22