Почему julia дает пизды вашим любимым* язычкам программирования.
https://julialang.org/blog/2017/01/moredots
Используя dot call как здесь:
X .= f.(2 .* X.^2 .+ 6 .* X.^3 .- sqrt.(X))
или
@. X = f(2X^2 + 6X^3 - sqrt(X))
Вы эксплицитно требуете от компилятора сгенерировать объединить циклы и сгенерить векторизированый код, который не будет делать промежуточных аллокаций массивов.
Данный подход можно заставить работать и для своих контейнеров, для этого нужно будет реализовать функцию, которая будет работать селектором для данных из вашего контейнера.
Кроме того, есть возможность при помощи библиотеки GPUArrays обсчитывать массивы на opencl/cuda, используя тот же самый код, как и для обычного кода, но используя специальные типы. Все благодаря multiple dispatch и макросистеме.
[*] кроме, пожалуй, хаскеля, если ghc сделает loop fusion и вы не обосретесь с ленивостью