Size: a a a

Язык программирования Julia / Julia programming language

2020 January 23

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
а если я в цикле начну переворачивать разной длины туплы
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Ага!
Тут хитро
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
3,4,5,... он каждую компилировать бюудет?
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Если ты просто будешь переворачивать, то он забоксит и напишет не самый эффективный алгоритм с циклом обычным.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Но если ты воспользуешься function barrier, то тогда он сделает отдельные версии
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Хм.
Может я и ошибаюсь 😊 reverse скорее всего уже сам является function barrier, поэтому должен сам это сделать.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
ну да, но всё-таки: если я переворачиваю 20 туплов, то он компилирует 20 версий reverse?
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Это же жёстко
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Если они все разной длины - то должен, да.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Только с точки зрения времени компиляции.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Зато execution time будет космический.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Ха, нет, не будет он таким заниматься
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
function f()
  for t in [(1, 2), (1, 2, 3)]
     reverse(t)
  end
end

@code_warntype f()

Variables
 #self#::Core.Compiler.Const(f, false)
 @_2::Union{Nothing, Tuple{Tuple{Int64,Int64,Vararg{Int64,N} where N},Int64}}
 t::Tuple{Int64,Int64,Vararg{Int64,N} where N}

Body::Nothing
1 ─ %1  = Core.tuple(1, 2)::Core.Compiler.Const((1, 2), false)
│   %2  = Core.tuple(1, 2, 3)::Core.Compiler.Const((1, 2, 3), false)
│   %3  = Base.vect(%1, %2)::Array{Tuple{Int64,Int64,Vararg{Int64,N} where N},1}
│         (@_2 = Base.iterate(%3))
│   %5  = (@_2 === nothing)::Bool
│   %6  = Base.not_int(%5)::Bool
└──       goto #4 if not %6
2 ┄ %8  = @_2::Tuple{Tuple{Int64,Int64,Vararg{Int64,N} where N},Int64}::Tuple{Tuple{Int64,Int64,Vararg{Int64,N} where N},Int64}
│         (t = Core.getfield(%8, 1))
│   %10 = Core.getfield(%8, 2)::Int64
│         Main.reverse(t)
│         (@_2 = Base.iterate(%3, %10))
│   %13 = (@_2 === nothing)::Bool
│   %14 = Base.not_int(%13)::Bool
└──       goto #4 if not %14
3 ─       goto #2
4 ┄       return
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
То есть он по сути говорит, что массив [(1, 2), (1, 2, 3)] имеет странный тип Tuple{Int, Int, Vararg{Int64, N}) where N и такой же будет переменная t
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
И код напишет неоптимальный
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
function f()
         reverse((1, 2))
         reverse((1,2,3))
         reverse((1,2,3,4))
      end
end
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Ха ха, с этим сложно, потому что на таких простых примерах компилятор по полной отрабатывает.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Он вообще никаких функций вызывать не будет
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Да ещё будет удалять "мёртвые" вызовы.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
а кто-то видел вычисление дискретного преобразования Фурье? на Julia
источник