Должны ли массивы Clojure быть такими же быстрыми, как массивы Java? - PullRequest
10 голосов
/ 01 июня 2011

Полагаю, это одно и то же, но 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 Ответ

10 голосов
/ 01 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...