
Evgeniy
07.10.2017
17:40:07
@Dolfik ^
Если честно, то я уже потерял суть проблем с провайдерами. :)

Nikolay
07.10.2017
17:42:29
Проблема в том, что мы не можем сохранить сборку на диск
Или получить её в памяти (побайтово)

Google

Evgeniy
07.10.2017
17:42:42

Nikolay
07.10.2017
17:42:45
Да

Evgeniy
07.10.2017
17:42:55
А Сайм про что пишет?
И там еще какая-то проблема с IReflectedType.

Nikolay
07.10.2017
17:43:51
Он написал про то, что сейчас делаю я :)

Evgeniy
07.10.2017
17:44:08
А что ты делаешь?

Nikolay
07.10.2017
17:44:22
Костыляю свой сохраняльщик сборок

Evgeniy
07.10.2017
17:44:44
Но я ничего не вижу в том комментарии про сохранение сборок.

Nikolay
07.10.2017
17:44:46
Это больно и сложно
Ну, там дело даже не в сохранении
Нам нужен просто массив байт, чтобы скормить это компилятору
Он пишет про IL, но не упоминает метаданные, это странно
Они нам точно нужны

Google

Evgeniy
07.10.2017
17:46:04
Я все равно ничего не понимаю.

Nikolay
07.10.2017
17:46:06
А IL можно без проблем получить

Evgeniy
07.10.2017
17:46:10
Потом расскажете, когда сделаете?

Nikolay
07.10.2017
17:46:26
Если вообще получится
Доков вообще нету
Делаю по интуиции и ECMA-335
Конечно можно тупо по спеке, но я задолбаюсь её читать
Там ещё 100500 ньюансов

Evgeniy
07.10.2017
17:48:58
@Dolfik Вы уже разобрались, как провайдеры работают?

Nikolay
07.10.2017
17:49:55
Мы разобрались почему они не работают под кором, и что нужно сделать, чтобы заработали
А во внутренности не вникали
Сайм хочет пофиксить это не сломая апи

Evgeniy
07.10.2017
17:50:37

Nikolay
07.10.2017
17:50:58
В слаке тоже не ответили
Зацени: https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/40bfff9149c9237c0a61bda3e6ed597ece743264/src/ProvidedTypes.fs#L2778

Evgeniy
07.10.2017
17:52:26

Nikolay
07.10.2017
19:17:04
https://github.com/Dolfik1/AssemblyGenerator
Пилимся, ещё

Friedrich
08.10.2017
04:17:29

Google

Evgeniy
08.10.2017
05:25:47
F# Weekly #41 – ARKit and F#
https://sergeytihon.com/2017/10/08/f-weekly-41-arkit-and-f/
Доброе утро.
Хорошая статья про описание "ограниченных" типов в рамках домена.
https://www.codit.eu/blog/2017/10/03/f-domain-model-validation-with-active-patterns/

Friedrich
08.10.2017
05:53:21
Кажется, в этом ишуе решают ту же самую проблему, которую решаем мы?

Evgeniy
08.10.2017
05:54:40
Нет.
Это старый ишшуй про какой-то новое API.

Friedrich
08.10.2017
05:55:07
Во всяком случае, комментарий прям хорошо подходит к нашему кейсу.

Evgeniy
08.10.2017
05:55:37
Я посмотрел пример.
https://github.com/7sharp9/ContextBasedGenerative/blob/master/ContextBasedGenerative/TypeProvider.fs
Действительно, новый API для провайдеров. Только непонятно, в чем была проблема старого.

Friedrich
08.10.2017
05:56:04
Но в комменте написано про .NET Core. И про бинарные зависимости. Прям реально кажется, что Дон отвечал нам :)

Evgeniy
08.10.2017
05:56:30
В том числе про неткор.
Ну, потому что решение обеих проблем — смена IL writer.

Friedrich
08.10.2017
05:57:10
Вот и я об этом же говорю. Похоже, что проблема общая, и её будут решать.
В компиляторе у нас уже есть портабельный IL writer (почему-то я об этом не подумал), его-то Дон и хочет переиспользовать.

Evgeniy
08.10.2017
05:58:32
У меня изначально был вопрос про то, что это все значит. :)

Google

Evgeniy
08.10.2017
05:59:02
Уже не первый раз встречаю какие-то интересные штуки около провайдеров, но не понимаю, про что они или почему не работают.

Nikolay
08.10.2017
06:00:07

Friedrich
08.10.2017
06:01:12
Оно и понятно, что проблема не только и не столько в IL.

Evgeniy
08.10.2017
06:01:56
@fvnever А ты смотрел прототип провайдеров, параметризуемых типами?

Friedrich
08.10.2017
06:08:08
Нет, не смотрел. Нам бы с обычными для начала разобраться!

Evgeniy
08.10.2017
06:08:28

Friedrich
08.10.2017
06:08:35
Постепенно.

Evgeniy
08.10.2017
06:08:41
Расскажешь?

Friedrich
08.10.2017
06:08:55
Вернее, пока что я укрепляюсь в своей прошлой убеждённости, что они работают довольно просто.
Контракт такой: провайдер генерирует полноценную сборку с типами и отдаёт её (и даже не саму сборку, а байтики) компилятору. Компилятор у себя парсит эту сборку обратно, и зашивает сгенерированные типы в итоговую программу.
Это для generative. Erased работает по-другому (как именно — я пока не смотрел).

Evgeniy
08.10.2017
06:12:32
То есть SDK нужен просто для упрощения жизни? Я могу любым доступным образом собрать сборку и отдать компилятору?

Friedrich
08.10.2017
06:13:21
Поэтому, например, чтобы добавить поддержку каких-нибудь генерик-интерфейсов, нам придётся
а) поменять ProvidedTypes.fs — грубо говоря, добавить туда метод ProvideGenericInterface(...) : System.Reflection.TypeInfo, которая просто обычным рефлекшеном сгенерит тип
б) поменять принимающую сторону в компиляторе — сделать, чтоб она, завидев генерик-интерфейс, корректно копировала его в выходную сборку
Обе этих вещи не видятся очень уж сложными, на самом деле.

Nikolay
08.10.2017
06:16:12
Так Сайм в итоге хочет починить сохранение, или переписать апи, и обойтись там без сохранения?

Evgeniy
08.10.2017
06:18:05
> Обе этих вещи не видятся очень уж сложными, на самом деле.
На словах — да.

Friedrich
08.10.2017
06:18:55
При этом Дон хочет избежать бинарных зависимостей — то есть опять начать шарить файлы между проектами :)

Google

Friedrich
08.10.2017
06:20:24
(впрочем, это деталь реализации, и принципиального значения она не имеет в любом случае)

Nikolay
08.10.2017
06:20:52
Если это есть в компиляторе, то пропатчить компилятор, и кормить ему не байты а Assembly
Если это вообще ок
А что за IL Writer?

Friedrich
08.10.2017
06:22:26
А там и без того уже дохрена кода, плюс, насколько я понял, альтернативных вариантов API / Type Provider SDK и без того уже хватает.
А что за IL Writer?
Наверное, разговор был про это? https://github.com/Microsoft/visualfsharp/blob/master/src/absil/ilwrite.fs

Nikolay
08.10.2017
06:24:34
Ну если бы каждый не тащил себе в код реализацию Type Provider'ов, было бы ок)

Friedrich
08.10.2017
06:24:37
Вон — Дон как раз недавно в этом копался.

Evgeniy
08.10.2017
06:25:31

Friedrich
08.10.2017
06:25:51
Сейчас TypeProviders.fs включается в новые провайдеры средствами пакетного менеждера.
Этот файл по-настоящему не копипастят.
Так что всё более или менее ок.

Nikolay
08.10.2017
06:26:06
Хотя с другой стороны, это фича компилятора, и должна быть в стандартной поставке

Evgeniy
08.10.2017
06:26:40

Friedrich
08.10.2017
06:26:46
Если мы в будущем захотим сделать, чтоб TypeProviderSDK стала бинарной зависимостью, то можно будет это сделать без того, чтобы ломать код провайдеров. Это вообще радикальных изменений не потребует.

Nikolay
08.10.2017
06:26:46
Как сборка System

Friedrich
08.10.2017
06:27:12
Но я согласен, что изначальный вынос этого хозяйства в библиотеку был очень хорошим решением.