The Julia Programming Language for your Windows PC!

Julia Language

Julia Language 1.8.0 (64-bit)

  -  83.7 MB  -  Open Source

Sometimes latest versions of the software can cause issues when installed on older devices or devices running an older version of the operating system.

Software makers usually fix these issues but it can take them some time. What you can do in the meantime is to download and install an older version of Julia Language 1.8.0 (64-bit).


For those interested in downloading the most recent release of Julia Language or reading our review, simply click here.


All old versions distributed on our website are completely virus-free and available for download at no cost.


We would love to hear from you

If you have any questions or ideas that you want to share with us - head over to our Contact page and let us know. We value your feedback!

  • Julia Language 1.8.0 (64-bit) Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    Julia Language 1.8.0 (64-bit) Screenshot 1
  • Julia Language 1.8.0 (64-bit) Screenshot 2
  • Julia Language 1.8.0 (64-bit) Screenshot 3
  • Julia Language 1.8.0 (64-bit) Screenshot 4
  • Julia Language 1.8.0 (64-bit) Screenshot 5

What's new in this version:

New language features:
- Mutable struct fields may now be annotated as const to prevent changing them after construction, providing for greater clarity and optimization ability of these objects
- Type annotations can now be added to global variables to make accessing them type stable
- Empty n-dimensional arrays can now be created using multiple semicolons inside square brackets, e.g. [;;;] creates a 0×0×0 Array
- try-blocks can now optionally have an else-block which is executed right after the main body only if no errors were thrown
- @inline and @noinline can now be placed within a function body, allowing one to annotate anonymous function
- @inline and @noinline can now be applied to a function at callsite or block to enforce the involved function calls to be (or not to be inlined
- , ?, and ? are now allowed as identifier characters
- Support for Unicode 14.0.0
- Module(:name, false, false can be used to create a module that contains no names (it does not import Base or Core and does not contain a reference to itself

Language changes:
- Newly-created Task objects (@spawn, @async, etc. now adopt the world age for methods from their parent Task upon creation, instead of using the global latest world at start. This is done to enable inference to eventually optimize these calls. Places that wish for the old behavior may use Base.invokelatest
- Unbalanced Unicode bidirectional formatting directives are now disallowed within strings and comments, to mitigate the "trojan source" vulnerability
- Base.ifelse is now defined as a generic function rather than a builtin one, allowing packages to extend its definition
- Every assignment to a global variable now first goes through a call to convert(Any, x (or convert(T, x respectively if a type T has been declared for the global. This means great care should be taken to ensure the invariant convert(Any, x === x always holds, as this change could otherwise lead to unexpected behavior
- Builtin functions are now a bit more like generic functions, and can be enumerated with methods

Compiler/Runtime improvements:
- Bootstrapping time has been improved by about 25%
- The LLVM-based compiler has been separated from the run-time library into a new library, libjulia-codegen. It is loaded by default, so normal usage should see no changes. In deployments that do not need the compiler (e.g. system images where all needed code is precompiled, this library (and its LLVM dependency can simply be excluded
- Conditional type constraints are now be forwarded interprocedurally (i.e. propagated from caller to callee. This allows inference to understand e.g. Base.ifelse(isa(x, Int, x, 0 returns ::Int-value even if the type of x is not known
- Julia-level SROA (Scalar Replacement of Aggregates has been improved: allowing elimination of getfield calls with constant global fields enabling elimination of mutable structs with uninitialized fields improving performance and handling more nested getfield calls
- Abstract call sites can now be inlined or statically resolved as long as the call site has a single matching method
- Inference now tracks various effects such as side-effectful-ness and nothrow-ness on a per-specialization basis. Code heavily dependent on constant propagation should see significant compile-time performance improvements and certain cases (e.g. calls to uninlinable functions that are nevertheless effect free should see runtime performance improvements. Effects may be overwritten manually with the Base.@assume_effects macro

Command-line option changes:
- The default behavior of observing @inbounds declarations is now an option via auto in --check-bounds=yes|no|auto
- New option --strip-metadata to remove docstrings, source location information, and local variable names when building a system image
- New option --strip-ir to remove the compiler's IR (intermediate representation of source code when building a system image. The resulting image will only work if --compile=all is used, or if all needed code is precompiled
- When the program file is - the code to be executed is read from standard in
- Multi-threading changes:
- Threads.@threads now defaults to a new :dynamic schedule option which is similar to the previous behavior except that iterations will be scheduled dynamically to available worker threads rather than pinned to each thread. This behavior is more composable with (possibly nested @spawn and @threads loops

Build system changes:
New library functions:
- New function eachsplit(str for iteratively performing split(str
- New function allequal(itr for testing if all elements in an iterator are equal
- hardlink(src, dst can be used to create hard links
- setcpuaffinity(cmd, cpus can be used to set CPU affinity of sub-processes
- diskstat(path=pwd( can be used to return statistics about the disk
- New @showtime macro to show both the line being evaluated and the @time report
- The LazyString and the lazy"str" macro were added to support delayed construction of error messages in error paths

New library features:
- @time and @timev now take an optional description to allow annotating the source of time reports, e.g. @time "Evaluating foo" foo(
- range accepts either stop or length as a sole keyword argument
- precision and setprecision now accept a base keyword argument
- TCP socket objects now expose closewrite functionality and support half-open mode usage
- extrema now accepts an init keyword argument
- Iterators.countfrom now accepts any type that defines +

Standard library changes:
- Keys with value nothing are now removed from the environment in addenv
- Iterators.reverse (and hence last now supports eachline iterators
- The length function on certain ranges of certain element types no longer checks for integer overflow in most cases. The new function checked_length is now available, which will try to use checked arithmetic to error if the result may be wrapping. Or use a package such as SaferIntegers.jl when constructing the range
- Intersect returns a result with the eltype of the type-promoted eltypes of the two inputs
- Iterating an Iterators.Reverse now falls back on reversing the eachindex iterator, if possible

InteractiveUtils:
- New macro @time_imports for reporting any time spent importing packages and their dependencies, highlighting compilation and recompilation time as percentages per import[#45064].

LinearAlgebra:
- The BLAS submodule now supports the level-2 BLAS subroutine spr!
- cholesky[!] now supports LinearAlgebra.PivotingStrategy (singleton type values as its optional pivot argument: the default is cholesky(A, NoPivot( (vs. cholesky(A, RowMaximum(; the former Val{true/false}-based calls are deprecated
- The standard library LinearAlgebra.jl is now completely independent of SparseArrays.jl, both in terms of the source code as well as unit testing As a consequence, sparse arrays are no longer (silently returned by methods from LinearAlgebra applied to Base or LinearAlgebra objects. Specifically, this results in the following breaking changes:
- Concatenations involving special "sparse" matrices (*diagonal now return dense matrices; As a consequence, the D1 and D2 fields of SVD objects, constructed upon getproperty calls are now dense matrices.
- arg similar(::SpecialSparseMatrix, ::Type, ::Dims returns a dense zero matrix. As a consequence, products of bi-, tri- and symmetric tridiagonal matrices with each other result in dense output. Moreover, constructing 3-arg similar matrices of special "sparse" matrices of (nonstatic matrices now fails for the lack of zero(::Type{Matrix{T}}.

Printf:
- Now uses textwidth for formatting %s and %c widths

Profile:
- CPU profiling now records sample metadata including thread and task. Profile.print( has a new groupby kwarg that allows grouping by thread, task, or nested thread/task, task/thread, and threads and tasks kwargs to allow filtering. Further, percent utilization is now reported as a total or per-thread, based on whether the thread is idle or not at each sample. Profile.fetch( includes the new metadata by default. For backwards compatibility with external profiling data consumers, it can be excluded by passing include_meta=false
- The new Profile.Allocs module allows memory allocations to be profiled. The stack trace, type, and size of each allocation is recorded, and a sample_rate argument allows a tunable amount of allocations to be skipped, reducing performance overhead
- A fixed duration cpu profile can now be triggered by the user during running tasks without Profile being loaded first and the report will show during execution. On MacOS & FreeBSD press ctrl-t or raise a SIGINFO. For other platforms raise a SIGUSR1 i.e. % kill -USR1 $julia_pid. Not currently available on windows

REPL:
- RadioMenu now supports optional keybindings to directly select options
- (x, y followed by TAB displays all methods that can be called with arguments x, y, .... (The space at the beginning prevents entering help-mode. MyModule.?(x, y limits the search to MyModule. TAB requires that at least one argument have a type more specific than Any; use SHIFT-TAB instead of TAB to allow any compatible methods
- New err global variable in Main set when an expression throws an exception, akin to ans. Typing err reprints the exception information

SparseArrays:
- The code for SparseArrays has been moved from the Julia repo to the external repo
- New sparse concatenation functions sparse_hcat, sparse_vcat, and sparse_hvcat return SparseMatrixCSC output independent from the types of the input arguments. They make concatenation behavior available, in which the presence of some special "sparse" matrix argument resulted in sparse output by multiple dispatch. This is no longer possible after making LinearAlgebra.jl independent from SparseArrays.jl

Logging:
- The standard log levels BelowMinLevel, Debug, Info, Warn, Error, and AboveMaxLevel are now exported from the Logging stdlib

Unicode:
- Added function isequal_normalized to check for Unicode equivalence without explicitly constructing normalized strings
- The Unicode.normalize function now accepts a chartransform keyword that can be used to supply custom character mappings, and a Unicode.julia_chartransform function is provided to reproduce the mapping used in identifier normalization by the Julia parser

Test:
- @test_throws "some message" triggers_error( can now be used to check whether the displayed error text contains "some message" regardless of the specific exception type. Regular expressions, lists of strings, and matching functions are also supported
- @testset foo( can now be used to create a test set from a given function. The name of the test set is the name of the called function. The called function can contain @test and other @testset definitions, including to other function calls, while recording all intermediate test results
- TestLogger and LogRecord are now exported from the Test stdlib

Distributed:
- SSHManager now supports workers with csh/tcsh login shell, via addprocs( option shell=:csh