Julia: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
__FORCETOC__ | __FORCETOC__ | ||
{{Infobox programming language | |||
| name = Julia | |||
| logo = Julia prog language.svg | |||
| logo caption = | |||
| screenshot = <!-- filename is enough --> | |||
| screenshot caption = | |||
| paradigm = [[multi-paradigm programming language|Multi-paradigm]]: [[multiple dispatch]] (core), [[procedural programming|procedural]], [[functional programming|functional]], [[metaprogramming|meta]], [[multistaged programming|multistaged]]<ref>{{cite web |url=https://medium.com/@acidflask/smoothing-data-with-julia-s-generated-functions-c80e240e05f3#.615wk3dle |title=Smoothing data with Julia's @generated functions |quote=Julia's generated functions are closely related to the multistaged programming (MSP) paradigm popularized by Taha and Sheard, which generalizes the compile time/run time stages of program execution by allowing for multiple stages of delayed code execution. |date=5 November 2015 |accessdate=9 December 2015}}</ref> | |||
| released = {{Start date and age|2012}}<ref name="announcement"/> | |||
| designer = Jeff Bezanson, [[Alan Edelman]], [[Stefan Karpinski]], [[Viral B. Shah]] | |||
| developer = Jeff Bezanson, [[Stefan Karpinski]], [[Viral B. Shah]], and other contributors<ref name="license">{{cite web | |||
| url = https://github.com/JuliaLang/julia/blob/master/LICENSE.md | |||
| title = LICENSE.md | |||
| publisher = [[GitHub]] | |||
}}</ref><ref>{{cite web | |||
| url = https://github.com/JuliaLang/julia/graphs/contributors | |||
| title = Contributors to JuliaLang/julia | |||
| publisher = [[GitHub]] | |||
}}</ref> | |||
| latest release version = 1.2.0<ref>{{cite web|author= |url=https://github.com/JuliaLang/julia/releases/tag/v1.2.0 |title=v1.2.0 |website=Github.com |date=2019-08-20 |accessdate=2019-08-20}}</ref> | |||
| latest release date = {{Start date and age|2019|08|20|df=yes}} | |||
| latest preview version = 1.3.0-rc2<ref>{{cite web|url=https://github.com/JuliaLang/julia/releases/tag/v1.3.0-rc2|title=v1.3.0-rc2 |website=GitHub|language=en|access-date=2019-09-13}}</ref> | |||
| latest preview date = {{Start date and age|2019|09|12|df=yes}} / 1.4.0-DEV with daily updates | |||
| typing = [[dynamic programming language|Dynamic]], [[nominal type system|nominative]], [[parametric polymorphism|parametric]], [[optional typing|optional]] | |||
| implementations = | |||
| dialects = | |||
| influenced by = {{startflatlist}} | |||
* [[C (programming language)|C]]<ref name="announcement"/> | |||
* [[Lisp (programming language)|Lisp]]<ref name="announcement"/><!--only the parser implemented by femtolisp, a [[Scheme (programming language)|Scheme]]-like implementation (see: "unsupported" "julia --lisp" that invokes it, but its only influence on the language/syntax – Lisp-like macros? Maybe not even Lisp's CLOS "multimethods"? as Dylan with "multiple dispatch" was cut from the list--> | |||
* [[Lua (programming language)|Lua]]<ref name="Introduction">{{Cite web|url=https://docs.julialang.org/en/stable/|title=<!--Chapter: Introduction under --> Home · The Julia Language|website=docs.julialang.org|language=en|access-date=2018-08-15}}</ref> | |||
* [[Mathematica]]<ref name="announcement"/> (strictly its [[Wolfram Language]]<ref name="announcement"/><ref>{{cite web |url=https://fatiherikli.github.io/programming-language-network/ |title=Programming Language Network |publisher=GitHub |accessdate=6 December 2016}}</ref>) | |||
* [[MATLAB]]<ref name="announcement"/> | |||
* [[Perl]]<ref name="Introduction"/> | |||
* [[Python (programming language)|Python]]<ref name="Introduction"/> | |||
* [[R (programming language)|R]]<ref name="announcement"/> | |||
* [[Ruby (programming language)|Ruby]]<ref name="Introduction"/> | |||
* [[Scheme (programming language)|Scheme]]<ref name="JuliaCon2016">{{cite web |url=http://www.juliacon.org |title=JuliaCon 2016 |publisher=JuliaCon |quote="He has co-designed the programming language Scheme, which has greatly influenced the design of Julia"|accessdate=6 December 2016}}</ref> | |||
{{endflatlist}} | |||
| influenced = | |||
| programming language = Julia, [[C (programming language)|C]],<!--"Remove when C11 is required for C code" https://github.com/JuliaLang/julia/search?utf8=%E2%9C%93&q=C11&type= | |||
"These roughly follows the c11/c++11 memory model [..] The only exception is the GC safepoint and GC state transitions [..] We use the compiler intrinsics to implement a similar API to the c11/c++11" https://github.com/JuliaLang/julia/blob/44f3d7c921cbe50105a54258db2febb65a4b9d44/src/julia_threads.h | |||
--> [[C++]], [[Scheme (programming language)|Scheme]], [[LLVM]]<ref name="JuliaHome">{{cite web |url=https://julialang.org/ |title=Julia |author=<!--Staff writer(s); no by-line.--> |date=<!--None listed.--> |website=Julia |publisher=NumFocus project |access-date=9 December 2016 |quote=Julia's Base library, largely written in Julia itself, also integrates mature, best-of-breed open source C and Fortran libraries for ...}}</ref> | |||
| platform = Tier 1: [[x86-64]], [[IA-32]], [[CUDA]]<br> Tier 2: [[ARM architecture|ARM]] (both 32- and 64-bit) and Tier 3: [[PowerPC]]<br> Also has web browser support (for [[JavaScript]] and [[WebAssembly]])<ref name="WebAssembly"/> | |||
| operating system = [[Linux]], [[macOS]], [[Microsoft Windows|Windows]] and <!-- no longer just community support for --> [[FreeBSD]] | |||
| license = [[MIT License|MIT]] (core),<ref name="license"/><!--for core language while, by default, "the environment, which consists of the language, user interfaces, and libraries, is under the GPL"--> [[General Public Licence|GPL v2]];<ref name="JuliaHome" /><ref>{{cite newsgroup|url=https://groups.google.com/forum/#!topic/julia-users/v4OjEK7azBs |title=Non-GPL Julia? |website=Groups.google.com |date= |accessdate=2017-05-31}}</ref><!--as some few libraries used by the standard library (that can be excluded) are [[copyleft]]--> a [[makefile]] option omits GPL libraries<ref>{{cite web |url=https://github.com/JuliaLang/julia/pull/10870 |title=Introduce USE_GPL_LIBS Makefile flag to build Julia without GPL libraries |quote=Note that this commit does not remove GPL utilities such as git and busybox that are included in the Julia binary installers on Mac and Windows.<!--dropped as of 0.5 then only libgit2--> It allows building from source with no GPL library dependencies.}}</ref> | |||
| file ext = .jl | |||
| website = {{Official website|https://JuliaLang.org|name=JuliaLang.org}} | |||
}} | |||
Julia is a numerical computation and general purpose high-level programming language. | Julia is a numerical computation and general purpose high-level programming language. |
Revision as of 18:49, 16 September 2019
Paradigm | Multi-paradigm: multiple dispatch (core), procedural, functional, meta, multistaged[1] |
---|---|
Designed by | Jeff Bezanson, Alan Edelman, Stefan Karpinski, Viral B. Shah |
Developer | Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors[2][3] |
First appeared | 2012[4] |
Stable release | 1.2.0[5]
/ 20 August 2019 |
Preview release | 1.3.0-rc2[6]
/ 12 September 2019 / 1.4.0-DEV with daily updates |
Typing discipline | Dynamic, nominative, parametric, optional |
Implementation language | Julia, C, C++, Scheme, LLVM[7] |
Platform | Tier 1: x86-64, IA-32, CUDA Tier 2: ARM (both 32- and 64-bit) and Tier 3: PowerPC Also has web browser support (for JavaScript and WebAssembly)[8] |
OS | Linux, macOS, Windows and FreeBSD |
License | MIT (core),[2] GPL v2;[7][9] a makefile option omits GPL libraries[10] |
Filename extensions | .jl |
Website | JuliaLang.org |
Influenced by | |
Julia is a numerical computation and general purpose high-level programming language. It's standout feature is its performance which allows libraries to be written in Julia directly. In contrast, many libraries in R and Python are written in C or C++ for performance purposes and accessed using Rcpp or Cython. If necessary, you can still interface with other languages. See Introducing Julia for a comprehensive guide on how to program in Julia.
Installation
Juno
Juno is an IDE for Julia. It consists of a set of packages added to Atom.
Most items can be accessed from the Atom control palette Ctrl + Shift + P
Shortcuts:
Ctrl + Enter
Evaluate current selectionShift + Enter
Evaluate current section and jump to next.
Basic Usage
Package Management
Initializing a new project
cd project_folder
julia
] activate ./
# Add your packages
Loading an existing project
cd project_folder
julia
using Pkg;
Pkg.activate("./");
Pkg.instantiate();
String Interpolation
"Variable x is $x, y is $y, and x+y is $(x+y)"
Other Pkg Commands
You can see all the commands by typing ?
in the package manager.
update [packagename]
Update a specific package or all packagesremove [packagename]
Remove a packagestatus
Show the current Pkg directory and installed packages
Arrays
// Make an 1d array of Float64.
// Equivalent to [0.0, 0.0, 0.0]
myArr = zeros(4);
// Make a 1d array of Float64 left to uninitialized values
myArr = Array{Float64,1}(undef, 3)
// Convert an iterable to an array with collect
myArr = collect(1:3)
// Reference copy
a = [1, 2, 3];
b = [4, 5, 6];
b = a
// Shallow copy
a = [1, 2, 3];
b = [4, 5, 6];
// elementwise equals operator
b .= a
// or b[:] = a
// or b = copy(a) (this will discard the original b)
// Basic functionality
// Call functions elementwise by adding . after the function name
a = [1, 5, 99];
a = clamp.(a, 1, 11);
// a is now [1, 5, 11]
// Equivalent to clamp!(a, 1, 11)
// Julia also has map, foldl, foldr, reduce
Higher order functions
Julia supports high-order functions.
ts = ((a, b) -> (c, d) -> a + b + c + d)(1,2);
The call with arguments (1,2) returns a function.
Then ts
is equivalent to
ts = (c, d) -> 1 + 2 + c + d;
You can also use the full function(a,b)
syntax.
Animation Loop
You can use Timer(callback, delay, interval)
. This is similar to SetInterval in JavaScript.
End the loop with close(animate)
.
animate = Timer(function(t)
println("Animating")
end, 0; interval=1/60)
Graphics
You can use MeshCat.jl to create visualizations to view in a web browser.
These visualizations are powered by WebGL using three.js.
Note that MeshCat.jl only exposes a small subset of three.js's features so I
would not recommend it for creating highly intricate or interactive experiences at the moment.
MeshCat.jl is built using WebIO.jl.
Machine Learning
Object Oriented Programming
Julia is a Multiple Dispatch language.
You can use a struct
in place of classes and define functions which have your struct as a parameter in place of methods.
For example:
using Parameters
# @with_kw allows default values
# By default, structs are immutable. Add the mutable keyword.
@with_kw mutable struct Person
name
age
end
# Outer constructor
function Person(name::String, age::Int)
# Do anything here
# Return a new Person
Person(name = name, age = age)
end
Useful functions:
# Returns the type typeof("str") # Check type "str" isa String # Get the super type supertype(Int64) # Check if a is a subtype of b with <: # This is the same symbol for creating a subtype of an abstract type # E.g. mutable struct myNum <: Number Int64 <: Number
Useful Packages
MeshCat.jl
Link
A wrapper for graphics visualizations around three.js. This opens in a web browser but can be used for making helium apps.
See Graphics in Julia for more details on how to use MeshCat.jl.
Flux
Link
Flux is the largest machine learning library for Julia.
It includes convenience features including NN layers, activation functions, and an automatic differentiation system.
See Machine Learning in Julia for more details on how to use Flux.
Latexify.jl
Link
Prints out a latex string for any Julia expression or value.
Very useful for printing out matrices to insert into Latex documents.
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"Smoothing data with Julia's @generated functions". 5 November 2015. Retrieved 9 December 2015.
Julia's generated functions are closely related to the multistaged programming (MSP) paradigm popularized by Taha and Sheard, which generalizes the compile time/run time stages of program execution by allowing for multiple stages of delayed code execution.
- ↑ 2.0 2.1 <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"LICENSE.md". GitHub.
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"Contributors to JuliaLang/julia". GitHub.
- ↑ 4.0 4.1 4.2 4.3 4.4 4.5 4.6 Cite error: Invalid
<ref>
tag; no text was provided for refs namedannouncement
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"v1.2.0". Github.com. 2019-08-20. Retrieved 2019-08-20.
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"v1.3.0-rc2". GitHub. Retrieved 2019-09-13.
- ↑ 7.0 7.1 <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"Julia". Julia. NumFocus project. Retrieved 9 December 2016.
Julia's Base library, largely written in Julia itself, also integrates mature, best-of-breed open source C and Fortran libraries for ...
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedWebAssembly
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"Non-GPL Julia?". Groups.google.com. Retrieved 2017-05-31.
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"Introduce USE_GPL_LIBS Makefile flag to build Julia without GPL libraries".
Note that this commit does not remove GPL utilities such as git and busybox that are included in the Julia binary installers on Mac and Windows. It allows building from source with no GPL library dependencies.
- ↑ 11.0 11.1 11.2 11.3 <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"Home · The Julia Language". docs.julialang.org. Retrieved 2018-08-15.
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"Programming Language Network". GitHub. Retrieved 6 December 2016.
- ↑ <templatestyles src="Module:Citation/CS1/styles.css"></templatestyles>"JuliaCon 2016". JuliaCon. Retrieved 6 December 2016.
He has co-designed the programming language Scheme, which has greatly influenced the design of Julia