Size: a a a

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

2020 January 23

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
почему не
symnames(x :: LVector{T,A,S}) = S
Потому что это свойство типа, а не объекта.
Это немного похоже на статические методы в OOP, когда ты можешь определять методы объекта, а можешь класса.
источник

KT

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

АО

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

АО

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

KT

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

АО

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

АО

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

АО

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

АО

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

АО

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

KT

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

АО

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

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Собственно именно из-за этого zero code abstraction люди и говорят, что не стоит на Джулии писать как на питоне или других языках программирования. Ну и по той же причине у Джулии JIT компилятор. По сути, когда она переводит в код, то пытается написать программу наилучшим возможным образом. Хороший пример - это как раз reverse((1, 2, 3)). Можно по разному делать обращение массива, но если ты знаешь длину массива (в данном примере 3), то самый быстрый способ это просто написать reverse(x) = (x[3], x[2], x[1]).
Но для этого надо знать, как устроена структура данных.
источник

АО

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

KT

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

АО

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

АО

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

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
ну вот когда я в REPL пишу reverse((1,2,3))
источник

KT

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

АО

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