2011-06-01 19 views
10

Supongo que son lo mismo, pero Clojure usa la clase Array para manipular.En caso de que las matrices Clojure sean tan rápidas como las matrices Java

De todos modos, me han dicho que en Clojure si realmente necesita velocidad, podrá utilizar matrices, sino entre los siguientes programas de la versión Java es mucho más rápido

(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); 
    } 
} 

Por el contrario, este programa Clojure que usa la clase IntBuffer es casi tan rápido como el código Java

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

¿Le importaría publicar sus resultados? – ponzao

Respuesta

10

No utilice las funciones aset-*. Simplemente use aset: (aset data q q). No me preguntes por qué las funciones aset-* están ahí. Mientras pueda recordar, se desalentó su uso.

+0

+1 porque el mismo punto de referencia con 'aset' funcionó unas diez veces más rápido. No se comparó con la versión de Java. – ponzao

Cuestiones relacionadas