
Vasily
09.10.2017
13:54:22
Да, точно

Nikolay
09.10.2017
13:54:37

Friedrich
09.10.2017
13:54:37
Где?
Давай смотреть в https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/master/src/ProvidedTypes.fsi
Вот, смотрите, там уже всё, что можно запровайдить, описано: есть всякие ProvidedTypeDefinition, ProvidedConstructor, ProvidedParameter etc.

Google

Vasily
09.10.2017
13:56:27
В основном объявления. И квотейшны в большом количестве

Friedrich
09.10.2017
13:57:27
Я просто пока сходу не понимаю, как мы это будем переписывать

Nikolay
09.10.2017
13:58:31
Я вообще не понимаю, что ты хочешь

Vasily
09.10.2017
13:58:55
https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/master/src/ProvidedTypesContext.fs
Этот файл вроде ближе к истине

Nikolay
09.10.2017
13:59:04
Фридрих, надо раскурить ilwriter

Vasily
09.10.2017
13:59:47
https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/master/src/AssemblyReader.fs
А это вообще мякотка

Friedrich
09.10.2017
14:00:02

Vasily
09.10.2017
14:00:11
Одно
По идее

Friedrich
09.10.2017
14:00:38

Vasily
09.10.2017
14:00:40
Там же внутри рефлексия как раз

Google

Nikolay
09.10.2017
14:00:49
Зачем нам сильно патчить провайдер, если мы можем после того, как сгенерирована будет Assembly через рефлексию достать всю инфу, и скормить ilwriter'у?

Friedrich
09.10.2017
14:01:30

Nikolay
09.10.2017
14:01:39
Алло, я так и делаю вообще-то

Friedrich
09.10.2017
14:01:53
Спокуха, я запутался :)
Щас распутаюсь.

Nikolay
09.10.2017
14:02:03
https://github.com/Dolfik1/AssemblyGenerator/blob/master/src/AssemblyGenerator/AssemblyGenerator.cs#L43

Friedrich
09.10.2017
14:02:11
Я знаю, что ты так делаешь.
Собственно, я примерно это и предлагал с самого начала.
Ок — наверное, так можно сделать.

Nikolay
09.10.2017
14:02:55
В таком случае, нас не интересует внутренняя кухня тайп провайдеров
У нас цель сделать конвертер System.Assembly -> .dll

Friedrich
09.10.2017
14:03:18
То есть мы берём твой код, ретаргетируем его на ILWriter и запихиваем прямо в TP SDK.
А дальше всё продолжает работать как есть.

Nikolay
09.10.2017
14:03:51
Придётся писать свой велосипед
И переводить на F#

Friedrich
09.10.2017
14:04:00
Первый раз чтоли?

Nikolay
09.10.2017
14:04:33
Но я бы на самом деле допилил эту хрень, и попробовал бы сделать тестовый провайдер
Чтобы убедиться, что схема рабочая

Friedrich
09.10.2017
14:04:41
Хм.
А тебе там много ешо допиливать?

Nikolay
09.10.2017
14:05:16
Нет поддержки генериков, событий

Google

Nikolay
09.10.2017
14:05:20
Это из того, что я знаю
Плюс надо разобраться с ошибками peverify
Ну я ещё нашёл ilverify, он вроде получше (не тестил)
Я боюсь просто, что мы воткнёмся в какие-то особенности Run only сборок
Это самые большие опасения с самого начала

Friedrich
09.10.2017
14:07:23
Ну чо, давай я тогда примерно попробую описать план для Дона.

Nikolay
09.10.2017
14:07:44
Ну ты хоть согласен со мной? :D

Friedrich
09.10.2017
14:07:55
Да, я с тобой согласен.

Roman
09.10.2017
14:09:40
Привет!

Evgeniy
09.10.2017
14:10:52

Александр
09.10.2017
14:11:37

Friedrich
09.10.2017
14:17:14
https://github.com/Microsoft/visualfsharp/issues/2406#issuecomment-335171430

Pavel
09.10.2017
14:19:01
Для тех кто из Беларуси https://fby.by/ . По F# ничего пока не анонсировано, но думаю для развития будет интересно сходить.

Nikolay
09.10.2017
14:21:28

Vasily
09.10.2017
14:36:54
Я бы предложил все же взять AssemblyReader

Friedrich
09.10.2017
14:37:08

Vasily
09.10.2017
14:37:10
И с выхода передавать в ILWriter

Friedrich
09.10.2017
14:37:18
А хотя...

Vasily
09.10.2017
14:37:44
Берет и читает ассемблю как массив байт

Friedrich
09.10.2017
14:37:55
https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/master/src/AssemblyReaderReflection.fs#L4-L7

Google

Friedrich
09.10.2017
14:38:16
Не, оно всё-таки не то делает.

Nikolay
09.10.2017
14:38:41
https://github.com/pandaman64/dnass/blob/master/source/app.d
Загуглил

Friedrich
09.10.2017
14:38:44

Vasily
09.10.2017
14:39:18
Кстати
А в каком виде у вас ассембля в памяти лежит?

Friedrich
09.10.2017
14:39:49
AssemblyReader делает обратное преобразование: и байтиков... э, куда-то в абстрактный рефлешкноподобный формат.

Nikolay
09.10.2017
14:39:50

Friedrich
09.10.2017
14:40:13

Vasily
09.10.2017
14:42:48
Ну смотри
В теории она загружается в текущий AppDomain
Хотя вру
Это в рантайме
А мы тут о компиляции

Friedrich
09.10.2017
14:43:51

Vasily
09.10.2017
14:43:56
Короче, по идее правильным подходом было бы что-то вроде T4

Friedrich
09.10.2017
14:44:09
Э, ну, в рантайме компиляции %)

Vasily
09.10.2017
14:44:23
Это бы позволило снять некоторые проблемы

Google

Vasily
09.10.2017
14:44:57
Из текущего домена

Friedrich
09.10.2017
14:45:16
Для чего? У нас уже есть System.Assembly, прям в руках держим.

Nikolay
09.10.2017
14:45:21
Я изначально и думал, что тайп провайдеры просто генерируют код)
Просто .fs файлик

Friedrich
09.10.2017
14:46:09
Может быть, так даже лучше было бы?

Vasily
09.10.2017
14:46:15

Friedrich
09.10.2017
14:46:27

Nikolay
09.10.2017
14:46:27
Мне вот не понятно, как работают Generative провайдеры
Как работает автодополнение там

Friedrich
09.10.2017
14:47:19

Nikolay
09.10.2017
14:47:23
Если сборка не генерируется
Тьфу
Erased*

Friedrich
09.10.2017
14:47:42
А, ок, этого я тоже пока не знаю.

Vasily
09.10.2017
14:47:47
В Erased до этапа компиляции все как бы есть

Nikolay
09.10.2017
14:47:53
Никто не знает :)
Может они и генерят файлы? .fs?

Friedrich
09.10.2017
14:48:05
По идее, там должны генерироваться какие-то псевдотипы (а-ля «макросы»), которые компилятор заменяет чем-то в компилтайме.

Nikolay
09.10.2017
14:48:25

Friedrich
09.10.2017
14:48:28