Size: a a a

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

2020 September 11

KT

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

V

Vladimir in Язык программирования Julia / Julia programming language
Проверю. Т.е. если к примеру вместо Int вдруг дать Float, то это может вызвать перекомпиляцию?
источник

A

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

KT

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

VG

Viktor G. in Язык программирования Julia / Julia programming language
Это что же за функция такая, которая компилится 2 минуты и съедает Гб? Похоже на целый пакет...
источник

V

Vladimir in Язык программирования Julia / Julia programming language
Большая функция просто - можно сказать целый пакет: поиск минимума REML. Как этого можно избегать? Указывать параметрические типы на входе?
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
делать function barriers
источник

VG

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

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
если гиг, то почти наверное type instability где-то )
источник

V

Vladimir in Язык программирования Julia / Julia programming language
Спасибо! К примеру функция f(x)::AbstractMatrix{Float64}  не будет считаться стабильной?
источник

АО

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

АО

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

V

Vladimir in Язык программирования Julia / Julia programming language
Ок, спасибо!
источник

V

Vladimir in Язык программирования Julia / Julia programming language
Я имел в виду, что если, к примеру, функция возвращает то Symmetric, то Diagonal (или ещё что-то из AbstractMatrix), то стабильной она не будет, то что конкретный Float64 внутри - не имеет значения.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Нет, дело не в этом.
В самом простом варианте - если функция при каких-то условиях возвращает Symmetric, а при каких-то Diagonal при одном и том же типе входящих данных, то тогда она не будет type stable.
источник

АО

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

V

Vladimir in Язык программирования Julia / Julia programming language
Так. 😸 Я может тогда не очень понимаю что значит стабильная функция. f(x)::Float64 ведь будет железно стабильна? А f(x::T)::T where T <: Real - скорее не будет.
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
Функция называется стабильной, если все "внутри использующиеся" переменные не меняют тип

function f() :: Float64
      x = 1
      x += 0.5
      return x
end


не является стабильной
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
function f(x)
 if x > 1
   return “hello”
 else
   return 0
 end
end


Вот это пример нестабильной функции.
источник

KT

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