@Fsharp_chat

Страница 341 из 772
Vasily
05.10.2017
08:19:23
Кодстайл еще и т.д.

Roman
05.10.2017
08:19:40
Ну лично мне было бы интересно в т.ч. как это ложится на CI etc
Ну вот в том и штука, что лично тебе. Пока аудитории маловато. Но я могу попробовать сделать такое на уровне митапа!

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
Но я не уверен, что там всё чисто :(

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
А там прям про потроха будет?
Ты приезжай, расскажешь про потроха .Net :)

Google
Roman
05.10.2017
08:27:00
А там прям про потроха будет?
Ага. Я попытаюсь завернуть это в культурные понятные слова, но будет обзор потрохов

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

Ты приезжай, расскажешь про потроха .Net :)
Да я ж ничего про потроха-то и не знаю. Так, слов умных нахватался, и всё.

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

Evgeniy
05.10.2017
08:29:52
Мне упорно кажется, что, если эту портянку переписать, то можно будет гонять провайдеры под Mono.Cecil или любой другой нормальной библиотекой генерации байткода
Кажется, @7sharp9 недавно предпринимал попытки переписать портянку на чем-то, что работает про .NET Core в том числе. Но это сложно.

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

Evgeniy
05.10.2017
08:30:47
Кажется, @7sharp9 недавно предпринимал попытки переписать портянку на чем-то, что работает про .NET Core в том числе. Но это сложно.
Кажется, это один из двух-трех человек, которые хорошо понимают, как работают провайдеры изнутри.

Roman
05.10.2017
08:30:48
Гольдштейна всегда слушаю с удовольствием, да.
Гольдштейн хорош, да! Но скажем прямо, то, о чем он рассказывает, тоже мало кто юзает. Просто послушать интересно

Friedrich
05.10.2017
08:31:22
Кажется, @7sharp9 недавно предпринимал попытки переписать портянку на чем-то, что работает про .NET Core в том числе. Но это сложно.
«На улице детей увидишь, Кавайных кошек и собак, И хочется их как-то лайкнуть. Но как?»

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

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

Nikolay
05.10.2017
08:40:26
Давно, кажется.
Это вроде было до 2.0, и относилось к erased, не?

Friedrich
05.10.2017
08:40:37
А они там уже разобрались, чего им не хватает, чтобы под кором запускать?
Все просто говорят, но без конкретики. Мне кажется, что глубоко никто не разбирался, кроме 7sharp9.

Кажется, там те же проблемы, что у @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

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

Friedrich
05.10.2017
08:45:31
Я могу попробовать вечером или на выходных, если время будет
Ну, если соберёшься — пиши в чат или приватно. Закидаем эту проблему шапками!

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

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

Friedrich
05.10.2017
08:46:35
На самом деле для LENS и это не критично - сохранение нужно по большому счету для отладки компилятора, чтобы посмотреть сборку в ILSpy
У меня есть планы на все эти компиляторные API, так что я бы хотел исследовать полноценные опции сразу.

В смысле, у нас очень большие проблемы сразу во всех компиляторных проектах (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-коду каждого метода. Это должно быть проще простого — сохранить её на диск.

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?

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
Вы это, лучше имена называйте! Ну и темы можно, конечно, но относительно человека. Сайм - это да, это принял!
Мигель говорил о том, что он бы выбирал F# для разработки. Было б круто его притащить)

Roman
05.10.2017
11:20:16
Мигель говорил о том, что он бы выбирал F# для разработки. Было б круто его притащить)
Мигель - это прикольно, но вряд ли он про F# все же будет рассказывать

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

Roman
05.10.2017
11:22:32
Roman
05.10.2017
11:22:42
Если хайп поднять, то аудитория расширится)
Ну, я в некоторой степени это и пытаюсь сделать. Но много докладов по F# нельзя просто с коммерческой точки зрения

Я бы в любом случае его послушал бы)
Да, идею принял, попробую его позвать на следующий дотнекст

Roman
05.10.2017
11:34:56
Ну, я в некоторой степени это и пытаюсь сделать. Но много докладов по F# нельзя просто с коммерческой точки зрения
Уже на этом докладе много людей говорящих про функциональный подход. Пятая часть по моему.

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

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
Вообще нет, не проверял. Но сейчас время есть, могу попробовать даже сегодня накидать простенький примерчик
В общем, я щас попробовал вот этот код адаптировать: http://www.c-sharpcorner.com/uploadfile/puranindia/reflection-and-reflection-emit-in-C-Sharp/ После установки пакета System.Reflection.Emit и замены Thread.GetDomain().DefineDynamicAssembly на AssemblyBuilder.DefineDynamicAssembly у меня получилось его запустить и выполнить на .NET Core 2.

AssemblyBuilderAccess в .NET Core действительно не включает в себя SaveAndRun. Там только варианты Run и RunAndCollect.

Друзья, кто-нибудь имел дело с Mono.Cecil? Мы туда сможем засунуть динамическую сборку?

Я хочу попробовать дешёвый способ сохранения сборок через процессинг их какой-нибудь готовой библиотекой.

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

Или массив байт

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