如何定义一门成功的语言是个问题,好多domain specific language非常成功,但是用户不多。如果说语言的成功和用户数量挂钩的话,从历史看来,设计上占优势的语言不一定会成功。我从Julia 0.4 开始用,非常同意你提到的这些优点。However, these merits do not necessarily translate to ultimate success. 请看这个: https://www.jwz.org/doc/worse-is-better.html
代码执行上的效率还是很难达到的,目前Julia的BLAS库还是调的Fortran代码,虽然现在社区里也有人正在研究用纯Julia实现BLAS,但感觉一时半会还是赶不上Fortran优化多年的成熟库,对这块感兴趣可以关注一下官方slack的#linear-algebra频道。 如果考虑开发效率,Julia有着显著的优势,在实际开发中,对于效率要求很高的部分,可以用Fortran实现,然后从Julia调Fortran。由于Julia调Fortran的FFI非常简洁,所以这里产生的two language problem不是那么的明显。
julia> function foo(a, b)
Base.llvmcall("""
%X = call i32 asm "leal (\$1,\$1,4), \$0", "=r,r,r"(i32 %0, i32 %1)
ret i32 %X""",
Cint, Tuple{Cint,Cint}, a, b)
end
foo (generic function with 2 methods)
julia> foo(Cint(1), Cint(2))
5