The Julia Language We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as
(
Read more... )
есть library(inline) как бы для замены таких for(), а вообще очень хочется loop из cl (оно даже по синтаксису бы выглядело органично :)
> randmatstat = function(t) {
+ n <- 5
+ nn <- n*n
+ r <- replicate(t,{a = matrix(rnorm(nn), ncol=n, nrow=n ( ... )
Reply
Reply
вообще дремучий склеров не позволяет мне что то вспомнить вариант интерпретатора R где с for() все в порядке :( типа Renjin, но не он :(
# мегатест нового языка :)
## numeric vector sort ##
function sortperf(n)
v = rand(n)
sort!(v)
end
# тут был мегакод с for() на R реализующий уже реализованную встроенную функцию
> sortperf = function(n) {
+ v = runif(n)
+ return(qsort(v))
+ }
>
> timeit('quicksort', sortperf, 5000)
r,quicksort,408.00000000
> timeit('quicksort', sortperf, 5000)
r,quicksort,410.00000000
> timeit('quicksort', sortperf, 5000)
r,quicksort,414.00000000
> ?sort
> sortperf = function(n) {
+ v = runif(n)
+ return(sort(v))
+ }
> timeit('quicksort', sortperf, 5000)
r,quicksort,1.00000000
> timeit('quicksort', sortperf, 5000)
r,quicksort,1.00000000
> timeit('quicksort', sortperf, 5000)
r,quicksort,1.00000000
>
> sort ( ... )
Reply
а вообще след от произведения матриц в R считается куда эффективнее, его нельзя оценить по этой пропаганде (издали похожей на него :) вставили возведение в степень как дети :)
> randmatstat = function(t) {
+ n <- 5
+ nn <- n*n
+ r <- replicate(t,{P <- cbind(matrix(rnorm(nn), ncol=n, nrow=n ( ... )
Reply
В три раза код с for() и рекурсией становится быстрее. Естественно что вылизанный до предела код без циклов и вызовов функций компиляцией тормозится на время компиляции.
А pisum в 7 раз быстрее стал.
> library(compiler)
> enableJIT(0)
[1] 0
> assert = function(bool) {
+ if (!bool) stop('Assertion failed')
+ }
>
> timeit = function(name, f, ..., times=5) {
+ tmin = Inf
+ for (t in 1:times) {
+ t = system.time(f(...))["elapsed"]
+ if (t < tmin) tmin = t
+ }
+ cat(sprintf("r,%s,%.8f\n", name, tmin*1000))
+ }
> fib = function(n) {
+ if (n < 2) {
+ return(n)
+ } else {
+ return(fib(n-1) + fib(n-2))
+ }
+ }
>
> assert(fib(20) == 6765)
> timeit("fib", fib, 20)
r,fib,64.00000000
> timeit("fib", fib, 20)
r,fib,63.00000000
> enableJIT(3)
[1] 0
> enableJIT(3)
[1] 3
> timeit("fib", fib, 20)
r,fib,19.00000000
> timeit("fib", fib, 20)
r,fib,20.00000000
> timeit("fib", fib, 20)
r,fib,20.00000000
--------------------8> enableJIT(0 ( ... )
Reply
Leave a comment