Size: a a a

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

2021 July 06

DB

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

АО

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

АО

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

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Идея в том, чтобы математическая функция писалась в максимально шаблонном виде и умела работать с самым широким спектром чисел(f32, f64, big, complex) а не просто выдавала ошибку, когда в результате получается что то отличное от big
источник

A

Alexandr in Язык программирования Julia / Julia programming language
function foo(a, b, c, d)
   local r
   if some_condition
      r = a/b
   else
      r = c/d
   end
   return r
end
Функция выше нестабильна по типам, а функция ниже стабильна
function foo(a, b, c, d)
   local r::BigFloat
   if some_condition
      r = a/b
   else
      r = c/d
   end
   return r
end
источник

АО

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

АО

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

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Первая функция вполне может быть type stable, все зависит от входных данных
источник

DB

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

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Хотя безусловно является typestable конечно, тут смысла спорить нет
источник
2021 July 07

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Как вариант да, promote хорошее решение
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Стандартный паттерн для таких случаев это
foo(a::T, b::T) where T = …
foo(a, b) = foo(promote(a,b)…)
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Конечно, бывают случаи когда можно и нужно проаннотировать типы
источник

DB

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

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Собственно говоря весь multiple dispatch :-)
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Мы в нашей лабе написали достаточно большой пакет для байесовских методов для обработки сигналов, там очень много математики…очень, но ни в одной строчке кода мы нигде явно не указываем аннотации типов как раз для того чтобы поддерживать разные типы и автодифференцирования «из коробки». Производительность при этом не страдает
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
(Пользуясь случаем, кстати, приглашаю посмотреть на наш пакет на JuliaCon2021:)
источник

АО

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

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Ага
источник

АО

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