Size: a a a

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

2020 March 20

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Спасибо, про type stable не задумался
источник

ВФ

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

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Андрей Оськин
Можно, но эта штука не является type stable и как следствие работает немного медленнее.

Хотя, если честно, я в целом согласен: если данное конкретное место не является критически важным по скорости, то такой подход лучше, потому что намного читабельнее.
Это у меня в программе одно из самых критических мест, доступ по индексу к некоторой структуре данных, очень много вызываться будет )
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Андрей Оськин
Можно, но эта штука не является type stable и как следствие работает немного медленнее.

Хотя, если честно, я в целом согласен: если данное конкретное место не является критически важным по скорости, то такой подход лучше, потому что намного читабельнее.
Если написать функции с подходящими именами, например

function deletentuple(t::NTuple, k)
   ntuple(i -> i < k ? t[i] : t[i+1], length(t) - 1)
end

function insertntuple(t::NTuple{N,T}, k, val::T) where {N,T}
   ntuple(i -> i < k ? t[i] : i==k ? val : t[i-1], length(t) + 1)
end

то тоже будет все вполне читабельно, даже еще лучше
источник

АО

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

Ну и к тому же, если присмотреться, эти методы довольно небезопасны. Если пользователь укажет k выходящий за границы, то результат будет непредсказуемым (скорее всего упадёт с какой-то неочевидной ошибкой). То есть по хорошему, надо ещё обернуть во всякие разные  проверки. В случае с многоточиями такой проблемы нет.
источник

АО

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

function dropxx(t::NTuple, k)
   ntuple(i -> i < k ? t[i] : t[i + 1], length(t) - 1)
end

t = Tuple(1:11)

@code_warntype dropxx(t, 5)

Body::NTuple{10,Int64}
...


Однако
t = Tuple(1:12)

@code_warntype dropxx(t, 5)

Body::Tuple{Vararg{Int64,N} where N}
источник

АО

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

АО

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

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Да, там руками вбито
источник

KT

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

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Просто if-ами
источник

АО

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

KT

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

АО

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

АО

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

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
https://underscore.io/blog/posts/2016/10/11/twenty-two.html

Сейчас наверное уже не так, это всё-таки история давно прошедших дней.
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Да уж
источник

ВФ

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

Ну и к тому же, если присмотреться, эти методы довольно небезопасны. Если пользователь укажет k выходящий за границы, то результат будет непредсказуемым (скорее всего упадёт с какой-то неочевидной ошибкой). То есть по хорошему, надо ещё обернуть во всякие разные  проверки. В случае с многоточиями такой проблемы нет.
Насчет безопасности тех методов.
insert - не позволяет выйти за пределы  допустимого диапазона индексов (происходит ошибка выхода за пределы)

delete - при k <= 1 всегда удаляет первый элемент
            - при k >= N - последний элемент
источник
2020 March 21

GC

Great Cheese Wall in Язык программирования Julia / Julia programming language
AbstractAlgebra: Computer algebra package for Julia language (Score: 101+ in 1 day)

Link: https://readhacker.news/s/4iRaE
Comments: https://readhacker.news/c/4iRaE
источник

GC

Great Cheese Wall in Язык программирования Julia / Julia programming language
источник