Julia What is it Joshua Ballanco glencoesoftware Julia
Julia What is it? Joshua Ballanco, glencoesoftware
Julia is a Programming Language Developed by researchers & graduate students at MIT (named for Gaston Julia) High-level, general purpose language – Python, Ruby, Lua Tailored to scientific computing – R, Matlab FAST! – Java, C++, C
Features Dynamically typed with gradual typing Arbitrarily deep type hierarchies Can only inherit from abstract types, can only instantiate concrete types const types Technically a LISP Macros! Introspectable AST Full-featured REPL
Multiple Dispatch Central Organizing Concept in Julia Methods dispatch based on combinations of all argument types Functions vs Methods Function = name Method = implementation for specific argument types Example: Asteroids
Multiple Dispatch
Multiple Dispatch
Multiple Dispatch
Bonus Feature! Fully introspectable Get LLVM bitcode or even machine code for a function
Bonus Feature! julia> @code_llvm collide(ship, asteroid_a) define %jl_value_t* @julia_collide_23007(%jl_value_t*, %jl_value_t**, i 32) { top: %3 = alloca [4 x %jl_value_t*], align 8 %. sub = getelementptr inbounds [4 x %jl_value_t*]* %3, i 64 0 %4 = getelementptr [4 x %jl_value_t*]* %3, i 64 0, i 64 2 store %jl_value_t* inttoptr (i 64 4 to %jl_value_t*), %jl_value_t** %. sub, align 8 %5 = load %jl_value_t*** @jl_pgcstack, align 8 %6 = getelementptr [4 x %jl_value_t*]* %3, i 64 0, i 64 1 %. c = bitcast %jl_value_t** %5 to %jl_value_t* store %jl_value_t* %. c, %jl_value_t** %6, align 8 store %jl_value_t** %. sub, %jl_value_t*** @jl_pgcstack, align 8 store %jl_value_t* null, %jl_value_t** %4, align 8 %7 = getelementptr [4 x %jl_value_t*]* %3, i 64 0, i 64 3 store %jl_value_t* null, %jl_value_t** %7, align 8 %8 = load %jl_value_t** inttoptr (i 64 4527201912 to %jl_value_t**), align 8 store %jl_value_t* %8, %jl_value_t** %4, align 8 store %jl_value_t* inttoptr (i 64 4519100928 to %jl_value_t*), %jl_value_t** %7, align 8 %9 = call %jl_value_t* @jl_apply_generic(%jl_value_t* inttoptr (i 64 4520817008 to %jl_value_t*), %jl_value_t** %4, i 32 2) %10 = load %jl_value_t** %6, align 8 %11 = getelementptr inbounds %jl_value_t* %10, i 64 0, i 32 0 store %jl_value_t** %11, %jl_value_t*** @jl_pgcstack, align 8 ret %jl_value_t* %9 }
Demo
Conclusion & Recomendations Definitely keep an eye on Julia! Not quite ready for use in large projects Traits are coming in v 0. 5 (allegedly) Could be very useful for smaller algorithm development/scripting File. IO. jl/Bioformats. jl Julia is creating a universal mechanism for opening files in arbitrary formats Images. jl exists for reading image files, but uses Image. Magick under the covers Java. Call. jl exists for calling out to Java libraries from Julia
- Slides: 11