@Fsharp_chat

Страница 533 из 772
Eugene
03.04.2018
15:48:49
Кстати, баги на гитхабе лучше не писать же? А то там ишуи открыты
Было бы удобнее на ютреке, ибо там почти всё.)

Friedrich
03.04.2018
15:49:12
Vasily
03.04.2018
15:49:30
Ну вот у меня выстрелило в интересном месте

Google
Friedrich
03.04.2018
15:49:33
В целом всё так. В случае с райдером ещё сложность в том, чтобы протащить всё из FCS в решарпер, и чтобы при этом оно не стало сильно медленнее. Из интересных сложностей: в других языках обычно можно по синтаксису понять, во что скомпилируется декларация символа хотя бы на уровне "это будет класс" или "это будет интерфейс" и это позволяет строить кэш по синтаксическим деревьям, а потом уже поверх него и информации из сборок и другого кода можно выводить остальное, например, считать типы в методе или базовые классы. В F# же часто нельзя понять, что получится в скомпилированной сборке, и это усложняет анализ F# <-> C# в случае с решарпером и вообще интеграцию с его кэшами. Например, до резолва/вывода типов неизвестно, во что скомпилируется тип, ведь, например, атрибут [<Class>] может порезолвиться во что-нибудь другое, если его переопределить. Или нельзя синтаксически отличить Union с одним случаем и без | от аббревиатуры типы. Если делать честный резолв, то это будет крайне медленно. В Rider/VS/Ionide есть эвристики, которые работают достаточно хорошо, но их все можно сломать. Ещё из похожего, например, нельзя понять, будет ли функция из F# методом или свойством в сборке. Проблема в выводе типов и порядке файлов. На текущий момент нельзя быстро узнать что-либо про произвольный файл, пока не пройдёт проверка типов для всех предыдущих файлов в проекте (что бывает достаточно долго), а прикрутить сюда инкрементальную инвалидацию, со слов Дона, будет довольно сложно.
Спасибо за пояснения, было интересно ознакомиться.

Vasily
03.04.2018
15:49:37
при partial apply

И данные из стрима попытались считаться в обратном порядке :)

Еще интересный факт

f a b в с# уедет как кортеж

f(a,b)

Anna
03.04.2018
15:52:18
В целом всё так. В случае с райдером ещё сложность в том, чтобы протащить всё из FCS в решарпер, и чтобы при этом оно не стало сильно медленнее. Из интересных сложностей: в других языках обычно можно по синтаксису понять, во что скомпилируется декларация символа хотя бы на уровне "это будет класс" или "это будет интерфейс" и это позволяет строить кэш по синтаксическим деревьям, а потом уже поверх него и информации из сборок и другого кода можно выводить остальное, например, считать типы в методе или базовые классы. В F# же часто нельзя понять, что получится в скомпилированной сборке, и это усложняет анализ F# <-> C# в случае с решарпером и вообще интеграцию с его кэшами. Например, до резолва/вывода типов неизвестно, во что скомпилируется тип, ведь, например, атрибут [<Class>] может порезолвиться во что-нибудь другое, если его переопределить. Или нельзя синтаксически отличить Union с одним случаем и без | от аббревиатуры типы. Если делать честный резолв, то это будет крайне медленно. В Rider/VS/Ionide есть эвристики, которые работают достаточно хорошо, но их все можно сломать. Ещё из похожего, например, нельзя понять, будет ли функция из F# методом или свойством в сборке. Проблема в выводе типов и порядке файлов. На текущий момент нельзя быстро узнать что-либо про произвольный файл, пока не пройдёт проверка типов для всех предыдущих файлов в проекте (что бывает достаточно долго), а прикрутить сюда инкрементальную инвалидацию, со слов Дона, будет довольно сложно.
интересно, спасибо!

Vasily
03.04.2018
15:52:37
И обратно тоже кортежем приедет

А это засада

Friedrich
03.04.2018
15:53:06
ДЛя выражения f a b сначала будет вычислено b
Погоди, а чёт у меня не воспроизвелось: https://sharplab.io/#v2:DYLgZgzgNALiBOBXAdgH2AUxgAgLaJgEMAjTbAD2wF5sAGAWAChMcMwwMBjGACgEpqFbAB4AtEIDU2AIwBubAAd4AS2QwwybACIApAEEtFeeSYtsYAPYWhAT0FLV6zbr3Z9hyjaaXrPNh25+AT92Ll4+PiA= Видишь? Сначала 1, потом 2.

Artemy
03.04.2018
15:53:58
Буду рад посмотреть на репро. ;)
Ну в моём случае репро простое — создать в студии проект и открыть его (ранее я как-то уже описывал проблему; проблема была в FSharpTargetsPath — у меня вместо него Райдер пустую строку видит). Но оказалось, что это только у меня такая проблема.

Friedrich
03.04.2018
15:54:16
Artemy
03.04.2018
15:54:28
Вот те мои старые сообщения

Google
Artemy
03.04.2018
15:54:28
Поставил себе Rider (2017.2 EAP). Есть 2 вопроса/проблемы: 1) Не нашёл шаблона для F#-проекта 2) Существующий проект не открывается. Event log следующий: 22:19 Project 'ConsoleApplication1' load failed: значение "" атрибута "Project" в элементе <Import> недопустимо. Длина параметра "path" не может быть равна нулю. D:\Study\Prog\F#\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.fsproj at (69:3) 22:19 MSBuild targets were not found: Make sure that all SDKs required for projects in this solution are installed, or specify a different MSBuild version in settings. 22:19 Could not open F# project: F# SDK or project dependencies are missing. Try restoring NuGet packages; if the problem persists, please install F# SDK. Проконсультируйте, кто может, пожалуйста. :)

P.S.: На компе уже установлена VS 2017 Community с поддержкой F#, а в настройках Rider в Build, Execution, Deployment Toolset and Build → Toolset and Build → Use MSBuild version выбрано "Auto detected (15.0)". Ну и путь — Program Files (x86)\MSBuild\15.0\bin\MSBuild.exe .

Починил и это. В файле проекта вместо <Import Project="$(FSharpTargetsPath)" /> поставил <Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')"/> (2-й вариант используется в файле проекта, созданном непосредственно через Rider)

Friedrich
03.04.2018
15:55:49
Ты возьми f a b
Поясни? Чего взять, куда взять? Можешь в коде показать, как можно испортить?

Vasily
03.04.2018
15:55:53
Допустим

Ща

У меня просто на рабочем компе нету интернетов

ПОэтому все печально

Но попробую написать

Friedrich
03.04.2018
15:56:48
Ну мы никуда не торопимся же

Можешь написать, когда интернеты появятся :)

Дискуссия от нас никуда не убежит.

Vasily
03.04.2018
15:57:44
let f partialFunc = func s->partialFunc(s) data

Как-то так

Где data тоже 's->'a некоторый

Friedrich
03.04.2018
15:58:08
Так-с, и в этом случае что в каком порядке будет вычислено?

Google
Vasily
03.04.2018
15:58:17
Угадай :)

Точнее там (data s)

Я просто пишу адскую наркоманию

ПОка делать особо нечего, а деньги платят

Friedrich
03.04.2018
15:59:06
fun s -> partialFunc (data s)?

Artemy
03.04.2018
15:59:18
А вот сейчас я создал чистый проект "Client-Server Application" для WebSharper 4.2, исправил в файле проекта <Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')"/>, чтобы проект загружался (потому что до сих пор не загружается проект без правок). Он начал загружаться, но в процессе "Processing source files" вылетает ошибка: https://i.imgur.com/BuCvdE6.png

Vasily
03.04.2018
15:59:19
partialFunc(s)

Artemy
03.04.2018
15:59:29
^ @auduchinok

Vasily
03.04.2018
15:59:54
Короче, там фишка в том, что есть функция создания объекта

Есть ридер параметров

Artemy
03.04.2018
16:00:21
А это у тебя же студия по нестандартному пути установлена?
Не знаю, вроде стандартно всё. По крайней мере я при установке ничего не менял

Vasily
03.04.2018
16:00:22
Параметры заворачиваются в функции вида 's->'a

А потом их надо зааплаить на текущую функцию

И да, я знаю, что я наркоман

Friedrich
03.04.2018
16:00:51
Vasily
03.04.2018
16:01:02
Ща фоточку пришлю

Friedrich
03.04.2018
16:01:02
Мне кажется, это окружением могло сломаться.

Friedrich
03.04.2018
16:01:42
(у меня в Mono ломалось постоянно из-за того, что у меня там была какая-то левота в окружении)

Google
Eugene
03.04.2018
16:01:53
Vasily
03.04.2018
16:02:21


Friedrich
03.04.2018
16:02:30
У меня вот ещё FSHARPINSTALLDIR определён на уровне системы — кажется, когда я устанавливал студию, он задефайнился

Vasily
03.04.2018
16:02:34
Короче, в лучших традициях :(

Приходится фоткой

То, что на фото, работает ок

Friedrich
03.04.2018
16:03:05
Интересный DSL'чик, кстати. Я припоминаю пару мест, где он бы пригодился.

Vasily
03.04.2018
16:03:06
Если написать однострочник, то не ок

Ну вот я его ваяю

Этот dsl

Friedrich
03.04.2018
16:03:28
Опенсурсить потом будешь?

Vasily
03.04.2018
16:03:36
Вообще планирую

В целом, он и сейчас работает

Friedrich
03.04.2018
16:03:50
А, это тот самый твой универсальный сериализатор?

Artemy
03.04.2018
16:03:54
А давай в новой консоли выведи echo %FSharpTargetsPath%
Хм, ну "%FSharpTargetsPath%" и выводит.) Я так понимаю, потому что нету переменной

Vasily
03.04.2018
16:03:57
Ну типа того

Friedrich
03.04.2018
16:04:19
Это интересно, мб пригодится для научных нужд. Я подумываю напилить либу для чтения VTK-формата.

https://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf вот этого

Vasily
03.04.2018
16:04:43
Ну мне там надо пару абстракция надпилить

Чтобы отвязать билдер от контекста ридера\райтера

Google
Friedrich
03.04.2018
16:05:14
Для дотнета есть либа, но она какая-то жутная

Я её попробовал заюзать в многопоточном режиме, и у меня посыпались SEH-исключения из некой mummy.dll

Тут-то я и понял, что плохо дело ?

Vasily
03.04.2018
16:05:49
:)

Ну я планирую без посторонних библиотек

Friedrich
03.04.2018
16:06:10
Ну и там у них на C++/CLI всё, с какими-то кастомными врапперами непотокобезопасными

Т.е. неткор пролетает, да и в коде никогда не разобраться

В общем, у VTK'шников фуфельно всё, надо переделывать.

Vasily
03.04.2018
16:06:48
Правда, надо понять, как снаружи принимать функцию создания объекта

Vasily
03.04.2018
16:07:08
С возможностью partial apply

Чтобы из C# можно было ридеры задавать

Кстати, вопрос

params c# во что в F# трансформируется?

Artemy
03.04.2018
16:08:21
И ещё бы логи было бы круто посмотреть.
Да, сейчас закину всё. Но похоже, причина действительно в том, что нет переменной окружения FSharpTargetsPath.

Friedrich
03.04.2018
16:08:31
F# в это умеет, вроде как.

Ну а вообще-то это обычный массив, можешь ему туда массив и просунуть.

Vasily
03.04.2018
16:10:25
ParamArray подойдет в теории

Осталось понять, как его на билдер натянуть с partial apply

Friedrich
03.04.2018
16:10:43
Во, точно

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