Если Clojure массивы будут такими же быстрыми, как массивы Java

Я думаю, что это одно и то же, но Clojure использует класс Array для управления.

В любом случае мне сказали, что в Clojure, если вам действительно нужна скорость, вы можете использовать массивы, но между следующими программами версия Java намного быстрее

(time
 (let [data (int-array 100000000)]
   (dotimes [q 100000000]
     (aset-int data q q))))

_

public class Array{
    public static void main(String[] args){
    long start = System.currentTimeMillis();
    int[] data = new int[100000000];
    for(int q = 0;q < data.length;q++){
        data[q] = q;
    }
    System.out.println(System.currentTimeMillis() - start);
    }
}

Напротив, эта программа Clojure, которая использует класс IntBuffer, почти так же быстро, как Java-код

(time
 (let [data (IntBuffer/allocate 100000000)]
   (dotimes [q 100000000]
     (.put data q q))))

Ответ 1

Не используйте функции aset-*. Просто используйте aset: (aset data q q). Не спрашивайте меня, почему существуют функции aset-*. Пока я помню, их использование было обескуражено.