@Fsharp_chat

Страница 352 из 772
Vasily
09.10.2017
13:54:22
Да, точно

Nikolay
09.10.2017
13:54:37
В .fsi я там понимаю можно прописывать сигнатуры, чтобы не мусорить ими в обычном коде
Для тех кейсов, когда не удаётся автоматически это сделать

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
Этот файл вроде ближе к истине
Вот это мне вообще непонятно. У нас что, два API для провайдеров?

Vasily
09.10.2017
14:00:11
Одно

По идее

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

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

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
Привет!

Александр
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# ничего пока не анонсировано, но думаю для развития будет интересно сходить.

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
Я бы предложил все же взять AssemblyReader
Смотри, у нас задача-то наоборот: есть Assembly (её сгенерировал Type Provider в памяти), а нам нужны байтики.

Vasily
09.10.2017
14:39:18
Кстати

А в каком виде у вас ассембля в памяти лежит?

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

Friedrich
09.10.2017
14:40:13
А в каком виде у вас ассембля в памяти лежит?
System.Assembly — как рантайму в голову взбредёт, кажется.

Vasily
09.10.2017
14:42:48
Ну смотри

В теории она загружается в текущий AppDomain

Хотя вру

Это в рантайме

А мы тут о компиляции

Friedrich
09.10.2017
14:43:51
В теории она загружается в текущий AppDomain
Она создаётся в текущем AppDomain, ок. Что дальше?

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

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

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

Она создаётся в текущем AppDomain, ок. Что дальше?
Мы всегда можем сделать Assembly.GetAssembly по идее

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
Для чего? У нас уже есть System.Assembly, прям в руках держим.
Но проблема, как я понимаю, что у нас нет Save

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
Может они и генерят файлы? .fs?
Хотя нет, не может быть, тогда бы не нужны были Generative

Friedrich
09.10.2017
14:48:28
Может они и генерят файлы? .fs?
Не, это бы дало настоящие типы. Там сложнее

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