Julia v1.3.0-rc5 is now available

The fifth, and I won’t say final this time so as not to jinx it but we really hope final, release candidate for Julia v1.3.0 is now available. You can get binaries at https://julialang.org/downloads for Linux (i686, x86-64, ARMv7, AArch64), macOS, FreeBSD (x86-64), and Windows (64-bit only right now, 32-bit will be available soon). Check out the NEWS file to see what will be new in 1.3.0. You can view the list of commits included since the previous release candidate, 1.3.0-rc4, here.

As a release candidate, this should not be considered production-ready. Rather, it’s intended to give users a chance to try out their code with 1.3.0 prior to a full release. Note that 1.3 on Travis, AppVeyor (with Appveyor.jl), and Cirrus (with CirrusCI.jl) now points to 1.3.0-rc5.

Let us know in the issue tracker if you run into any issues. As was noted in the 1.3.0-rc4 post, any bugs you may encounter should be posted there rather than discussed in this thread for developer visibility. Assuming no problems arise with this release candidate, we’ll move forward with a full 1.3.0 release soon.

64 Likes

Wohoo!

I have install julia 1.3 for the very first time and it (rc5) works

using Base.Threads
struct WorkDetail
    t::Int64
    data::Vector{Float64}
end

@show rawdata = rand(10)
NumOfThreads = 4
chunksize = length(rawdata) ÷ NumOfThreads
WorkDetailArr = WorkDetail[]
for t = 1:NumOfThreads
    if t < NumOfThreads
        push!( WorkDetailArr, WorkDetail(t, rawdata[chunksize*(t-1)+1:chunksize*(t)+1-1]) )
    else
        push!( WorkDetailArr, WorkDetail(t, rawdata[chunksize*(t-1)+1:length(rawdata)]) )
    end
end
@show WorkDetailArr

Completed = Bool[ false for _ = 1:NumOfThreads ]
Accepted  = Bool[ false for _ = 1:NumOfThreads ]

WorkTask(t) = begin
    for c = 1:length(WorkDetailArr[t].data)
        println("Thread $(t), Working with data = $(WorkDetailArr[t].data[c])")
        sleep((NumOfThreads - t + 1) * rand())
    end
    "Signal that this thread has completed"
    Completed[t] = true
    println("Thread $(t) completion has been signaled")
end

Workers = Task[]
for t = 1:NumOfThreads
    push!(Workers, Threads.@spawn WorkTask(t))
    println("Thread $(t) has been spawned")
end

# while Accepted contains at least one element which is false
while ! all(Accepted)
    for t = 1:length(Workers)
        if xor(Completed[t],Accepted[t])
            Threads.wait(Workers[t])
            println("Thread $(t) completion has been accepted")
            "Mark that controller has accepted the thread completion"
            Accepted[t] = true
        end
    end
    sleep(0.05) # Sleep for 50 milisecond
end
println("Done")
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _  |  |
  | | |_| | | | (_| |  |  Version 1.3.0-rc5.1 (2019-11-17)
 _/ |\__ _|_|_|\__ _|  |  Official https://julialang.org/ release
|__/                   |

rawdata = rand(10) = [0.0286802098414336, 0.7032722953781154, 0.77001289603403, 0.8016182959533023, 0.8425712364199844, 0.03730465628281987, 0.28679744950075947, 0.4557346403940581, 0.9531335992120678, 0.09736993766309787]
WorkDetailArr = WorkDetail[WorkDetail(1, [0.0286802098414336, 0.7032722953781154]), WorkDetail(2, [0.77001289603403, 0.8016182959533023]), WorkDetail(3, [0.8425712364199844, 0.03730465628281987]), WorkDetail(4, [0.28679744950075947, 0.4557346403940581, 0.9531335992120678, 0.09736993766309787])]
Thread 1 has been spawned
Thread 2 has been spawned
Thread 3 has been spawned
Thread 4 has been spawned
Thread 1, Working with data = 0.0286802098414336
Thread 2, Working with data = 0.77001289603403
Thread 3, Working with data = 0.8425712364199844
Thread 4, Working with data = 0.28679744950075947
Thread 4, Working with data = 0.4557346403940581
Thread 3, Working with data = 0.03730465628281987
Thread 4, Working with data = 0.9531335992120678
Thread 3 completion has been signaled
Thread 3 completion has been accepted
Thread 4, Working with data = 0.09736993766309787
Thread 2, Working with data = 0.8016182959533023
Thread 4 completion has been signaled
Thread 4 completion has been accepted
Thread 1, Working with data = 0.7032722953781154
Thread 2 completion has been signaled
Thread 2 completion has been accepted
Thread 1 completion has been signaled
Thread 1 completion has been accepted
Done
14 Likes

32-bit Windows is now available.

1 Like

please wait up.
SHA256 checksums are missing. please provide them if its not too much trouble.

wish they were already there. sigh!

Missing from where? We have them, and they’re available where they always are:

SHA-256: https://julialang-s3.julialang.org/bin/checksums/julia-1.3.0-rc5.sha256
MD5: https://julialang-s3.julialang.org/bin/checksums/julia-1.3.0-rc5.md5

2 Likes

probably from the Download page : https://julialang.org/downloads/

  • only the GPG is linked.
1 Like

I won’t say final this time so as not to jinx it but we really hope final

Uhm … I really hate to ask … but … could there possibly be a v1.3.0-rc6? v1.3.0-rc5 broke some @inferred tests for me that had been running fine since v1.0 (I think even before): https://github.com/JuliaLang/julia/issues/33919

It should be stated that the result of inference is free to change between versions.

3 Likes

It should be stated that the result of inference is free to change between versions.

I understand, that’s why here is me begging. :slight_smile:

This could have a quite a bit of a performance impact in my case - the operations affected are often used within a function, and so this would cause quite a bit of type instability. :frowning:

Indeed. You’d have to make a pretty strong case that something is really broken.

2 Likes

Indeed. You’d have to make a pretty strong case that something is really broken.

I’ll try (on #33919 - sorry for asking about a possible new RC here - I just replied to the “RC5 available” and kinda forgot that I would spam a lot of people with this issue, because so many have announcements set to watch/notify).

And yes, I understand that we’re really, really close to the v1.3 release, and there’s no holding it up without very good reason. I was just kinda thrown by this - since v1.0 inference had, subjectively, always seemed to improve, and this code had always been type stable, so to see that break between two Julia RC’s just surprised me.

It should be stated that the result of inference is free to change between versions.

The issue here is about an inference failure (inferred as Any) which previously worked. Did you mean to say that this is normal?

It very well might be expected. Any doesn’t necessarily indicate a type-inference “failure”. The inference system is free to deliberately spit out Any (for example to avoid long type inference times).

2 Likes

Well, turns out (see https://github.com/JuliaLang/julia/issues/33919 ) that it was just the way I initialized something in the tests of ArraysOfArrays.jl (Output of Array[...] with array element in a hcat is less strict than before).

Sorry if I sounded a bit alarmist, I do apologize. My first impression had been that some inference that ArraysOfArrays (we use it heavily in our working group) needs for type stability had broken, that’s why I asked about the possibility of a last-minute fix before v1.3

Turns out this may not be a bug at all, and I should have taken a deeper look first - I was worried that @ararslan’s finger might descend on the “release” button any moment now … :wink:

Again, sorry for the noise on announcements.

10 Likes

The problem wasn’t in inference though, it was an unintended behavior change so that should be reverted before release. However, since it is just restoring behaviour to 1.3rc4 I’m pretty sure there won’t be a new RC just for that.

4 Likes