@Fsharp_chat

Страница 347 из 772
Evgeniy
07.10.2017
09:48:46
Я поискал такой файл в FSharp.Data и не нашёл.
Наверное, реализация в другом файле?

Я думаю, FSharp.Data писали до StarterPack.

Friedrich
07.10.2017
09:49:25
Наверное, реализация в другом файле?
Не. Реализация ставится из пакета, поэтому её не закоммитили, вот и всё.

Google
Friedrich
07.10.2017
09:51:07
Ваши доказательства?
https://github.com/fsharp/FSharp.Data/blob/9d1fb58aa1dfc51e8b4649c7eb4c0f612b9bc559/src/FSharp.Data.DesignTime.fsproj#L57

Ребят, а, может, там проблемы деплоймента? Типа больше 1 DLL нельзя в тайп-провайдер добавлять, и из-за этого приходится весь код тащить с собой?

Ну хотя бы не сейчас, а раньше были, например.

Evgeniy
07.10.2017
09:57:55
https://github.com/fsprojects/FSharp.TypeProviders.SDK/pull/132

?
07.10.2017
09:58:29
sc

Friedrich
07.10.2017
10:05:03
https://github.com/fsprojects/FSharp.TypeProviders.SDK/pull/132
Похоже, как я и подозревал, там вообще какие-то мутные проблемы, далёкие от простого сохранения сборок.

Но всё же дождёмся ответа от остальных. Может быть, наша проблема тоже существует.

Nikolay
07.10.2017
10:10:08
@fvnever а ты пытался адаптировать на конкретном провайдере?

Или просто свою сборку сгенерировать

Friedrich
07.10.2017
10:28:56
@fvnever а ты пытался адаптировать на конкретном провайдере?
Нет, не пытался. Пока ждём, не вижу смысла дёргаться.

Полноценная адаптация — это большая работа.

В смысле, надо будет написать хороший код для перевода массива инструкций из Mono.Reflection в Mono.Cecil.

Google
Nikolay
07.10.2017
10:29:40
Взять готовый провайдер и попробовать dnlib

Не?

Friedrich
07.10.2017
10:29:48
Что пробовать-то?

Nikolay
07.10.2017
10:30:06
Загрузить модуль и сохранить

Friedrich
07.10.2017
10:30:10
Начнём с того, что провайдер у тебя просто не скомпилируется под Core.

Friedrich
07.10.2017
10:30:39
Потому что нет AssemblyBuilderAccess.Save

Nikolay
07.10.2017
10:30:56
Friedrich
07.10.2017
10:31:05
Во-вторых, dnlib вообще не подошёл — не умеет работать с reflection-only сборками. Я пробовал и получил исключение.

Nikolay
07.10.2017
10:31:05
Загружать туда модуль, а потом сохранять

Если это единственная проблема

Friedrich
07.10.2017
10:31:17
Заменить его на dnlib
Что заменить, весь ProvidedTypes.fs?

Ты видел сколько там кода?

Nikolay
07.10.2017
10:31:34
Что заменить, весь ProvidedTypes.fs?
Нет. Конкретно место где Save вызывается

Friedrich
07.10.2017
10:32:20


Nikolay
07.10.2017
10:32:50
Что такое HINSTANCE?

Просто посмотреть, мб получится его починить

Google
Friedrich
07.10.2017
10:33:01
В душе не знаю :) Какой-то хендл.

Не получится.

Оно хочет найти у DLL'ки хендл, который, видимо, генерируется в обычном дотнете (по крайней мере, для Save должен — я так думаю).

В коре хендл не генерируется.

Nikolay
07.10.2017
10:35:27
https://github.com/0xd4d/dnlib/issues/19

Это видел?

Friedrich
07.10.2017
10:36:07
Нет, не видел.

Nikolay
07.10.2017
10:36:46
Не уверен, что это нам поможет

Friedrich
07.10.2017
10:37:04
Кажись, это примерно то же, что Mono.Reflection. Поможет, но частично.

Nikolay
07.10.2017
10:37:24
Надо посмотреть апи, может туда надо ридер передать

И оно заработает

Evgeniy
07.10.2017
11:51:03
Посмотрите, о чем твитнул(а) @AntyaDev: https://twitter.com/AntyaDev/status/916302839974125568?s=09

Vasily
07.10.2017
12:00:36
Что такое HINSTANCE?
Виндовс специфичный объект-указатель на ресурс. Там скорее всего проблема в том , чтобы отвязать работу с длл от винапи

Nikolay
07.10.2017
12:01:35
Код такой: IntPtr addr = Marshal.GetHINSTANCE(mod); if (addr == new IntPtr(-1)) throw new InvalidOperationException(string.Format("Module {0} has no HINSTANCE", mod));

В .Net Core компилируется, в .Net Standard 2 - нет

Friedrich
07.10.2017
12:02:01
Это скорее хак. Авторы dnlib заложились на тот факт, что рантайм генерирует настоящую DLL в памяти для тех случаев, когда ты говоришь AssemblyBuilderAccess.Save.

И они эту DLL из памяти вытаскивают и анализируют.

Nikolay
07.10.2017
12:02:27
@fvnever а если выпилить эту проверку?

Friedrich
07.10.2017
12:02:40
Дальше идёт работа с addr.

Google
Nikolay
07.10.2017
12:02:53
аа, вижу

Friedrich
07.10.2017
12:03:13
Я в первую очередь слазил в код и примерно посмотрел, что там как :)

В общем, эта тема просто под кором не будет работать. И под обычным дотнетом в аналогичном сценарии (AssemblyBuilderAccess.Run) тоже не работала.

Nikolay
07.10.2017
12:03:54
Странно, GetHINSTANCE есть в .Net Core

Но нет в .Net Standard

Friedrich
07.10.2017
12:04:29
Ничего странного же. Решили не публиковать настолько платформозависимую функцию в кроссплатформенном стандарте, молодцы.

А в коре решили всё равно реализовать ?

Nikolay
07.10.2017
12:05:03
Friedrich
07.10.2017
12:05:12
Зато, например, в Xamarin или UWP этой функции может не быть, и они всё равно останутся compliant.

Nikolay
07.10.2017
12:05:24
И там не заработает?

Friedrich
07.10.2017
12:05:59
Не заработает, конечно. А оно нам надо? Вроде бы нет.

Nikolay
07.10.2017
12:06:14
Чтобы генерировать сборку надо :)

Friedrich
07.10.2017
12:06:22
Не надо же.

У нас компилятор не хостится ни в каком Xamarin'е или UWP.

Nikolay
07.10.2017
12:07:21
А, точно. Оно только компилятору надо

Igor
07.10.2017
12:07:49
Посмотрите, о чем твитнул(а) @AntyaDev: https://twitter.com/AntyaDev/status/916302839974125568?s=09
А мне нравится ходить на простые .NET митапы. Приходишь и чувствуешь превосходство над этими c#-ооп’ешниками ? (Кстати, автор твита же ?on⛰)

Nikolay
07.10.2017
12:15:26
https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/master/src/ProvidedTypes.fs#L2778 Я так понимаю это типа валидация, что сборка корректная?

Friedrich
07.10.2017
12:16:47
https://github.com/fsprojects/FSharp.TypeProviders.SDK/blob/master/src/ProvidedTypes.fs#L2778 Я так понимаю это типа валидация, что сборка корректная?
Хм, хороший вопрос. Ну, никакого другого эффекта от этого кода я не вижу. Байты к этому моменту уже прочитаны.

Хотя не нравится мне этот код.

Nikolay
07.10.2017
12:17:37
Комментируйте код, господа

Google
Friedrich
07.10.2017
12:17:42
Он же загружает сборку в контекст, и её больше никто не выгрузит.

Комментируйте код, господа
Как минимум такое вот нестандартное использование методов обязательно нужно комментировать! // validate assembly correctness

А я попробую спросить в Slack.

Nikolay
07.10.2017
12:19:00
В каком канале?

Нашёл :)

Friedrich
07.10.2017
12:19:20
В который ты зашёл :)

Nikolay
07.10.2017
12:22:04


Похоже да, для проверки

А нет, ошибочка

Evgeniy
07.10.2017
14:37:38
Привет!

qupear
07.10.2017
14:39:15
Привет!
привет

Evgeniy
07.10.2017
14:39:47
привет
Пишешь на F#?

Igor
07.10.2017
16:11:58
Народ, где можно почитать про монад-трансформеры для чайников?

Aleksey
07.10.2017
16:36:02
Народ, где можно почитать про монад-трансформеры для чайников?
Если хаскель сойдет в качестве языка примеров, то есть такой пейпер - "All about monads", там хорошо описано

Примеры там в целом доходчивые, так что всяко стоит взглянуть

Igor
07.10.2017
16:39:13
Спасибо

Evgeniy
07.10.2017
17:39:19
@fvnever https://github.com/fsprojects/FSharp.TypeProviders.SDK/pull/133

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