
Vasily
05.10.2017
08:19:23
Кодстайл еще и т.д.

Roman
05.10.2017
08:19:40

Vasily
05.10.2017
08:20:01
митапчик мона замутить, да

Roman
05.10.2017
08:21:26
Ну вот. В рамках spb и msk .NET - могу сделать к зиме, сейчас еще на .NEXT готовить доклад про провайдеры (мы его тут тоже демократическим обсуждением выбирали)

Google

Roman
05.10.2017
08:22:15
А вообще, если у кого-то здесь есть, что рассказать об этом - вы пишите мне! Сведу с организаторами, поможем подготовить доклад и митап организуем :)

Vasily
05.10.2017
08:22:55
В провайдерах куча магии под капотом, к сожалению. И нет нормальной спеки, которая бы эту магию описывала
В продакшне такое не покатит

Roman
05.10.2017
08:23:55

Friedrich
05.10.2017
08:24:10
Но я не уверен, что там всё чисто :(

Roman
05.10.2017
08:24:44

Friedrich
05.10.2017
08:24:48
Так и не нашёл времени раскурить, что же там описано — толи это методы самого компилятора, толи этой магической портяночной копипасты ProvidedTypes.fs

Vasily
05.10.2017
08:25:30
Скорее портяночной копипасты

Roman
05.10.2017
08:25:31
Приезжай на дотнекст слушать доклад, хехе :D

Friedrich
05.10.2017
08:25:42
Мне упорно кажется, что, если эту портянку переписать, то можно будет гонять провайдеры под Mono.Cecil или любой другой нормальной библиотекой генерации байткода

Nikolay
05.10.2017
08:26:37

Google

Roman
05.10.2017
08:27:00

Friedrich
05.10.2017
08:27:23
В это очень сложно поверить :(
1. Сомневаюсь, что кто-то из ныне живущих это вообще понимает (я спрашивал в Slack F# и никто сходу не вспомнил)
2. Вряд ли это много кому интересно. Если потенциальные пользователи тайп-провайдеров — это в общем-то все программисты на F#, то их потенциальные авторы — это один процент от всех программистов на F# (которые хорошо если составят 1% от всех программистов под .NET)

Roman
05.10.2017
08:28:34

Friedrich
05.10.2017
08:29:24
Гольдштейна всегда слушаю с удовольствием, да.

Evgeniy
05.10.2017
08:29:52

Roman
05.10.2017
08:29:55
А так - будем ползать по коду провайдеров, исследовать магию и разбираться, как такие штуки имплиментить.

Evgeniy
05.10.2017
08:30:47

Roman
05.10.2017
08:30:48

Friedrich
05.10.2017
08:31:22
В смысле, давай пруфы, я б даже поконтрибьютил с удовольствием. Или хотя б моральную поддержку выразил :)

Evgeniy
05.10.2017
08:32:12
Кажется, это не зашло дальше экспериментов на локальной машине. :)

Friedrich
05.10.2017
08:36:07
Может, упрошу кого-нибудь меня проконсультировать по этому поводу.

Evgeniy
05.10.2017
08:36:35

Friedrich
05.10.2017
08:37:28
Мне вот кажется, что народ массово упускает там какие-то нюансы, и из-за этого Дону кажется, что это нереальная задача (портировать на Core).
А на самом деле это вполне решаемо. Я надеюсь.

Nikolay
05.10.2017
08:38:04
Вы про Generative сейчас, да?

Google

Friedrich
05.10.2017
08:38:06
Да.

Nikolay
05.10.2017
08:38:59
А они там уже разобрались, чего им не хватает, чтобы под кором запускать?

Evgeniy
05.10.2017
08:39:28

Nikolay
05.10.2017
08:40:26

Evgeniy
05.10.2017
08:40:33


Friedrich
05.10.2017
08:40:37
Кажется, там те же проблемы, что у @impworks с LENS и .NET Core. Не хватает каких-то API для кодогенерации. :)
LENS мы можем переписать на Mono.Cecil или любом подобном механизме (и, похоже, мы этим будем заниматься рано или поздно). @impworks изучал вопрос и пришёл к выводу, что там просто нельзя сохранять сборки (я не уверен, что это убивает идею провайдеров).
Вопрос в том, можем мы или не можем переписать ProvidedTypes.fs, и можем мы или нет переписать соответствующую часть компилятора, которая потребляет провайдеры типов. И нужно ли это делать.
Дон, конечно, говорит, что перекомпиляция провайдеров — не вариант, но я не уверен, что это такая уж плохоая идея. Надо подробно изучить вопрос и тогда уже всерьёз планировать реализацию.
Если у кого-то прямо сейчас есть на это время — я был бы готов оказать всемерную поддержку. Сам планирую до конца этого года выделить время и поразбираться.


Evgeniy
05.10.2017
08:44:45
@fvnever Ну, как бы.
https://github.com/dotnet/coreclr/issues/1709

Nikolay
05.10.2017
08:45:01

Andrew
05.10.2017
08:45:14
Да, я пока не нашел ничего более серьезного, чем невозможность сохранить сборку

Friedrich
05.10.2017
08:45:31

Andrew
05.10.2017
08:45:59
На самом деле для LENS и это не критично - сохранение нужно по большому счету для отладки компилятора, чтобы посмотреть сборку в ILSpy

Nikolay
05.10.2017
08:46:05

Andrew
05.10.2017
08:46:17
Но я особо глубоко не копал. Подозреваю, могут вылезти неприятные штуки

Friedrich
05.10.2017
08:46:35
В смысле, у нас очень большие проблемы сразу во всех компиляторных проектах (LENS, Naggum, PascalABC.NET, F#), и у всех этих проблем ноги растут из одного и того же места. Хочется исправить их все и сразу, ударить в самое сердце.

Evgeniy
05.10.2017
08:49:41
@fvnever Я бы начал с конкретного вопроса в каком-нибудь существующем ишшуе.

Google

Evgeniy
05.10.2017
08:51:46
Если я правильно понимаю, то проблема только в кодогенерции. Ну, у нас работают erased провайдеры, значит, с квотейшенами и рефлексией (не Emit) все должно быть хорошо в .NET Core.


Friedrich
05.10.2017
08:54:08
@fvnever Я бы начал с конкретного вопроса в каком-нибудь существующем ишшуе.
У меня план такой:
1. Разобраться, как разрабатывают тайп-провайдеры — как с включением «портяночного» кода, так и без его включения: какие API для этого есть у компилятора, как он нас вызывает, что он предоставляет нам и что мы предоставляем ему. Написать свой тайп-провайдер, само собой. В частности я припоминаю, что на выход мы ему даём Assembly, и отсюда мне непонятно, какие у этого механизма вообще могут быть ограничения в принципе — казалось бы, не должно быть.
2. Исходя из этого изучить соответствующие места компиятора — что он требует на вход от провайдера, и что с этим вводом делает.
3. Уже тут должно стать понятно, какие у механизма слабые места, и как их можно починить. Только здесь у меня могут появиться конкретные вопросы.
Тематика сложная, и времени на её исследование нужно посвятить много. Поэтому почти никто до сих пор никто как следует и не въехал, и поэтому у нас нет достаточно квалифицированных ресурсов, чтобы решить эту проблему.
По поводу сохранения сборок — я подумываю сделать какую-нибудь штуку, которая сохраняет их из памяти. Это не должно быть сложно вообще.
У нас есть все типы сборки, все их методы и доступ к IL-коду каждого метода. Это должно быть проще простого — сохранить её на диск.


Evgeniy
05.10.2017
08:58:39

Friedrich
05.10.2017
08:58:40
Если немножко поиграться с полифиллами — может, получится вообще сделать, чтоб это работало без изменений существующего кода (source, но не binary compatibility).
Почему этого до сих пор не сделали?
Верхи не хотят, низы не могут. Те, у кого есть знания, чтобы этим заняться, заняты более важными проблемами (почитай пост от jkotas вот тут, например: https://github.com/dotnet/corefx/issues/4491#issuecomment-189756092)
А те, у кого есть на это время, не обладают нужными знаниями и не уверены, что это вообще возможно (раз уж люди из первой категории не смогли сделать — то нам и рыпаться не стоит, правильно?)

Evgeniy
05.10.2017
09:00:37
Я читал.
Просто не увидел там "проще простого".

Friedrich
05.10.2017
09:01:08
Там про «более важные проблемы, которыми все заняты»

Admin
ERROR: S client not available

Evgeniy
05.10.2017
09:01:33
> It is not easy to just enable them for CoreCLR because of it would not work on Unix.

Friedrich
05.10.2017
09:01:37
@impworks а ты проверял, работает ли Emit на Core? Может, он просто эксепшены там бросает?
Ну то есть понятно, что API есть, но можно ли их вызвать?

Andrew
05.10.2017
09:02:17
Вообще нет, не проверял. Но сейчас время есть, могу попробовать даже сегодня накидать простенький примерчик

Friedrich
05.10.2017
09:02:30
А давай. Я вечером присоединюсь, может быть.
Надо что-то делать!
Кстати, я решил запаковать https://github.com/rspeele/TaskBuilder.fs в нугет. Сегодня вечером потестирую и кину автору PR.
Кто-нибудь знает rspeele? Куда ему лучше написать с вопросами? Или прямо в PR?

Evgeniy
05.10.2017
09:05:49

Google

Pavel
05.10.2017
09:13:30
http://blog.ploeh.dk/2017/10/05/monoids-semigroups-and-friends/ Первый пошел

Evgeniy
05.10.2017
09:14:21
А теперь нечто совсем другое
https://blog.xamarin.com/the-solar-system-with-arkit-and-f/

Roman
05.10.2017
09:31:12

Roman
05.10.2017
11:20:16

Летучая
05.10.2017
11:22:09
Го Сайма убеждать, чтоб порядок файлов убрал!

Roman
05.10.2017
11:22:32

Roman
05.10.2017
11:22:42

Roman
05.10.2017
11:34:56

Igor
05.10.2017
12:50:29
Я что-то упустил и Скот реально хаскелист?
https://youtu.be/gxIWhsJHXmM?t=27m11s

Roman
05.10.2017
13:22:05

Friedrich
05.10.2017
13:57:34
https://github.com/rspeele/TaskBuilder.fs/pull/8

Dmitry
05.10.2017
14:04:25
https://medium.com/javascript-scene/javascript-monads-made-simple-7856be57bfe8

Friedrich
05.10.2017
14:42:25
http://www.kuznero.com/posts/nixos/fsharp-mono-nixos-gotchas.html
Класс, этот чувак решил поиочь запилить .NET Core в NixOS :)

Evgeniy
05.10.2017
14:50:08
Ого!

Friedrich
05.10.2017
14:57:11
AssemblyBuilderAccess в .NET Core действительно не включает в себя SaveAndRun. Там только варианты Run и RunAndCollect.
Друзья, кто-нибудь имел дело с Mono.Cecil? Мы туда сможем засунуть динамическую сборку?
Я хочу попробовать дешёвый способ сохранения сборок через процессинг их какой-нибудь готовой библиотекой.

Vasily
05.10.2017
15:24:10
Мда, смотрю на AssemblyBuilder и не понимаю, как хотя бы стрим вытащить
Или массив байт