Nikolay
А блин
Dr. Friedrich
А он никогда не заходит в первое условие
Ну он же тебе названия типов печатает? Печатает. Вот и смотри туда.
Дмитрий
выглядеть будет ужасно (в фшарпе по крайней мере)
Dr. Friedrich
Мб там специализация какая-то неучтённая.
Dr. Friedrich
Если тут кто понимает, как работает FSPickle, то давайте попробуем сделать через него круто
Nikolay
Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]
Dr. Friedrich
Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]
А чо, у него typedefof разве не соответствует typedefof<FSharpFunc<_,_>>?
Dr. Friedrich
Вроде должен.
Dr. Friedrich
Мб там как-то совсем косоруко typedefof в этом месте заинлайнился?
Nikolay
Заходит туда
Dr. Friedrich
Ну лан
Nikolay
Ну короче такое генерит оно
Dr. Friedrich
На строчке debugLog "That: %d - %d = %d" 2 2 4 у меня сгенерилось такое: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.Unit]]]
Dr. Friedrich
Как я и предполагал, там всегда функция от одного аргумента.
Dr. Friedrich
Это упрощает дело, не правда ли?
Nikolay
Хм, да
Nikolay
И юнит всегда возвращаем
Dr. Friedrich
Остаётся сделать кэш таких функций
Dr. Friedrich
Правда, кажись, negate придётся разынлайнить
Pavel
Как я и предполагал, там всегда функция от одного аргумента.
в программировании функция всегда от одного аргумента )
Pavel
почему?
Dr. Friedrich
Ну, рефлекшеном можно у функции спросить количество аргументов, и там могут оказаться разные интересные числа, не равные единице.
Dr. Friedrich
В программировании.
Nikolay
Блин, а вот с генерацей функции проблемы 🙁
Dr. Friedrich
Я щя сделаю
Nikolay
Будет работать с AOT?
Dr. Friedrich
Будет работать с AOT?
Скорее всего, нет.
Dr. Friedrich
А тебе именно в AOT надо?
Nikolay
Ну вот поэтому и проблемы
Nikolay
Да)
Dr. Friedrich
Тогда давай другой подход прикинем
Dr. Friedrich
На тайппровайдерах не получится?
Nikolay
Написать тайппровайдер?
Dr. Friedrich
(я понимаю, что идея спорная, но хоть что-то)
Pavel
Ну, рефлекшеном можно у функции спросить количество аргументов, и там могут оказаться разные интересные числа, не равные единице.
по сути ты спрашиваешь кол-во элементов тупла который в функцию приходит или кол-во элементов в массиве аргументов (смотря с какой стороны рассматривать).
Dr. Friedrich
В F# не все функции сводятся к тем, аргументы которых можно запаковать в туполь.
Dr. Friedrich
Ну и это настоящая проблема
Dr. Friedrich
Потому что компилятор, как и ты, временами погружается в пучину иллюзий
Dr. Friedrich
https://github.com/dotnet/fsharp/issues/3362 вот пример
Dr. Friedrich
У меня есть функция, которая принимает uint32&, ссылку.
Dr. Friedrich
Компилятор решил, что хорошая идея — параметр пак для этой функции обернуть в туполь и положить в кучу.
Dr. Friedrich
Но вот незадача: этот параметр пак невозможно обернуть в туполь!
Дмитрий
Dr. Friedrich
https://github.com/dotnet/fsharp/issues/3362 вот пример
Вообще, я чота прозевал момент, когда всё это пофиксили. Какие молодцы, а!
Dr. Friedrich
Dr. Friedrich
Напиши на норм языке
Nikolay
@fvnever а тайп провайдер должен получается тупо заглушки генерить жеж?
Дмитрий
так я же уже написал
Dr. Friedrich
так я же уже написал
Я уже подумываю о том, чтобы в пронете твоё право голоса ограничить, кстати.
Dr. Friedrich
Но тут проблема в том, что ты не можешь его параметризовать типом
Dr. Friedrich
эээээ
Слишком много не по делу пишешь.
Dr. Friedrich
блжть
Ну вот да. Давай думать дальше.
Dr. Friedrich
В принципе, у нас набор типов в этом месте очень ограничен
Dr. Friedrich
Там бывают только вот эти все %s %d %A
Dr. Friedrich
То есть всякие там примитивы, ну и ещё обжекты для %A
Dr. Friedrich
Однако, мы не можем захардкодить огромный свитч по типам
Dr. Friedrich
Потому что там бывают вложенные функции (вот типа моего примера выше), и это комбинаторный взрыв получается.
Nikolay
Ну да, я думал, главный трабл в том, что тип там любой может быть
Dr. Friedrich
щящя, погоди
Dr. Friedrich
SRTP нас не спасёт?
Dr. Friedrich
Давай пробовать на SRTP, ёпта
Pavel
Компилятор решил, что хорошая идея — параметр пак для этой функции обернуть в туполь и положить в кучу.
ну так это проблема конкретной реализации конкретного компилятора, а подхода что у функции всегда 1 агрумент.
Dr. Friedrich
Там вот как раз можно выпендриться, давайте выпендриваться
Nikolay
А сртп как поможет?
Dr. Friedrich
ну так это проблема конкретной реализации конкретного компилятора, а подхода что у функции всегда 1 агрумент.
До этого у тебя было более конкретное утверждение: ты сказал, что любой пак из нескольких аргументов можно представить как туплю
Dr. Friedrich
Я это утверждение опроверг
Dr. Friedrich
Если у тебя что-то более расплывчатое, то я обсуждать не буду.
Dr. Friedrich
А сртп как поможет?
Давай думать
Dr. Friedrich
Я думаю, что поможет
Pavel
это в каком таком программировании
в любом кроме ассемблера
Dr. Friedrich
Нам просто нужно сделать два кейса SRTP