Size: a a a

F# Flood: Диванная теория всего

2020 August 01

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Хм.
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Мне кажется, что ты по-другому не сделаешь
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Да, строка, которая передаётся в лямбдочку, всегда зааллоцируется.
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Nikolay M
Строка то все равно аллоцируется
А тебя не устроит решение на #if?
источник

NM

Nikolay M in F# Flood: Диванная теория всего
Dr. Friedrich von Never
А тебя не устроит решение на #if?
Ну у нас галочкой можно включить лог 🙂
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Nikolay M
Ну у нас галочкой можно включить лог 🙂
Ну тады ой
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
А хотя…
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
В каком месте вообще аллоцируется строка? Printf.StringFormat уже это сделал или ещё нет?
источник

NM

Nikolay M in F# Flood: Диванная теория всего
Dr. Friedrich von Never
В каком месте вообще аллоцируется строка? Printf.StringFormat уже это сделал или ещё нет?
А вот хз
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Слушай, вроде нет
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Pavel
let myLog (x : '_a when '_a :> Printf.StringFormat<'_b,unit>)  =
#if ! DEBUG
 Printf.kprintf (printfn "%s") x
#else
 Unchecked.defaultof<_>
#endif
Ну таки да, попытка хорошая, но не сработала :(
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Там нельзя возвращать Unchecked.defaultof, потому что эта штука в обычной ситуации возвращает функцию
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
И её снаружи пытаются вызвать, передав аргументы
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Щя я сделаю.
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Короче, я придумал, как сделать, но делать мне неохота. Попробуй заполнить тудушку :)
let inline negate<'a>(): 'a =
   printfn "%A" <| typeof<'a>
   if typedefof<'a> = typedefof<FSharpFunc<_, _>> then
       // TODO: Generate a function of right type (see typeof<'a>.GetGenericTypeArguments()) that will ignore everything and return negate<> as its result
   else // terminal case, unit
       Unchecked.defaultof<_>

let debugLog format =
   if debug then
       Printf.kprintf (
           printfn "%A: %s" DateTime.Now
       ) format
   else negate()
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Я верю, что это можно сделать с кэшом, чтобы был zero-alloc на длинной дистанции
источник

NM

Nikolay M in F# Flood: Диванная теория всего
Dr. Friedrich von Never
Короче, я придумал, как сделать, но делать мне неохота. Попробуй заполнить тудушку :)
let inline negate<'a>(): 'a =
   printfn "%A" <| typeof<'a>
   if typedefof<'a> = typedefof<FSharpFunc<_, _>> then
       // TODO: Generate a function of right type (see typeof<'a>.GetGenericTypeArguments()) that will ignore everything and return negate<> as its result
   else // terminal case, unit
       Unchecked.defaultof<_>

let debugLog format =
   if debug then
       Printf.kprintf (
           printfn "%A: %s" DateTime.Now
       ) format
   else negate()
Чет дичь какая-то
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Nikolay M
Чет дичь какая-то
Я старался!
источник

NM

Nikolay M in F# Flood: Диванная теория всего
Dr. Friedrich von Never
Я старался!
А там получается функция с любым количеством аргументов?
источник

Dv

Dr. Friedrich von Ne... in F# Flood: Диванная теория всего
Nikolay M
А там получается функция с любым количеством аргументов?
А хер знает. Я специально добавил распечатку типа, проверь.
источник