В своих задачах я чаще с циклами борюсь: или переписываю через матричные операции, или на C++.
Циклы там нормально пашут, после того как JIT подвезли. А вот с типами проблема - нельзя переопределять оператор скобок, например, для своего типа массива - производительность падает на порядки со своим оператором. И вообще нет указателей на данные, поэтому если надо менять что-то внутри функций без полного копирования, можно только внутрь handle классов запихивать.