Size: a a a

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

2020 May 25

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
хм
источник

A

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

АО

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

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
да
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
То есть f(x) = (x, )
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
struct Foo{T}
      x :: T
end

foo = Foo([1,2,3])

m(foo) = foo.x

m2(foo) = (foo.x, 1)
источник

A

Alexandr in Язык программирования Julia / Julia programming language
julia> mutable struct It
      arr::Vector{Int64}
      end

julia> function it_test(it)
      push!(it.arr, length(it.arr))
      return it.arr
      end
julia> itt = It([])
It(Int64[])
julia> sizehint!(itt.arr, 100)
0-element Array{Int64,1}
julia> @time it_test(itt)
 0.000002 seconds
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
вот m не аллоцирует, а m2 аллоцирует
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Обернутый в тупл да, тут надо разбираться почему. Т.е. массив явно не копируется, а такое ощущение что создается какая-то mutable обертка над массивом или над указателем на массив
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
В качестве иллюстрации, я вот что имею в виду:
struct Foo{T} 
   arr::T
end

function process(f, x::Foo)
   for i=0:1, j=0:1, k=0:1
       x.arr[1] = i
       x.arr[2] = j
       x.arr[3] = k
       f(x.arr)
   end
end

foo = Foo([0, 0, 0])

process(foo) do x
   println(sum(x))
end


Разумеется тут свои ограничения вылезают (например break или continue сделать нельзя), и сильно зависит от того, как это всё будет использоваться.
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
мне нужно перебрать все функции из одного множества в другое, поскольку их дофига обычно, то я писал итератор, но он всё равно аллоцирует понемногу, хотя и не так много, как collect сделать )
источник

АО

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

АО

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

VG

Viktor G. in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
вот m не аллоцирует, а m2 аллоцирует
А это случайно не связано с тем, что пофиксили в следующей версии? Аллокация view?
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
хм
источник

A

Arthur in Язык программирования Julia / Julia programming language
В новой версии вроде как сделали оптимизацию аллокаций иммутабельных структур, которые содержат ссылки
источник

A

Arthur in Язык программирования Julia / Julia programming language
Но кор девы на дискурсе говорили, что struct не даёт гарантий того, где он размещается, компилятор может решить его и на кучу закинуть
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Version 1.3.1
@time Tuple{Int}(1)
 0.000017 seconds (5 allocations: 176 bytes)

Version 1.4.1
julia> @time Tuple{Int}(1)
 0.000000 seconds
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Видимо мне пора апгрейдится. Пока у меня 1.3.1 основная для разработки
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Все ждут 1.5 😊
По ходу очень серьёзный релиз получается.
источник