ăăŽćŠč˝ăŞăŻă¨ăšăăŻăăă¨ăă°ďź5ă§čŞŹćăăăŚăăžăăăăžă çŹčŞăŽĺéĄăŻăŞăă¨ćăăžăă
ć˝čąĄĺăŽă¤ăłăżăźăă§ăźăšăć示çăŤĺŽçžŠă§ăăăç´ ć´ăăăă¨ćăăžăă ă¤ăłăżăźăă§ă¤ăšă¨ăŻăć˝čąĄĺăŽčŚäťśăćşăăăăăŤĺŽčŁ ăăĺż čŚăŽăăăăšăŚăŽăĄă˝ăăăćĺłăăžăă çžĺ¨ăă¤ăłăżăźăă§ăźăšăŻćéťçăŤĺŽçžŠăăăŚăăă ăă§ăăăč¤ć°ăŽăăĄă¤ăŤăŤĺćŁăăŚăăĺŻč˝ć§ăăăăăăć˝čąĄĺăăć´žçăăă¨ăăŤä˝ăĺŽčŁ ăăĺż čŚăăăăăĺ¤ćăăăŽăŻé常ăŤĺ°éŁă§ăă
ă¤ăłăżăźăă§ă¤ăšăŻä¸ťăŤ2ă¤ăŽăă¨ăćäžăăžăă
Base.graphicsăŤăŻăăăŠăźăŤăăăŻĺŽčŁ ă§ă¨ăŠăźăĄăăťăźă¸ăă¨ăłăłăźăăăăă¨ăŤăăăĺŽéăŤă¤ăłăżăźăă§ă¤ăšăĺŽçžŠă§ăăăăŻăăăăăžăă ăăăŻăă§ăŤé常ăŤčł˘ăă¨ćăăžăă ăăăăĺ¤ĺăăăŤćŹĄăŽć§ćăä¸ăăăă¨ăŻăăăŤăăĄăă¨ăăŚăăžăďź
abstract MyType has print, size(::MyType,::Int), push!
ăăă§ăŻăăăžăăžăŞç˛ĺşŚăćĺŽă§ăăă°äžżĺŠă§ăă print
ăăăłpush!
厣č¨ăŻăăăŽĺĺăŽăĄă˝ăăďźăăăłćĺăŽăăŠăĄăźăżăźă¨ăăŚMyType
ďźăĺż
čŚă§ăăă¨ă ăčż°ăšăŚăăžăăăăżă¤ăăćĺŽăăŚăăžăăă 寞ç
§çăŤă size
厣č¨ăŻĺŽĺ
¨ăŤĺćĺŽăăăŚăăžăă ăăăŤăăĺ¤ăăŽćčťć§ăĺžăăăĺćĺŽăăăŚăăŞăă¤ăłăżăźăă§ă¤ăšĺŽŁč¨ăŽĺ ´ĺă§ăăé常ăŤĺ
ˇä˝çăŞă¨ăŠăźăĄăăťăźă¸ă襨示ăăăĺŻč˝ć§ăăăă¨ćăăžăă
ďź5ă§čż°ăšăăăăŤăăăŽăăăŞă¤ăłăżăźăă§ă¤ăšăŻĺşćŹçăŤăC ++ 14ăžăăŻC ++ 17ăŽConcept-light
ă¨ăăŚC ++ă§č¨çťăăăŚăăăăŽă§ăă ăăăŚăăăŞăăŽC ++ăăłăăŹăźăăăă°ăŠăăłă°ăčĄăŁăăŽă§ăăăŽé ĺă§ăŽĺ˝˘ĺźĺăJuliaăŤă¨ăŁăŚčŻăăă¨ă ă¨ç˘şäżĄăăŚăăžăă
ä¸čŹçăŤăăăăŻăăčŻăă¤ăłăżăźăă§ăźăšćĺăăă°ăŠăăłă°ă¸ăŽčŻăćšĺă ă¨ćăăžăă
ăă ăăăăăŤăŻä˝ăăćŹ ăăŚăăžăă ăĄă˝ăăăŽăˇă°ăăăŁďźĺĺă ăă§ăŞăďźăă¤ăłăżăźăă§ă¤ăšăŤă¨ăŁăŚéčŚă§ăă
ăăăŻĺŽčŁ ăç°ĄĺăŞăă¨ă§ăŻăŞăăĺ¤ăăŽč˝ă¨ă犴ăăăăžăă ăăăă_Concepts_ăC ++ 11ă§ĺăĺ ĽăăăăŞăăŁăççąăŽ1ă¤ă§ăăă3ĺš´ĺžăé常ăŤéăăă_lite_ăăźă¸ă§ăłăŽăżăC ++ 14ăŤçľăżčžźăžăăžăă
ç§ăŽäžăŽsize
ăĄă˝ăăăŤăŻă署ĺăĺŤăžăăŚăăžăăă Base.graphicsăăăŽăăăŤ@mustimplement
ăă署ĺăčć
ŽăŤĺ
Ľăăžăă
Concept-light
ä¸é¨ăăă§ăŤăăăă¨ăäťăĺ ăăŚăăăžăăăăăŻăĺăçšĺŽăŽć˝čąĄĺăŽăľăăżă¤ăăŤĺśéăăćŠč˝ă§ăă ă¤ăłăżăźăă§ă¤ăšăŻäťăŽé¨ĺă§ăă
ăăŽăăŻăăŻăăŞăăŻăźăŤă§ăă ă¨ăŠăźăăăŞăŹăźăăăăŠăźăŤăăăŻăćĺă§ĺŽçžŠăăžăăăăă¤ăłăżăźăă§ă¤ăšăŽĺŽçžŠăŤăŻé常ăŤăăžăćŠč˝ăăžăăă ăă¨ăă°ăJuliaOptăŽMathProgBaseăŻăăăĺŽčĄăăăăžăćŠč˝ăăžăă ç§ăŻć°ăăă˝ăŤăăźďźhttps://github.com/IainNZ/RationalSimplex.jlďźăăăăŁăŚăăžăăăăă¨ăŠăźăçşçăăŞăăŞăăžă§ă¤ăłăżăźăă§ă¤ăšé˘ć°ăĺŽčŁ ăçśăăŞăăă°ăŞăăžăăă§ăăă
ăăŞăăŽććĄăĺăăăăŞăă¨ăăăžăăăďź ăăăăă¤ăłăżăźăă§ăźăšĺ ¨ä˝ăĺŽčŁ ăăĺż čŚăăăăžăăďź
ăăăŻĺ ąĺ¤/ĺĺ¤ăăŠăĄăźăżăăŠăŽăăăŤĺŚçăăžăăďź
äžăă°ă
abstract A has foo(::A, ::Array)
type B <: A
...
end
type C <: A
...
end
# is it ok to let the arguments to have more general types?
foo(x::Union(B, C), y::AbstractArray) = ....
@IainNZăŻăăććĄăŻĺŽéăŤăŻ@mustimplement
ăăăĺ°ăç¨éăŽĺşăăăŽăŤăăăă¨ă§ăăăăă¨ăă°ç˝˛ĺăćäžăăăă¨ăŻă§ăăžăăăćäžăăĺż
čŚăŻăăăžăăă ăăăŚăăăăŻé常ăŤăăłă˘ăă§ăăăăăçŹčŞăŽć§ćăĺĺžăă䞥ĺ¤ăăăă¨ćăăŚăăžăă ăăšăŚăŽăĄă˝ăăăĺŽéăŤĺŽčŁ
ăăăŚăăăă¨ă埡ĺśăăăŽăŻç´ ć´ăăăăă¨ă§ăăă @mustimplement
čĄăăăçžĺ¨ăŽăŠăłăżă¤ă ăă§ăăŻăŻăă§ăŤç´ ć´ăăăăă¨ă§ăăăĺŽčŁ
ăç°ĄĺăŞĺ ´ĺăăăăžăă
@lindahuaăăăŻčĺłćˇąăäžă§ăă ăăăŤă¤ăăŚčăăŞăăă°ăŞăăžăăă
@lindahuaăăăăăăăŞăăŽäžă@mustimplement
ăŻăăăĺ
ˇä˝çăŞăĄă˝ăăăˇă°ăăăŁăĺŽçžŠăăăăăćŠč˝ăăžăăă
ăăăăŁăŚăăăăŻăłăłăă¤ăŠăźă§ăăĺ°ă桹ăĺŽčŁ ăăĺż čŚăăăăăăăăžăăă ć˝čąĄĺăŽĺŽçžŠă§ăŻăă¤ăłăżăźăă§ăźăšĺ/署ĺă追补ăăĺż čŚăăăăžăă ăăăŚăçžĺ¨ă...ćŞĺŽçžŠăă¨ăŠăźăăšăăźăăăăăŽćçšă§ăéŠĺăŞă¨ăŠăźăĄăăťăźă¸ăçćăăĺż čŚăăăăžăă
ć
ĺ ąă襨çžăăŚă˘ăŻăťăšăăăăăŽć§ćă¨APIăăăĺ ´ĺă MethodError
ĺ°ĺˇćšćłăĺ¤ć´ăăăŽăŻé常ăŤç°Ąĺă§ăă
ăăă§ĺžăăăăă1ă¤ăŽăă¨ăŻă base.Test
é˘ć°ă§ăĺďźăăšăŚăŽĺďźďźă茪ĺăŽă¤ăłăżăźăă§ă¤ăšăĺŽĺ
¨ăŤĺŽčŁ
ăăŚăăăă¨ă確čŞăăăă¨ă§ăă ăăăŻćŹĺ˝ăŤăăĄăă¨ăăăŚăăăăăšăăŤăŞăă§ăăăă
@ivarneăŤćčŹăăžăă ăăăăŁăŚăĺŽčŁ ăŻćŹĄăŽăăăŤăŞăăžăă
has
厣č¨ă解ćăăăă¨ăăŤăăăźăľăźădictăŤĺăăăăăăŤčŞżć´ăăĺż
čŚăăăăžăăMethodError
ăŻăçžĺ¨ăŽé˘ć°ăă°ăăźăăŤăăŁăŻăˇă§ăăŞăŽä¸é¨ă§ăăăăŠăăăć¤ç´˘ăăĺż
čŚăăăăžăăăăŽĺ ´ĺăăťă¨ăăŠăŽăă¸ăăŻăŻMethodError
ăžăă
ç§ăŻăăăĺ°ăĺŽé¨ăăŚăăŚă揥ăŽčŚçšă使ç¨ăăŚăăžăhttps://gist.github.com/tknopp/ed53dc22b61062a2b283ç§ăă§ăăăă¨ďź
julia> abstract A
julia> addInterface(A,length)
julia> type B <: A end
julia> checkInterface(B)
ERROR: Interface not implemented! B has to implement length in order to be subtype of A ! in error at error.jl:22
length
ĺŽçžŠăăă¨ăăă¨ăŠăźăŻăšăăźăăăžăăă
julia> import Base.length
julia> length(::B) = 10
length (generic function with 34 methods)
julia> checkInterface(B)
true
çžĺ¨ăăăăŻç˝˛ĺăčć ŽăăŚăăŞăăăă§ăŻăăăžăăă
é˘ć°ăŽăˇă°ăăăŁăčć Žă§ăăăăăŤăčŚçšăŽăłăźăăĺ°ăć´ć°ăăžăăă ăăăŻăžă é常ăŤăăăăźă§ăăă䝼ä¸ăćŠč˝ăăăăăŤăŞăăžăăďź
julia> abstract A
julia> type B <: A end
julia> addInterface(A,:size,(A,Int64))
1-element Array{(DataType,DataType),1}:
(A,Int64)
julia> checkInterface(B)
ERROR: Interface not implemented! B has to implement size in order to be subtype of A !
in error at error.jl:22
julia> import Base.size
julia> size(::B, ::Integer) = 333
size (generic function with 47 methods)
julia> checkInterface(B)
true
julia> addInterface(A,:size,(A,Float64))
2-element Array{(DataType,DataType),1}:
(A,Int64)
(A,Float64)
julia> checkInterface(B)
ERROR: Interface not implemented! B has to implement size in order to be subtype of A !
in error at error.jl:22
in string at string.jl:30
čŚć¨ăŽă¤ăłăżăźăă§ăźăšăăŁăăˇăĽăé˘ć°ă§ăŻăŞăăˇăłăăŤă§ĺä˝ăăăăăŤăŞăăĺžă§ă¤ăłăżăźăă§ăźăšăčż˝ĺ ăăŚé˘ć°ă厣č¨ă§ăăăăăŤăŞăŁăăă¨ăčż˝ĺ ăăĺż čŚăăăăžăă 署ĺăŤă¤ăăŚăĺăăă¨ăăăŞăăă°ăŞăăŞăăăăăăžăăă
ďź2248ăăă§ăŤă¤ăłăżăźăă§ăźăšăŤăăă¤ăăŽčłćăćăŁăŚăăăŽăčŚăă°ăăă§ăă
ă¤ăłăżăźăă§ăźăšăŽăăăŞăăććŠçăŞćŠč˝ăŤă¤ăăŚăŽčăăĺ ŹéăăăŽăŻă0.3ăĺşăăžă§ĺťśćăăă¤ăăă§ăăăăăăŞăăč°čŤăĺ§ăăăŽă§ăĺ°ăĺăŤć¸ăăăăŽăăăăžăă
ăăăŻăă¤ăłăżăźăă§ăźăšĺŽŁč¨ă¨ăăŽă¤ăłăżăźăă§ăźăšăŽĺŽčŁ ăŽć§ćăŽă˘ăăŻă˘ăăă§ăă
interface Iterable{T,S}
start :: Iterable --> S
done :: (Iterable,S) --> Bool
next :: (Iterable,S) --> (T,S)
end
implement UnitRange{T} <: Iterable{T,T}
start(r::UnitRange) = oftype(r.start + 1, r.start)
next(r::UnitRange, state::T) = (oftype(T,state), state + 1)
done(r::UnitRange, state::T) = i == oftype(i,r.stop) + 1
end
ăăăç´°ăăĺĺ˛ăăŚăżăžăăăă ăžăăăăăŽé˘ć°ĺăŽć§ćďź A --> B
ĺăŽăŞăă¸ă§ăŻăăŤăăăăłă°é˘ć°ăŽĺă§ăăA
ĺ
ĽĺăăB
ă ăăŽčĄ¨č¨ăŽăżăăŤăŻćăăăŞăă¨ăăăžăă ăăă¨ăŻĺĽăŤă f :: A --> B
ăŻă f
ăă¸ă§ăăŞăăŻé˘ć°ă§ăăăĺA
ăĺB
ăŤăăăăłă°ăăăă¨ă厣č¨ăăăă¨ăććĄăăŚăăžăă ăăăä˝ăćĺłăăăŽăăŻĺ°ăćŞč§ŁćąşăŽčłŞĺă§ăă A
ĺăŽĺźć°ăŤéŠç¨ăăă¨ă f
ăB
ĺăŽçľćăčżăăă¨ăćĺłăăžăăďź f
ăŻăżă¤ăA
ĺźć°ăŤăŽăżéŠç¨ă§ăăă¨ăăăă¨ă§ăăďź čŞĺĺ¤ćăŻăĺşĺćăĺ
ĽĺćăŽăŠăă§ăçşçăăĺż
čŚăăăăžăăďź äťăŽă¨ăăăăăăŻăĄă˝ăăăčż˝ĺ ăăăŤć°ăăă¸ă§ăăŞăăŻé˘ć°ăä˝ćăăăă¨ă ăă§ăăăĺăŻăăăĽăĄăłăç¨ă§ăăă¨ćłĺŽă§ăăžăă
揥ăŤăă¤ăłăżăźăă§ăźăšIterable{T,S}
ăŽĺŽŁč¨ăăăăžăă ăăăŤăăă Iterable
ăŻă˘ă¸ăĽăźăŤăŤĺ°ăäźźăăăŽăŤăŞăăć˝čąĄĺăŤĺ°ăäźźăăăŽăŤăŞăăžăă Iterable.start
ă Iterable.done
ă Iterable.next
ă¨ĺźă°ăăă¸ă§ăăŞăăŻé˘ć°ă¸ăŽăă¤ăłăăŁăłă°ăăăă¨ăăçšă§ă˘ă¸ăĽăźăŤăŤäźźăŚăăžăă ăăăŻă Iterable
ă¨Iterable{T}
ă¨Iterable{T,S}
ăć˝čąĄĺă使ç¨ă§ăăĺ ´ćăçšăŤăĄă˝ăăăăŁăšăăăă§ä˝żç¨ă§ăăă¨ăăçšă§ĺăŤäźźăŚăăžăă
珏ä¸ăŤă UnitRange
ăIterable
ă¤ăłăżăźăă§ăźăšăĺŽčŁ
ăăćšćłăĺŽçžŠăăimplement
ăăăăŻăăăăžăă implement
ăăăăŻĺ
ă§ăŻăăŚăźăśăźăimport Iterable: start, done, next
ĺŽčĄăăăăŽăăăŤă Iterable.start
ă Iterable.done
ăăăăłIterable.next
é˘ć°ă使ç¨ă§ăăžăăăăăăŽé˘ć°ă¸ăŽăĄă˝ăăăŽčż˝ĺ ă ăăŽăăăăŻăŻăăăŠăĄăăŞăăŻĺăŽĺŽŁč¨ă¨ĺăăăăŤăăłăăŹăźăă§ăăăăăăŻĺ
ă§ăŻă UnitRange
ăŻăă˘ăłăăŹăŠĺă§ăŻăŞăăçšĺŽăŽUnitRange
ćĺłăăžăă
implement
ăăăăŻăŽä¸ťăŞĺŠçšăŻăćĄĺźľăăăć示çăŞimport
é˘ć°ăä¸čŚăŤăŞăăă¨ă§ăăăăăăŻćéťçăŤă¤ăłăăźăăăăžăăăăăŻăä¸čŹçăŤimport
ăŤă¤ăăŚćˇˇäšąăăŚăăăăäžżĺŠă§ăăă¨ăŤăăBase
ăťă¨ăăŠăŽă¸ă§ăăŞăăŻé˘ć°ăŻăä˝ăăăŽă¤ăłăżăźăă§ăźăšăŤĺąăăăšăă ă¨ćăăŽă§ăăăăŤăăă import
ăŽä˝żç¨ăŽĺ¤§é¨ĺăćé¤ăăăăŻăă§ăă ĺĺăŻăă¤ă§ăĺŽĺ
¨ăŤäżŽéŁžă§ăăăŽă§ăĺŽĺ
¨ăŤĺťć˘ă§ăăăăăăăžăăă
ç§ăćăă¤ăăăă1ă¤ăŽă˘ă¤ăă˘ăŻăă¤ăłăżăźăă§ă¤ăšé˘ć°ăŽăĺ
é¨ăăăźă¸ă§ăłă¨ăĺ¤é¨ăăăźă¸ă§ăłăĺé˘ăăăă¨ă§ăă ăăăćĺłăăăŽăŻăăĺ
é¨ăé˘ć°ăŻăăăă¤ăłăżăźăă§ăźăšăĺŽčŁ
ăăăăăŽăĄă˝ăăăćäžăăé˘ć°ă§ăăăăĺ¤é¨ăé˘ć°ăŻăăăă¤ăłăżăźăă§ăźăšăŤé˘ăăŚä¸čŹçăŞćŠč˝ăĺŽčŁ
ăăăăăŤĺźăłĺşăé˘ć°ă§ăăă¨ăăăă¨ă§ăă sort!
é˘ć°ăŽăĄă˝ăăďźéć¨ĺĽ¨ăŽăĄă˝ăăăé¤ăďźăčŚăă¨ăăŻă揥ăŽăă¨ăčć
ŽăăŚăă ăăă
julia> methods(sort!)
sort!(r::UnitRange{T<:Real}) at range.jl:498
sort!(v::AbstractArray{T,1},lo::Int64,hi::Int64,::InsertionSortAlg,o::Ordering) at sort.jl:242
sort!(v::AbstractArray{T,1},lo::Int64,hi::Int64,a::QuickSortAlg,o::Ordering) at sort.jl:259
sort!(v::AbstractArray{T,1},lo::Int64,hi::Int64,a::MergeSortAlg,o::Ordering) at sort.jl:289
sort!(v::AbstractArray{T,1},lo::Int64,hi::Int64,a::MergeSortAlg,o::Ordering,t) at sort.jl:289
sort!{T<:Union(Float64,Float32)}(v::AbstractArray{T<:Union(Float64,Float32),1},a::Algorithm,o::Union(ReverseOrdering{ForwardOrdering},ForwardOrdering)) at sort.jl:441
sort!{O<:Union(ReverseOrdering{ForwardOrdering},ForwardOrdering),T<:Union(Float64,Float32)}(v::Array{Int64,1},a::Algorithm,o::Perm{O<:Union(ReverseOrdering{ForwardOrdering},ForwardOrdering),Array{T<:Union(Float64,Float32),1}}) at sort.jl:442
sort!(v::AbstractArray{T,1},alg::Algorithm,order::Ordering) at sort.jl:329
sort!(v::AbstractArray{T,1}) at sort.jl:330
sort!{Tv<:Union(Complex{Float32},Complex{Float64},Float64,Float32)}(A::CholmodSparse{Tv<:Union(Complex{Float32},Complex{Float64},Float64,Float32),Int32}) at linalg/cholmod.jl:809
sort!{Tv<:Union(Complex{Float32},Complex{Float64},Float64,Float32)}(A::CholmodSparse{Tv<:Union(Complex{Float32},Complex{Float64},Float64,Float32),Int64}) at linalg/cholmod.jl:809
ăăăăŽăĄă˝ăăăŽä¸é¨ăŻăăăăŞăăŻăłăłăˇăĽăźăăźă寞蹥ă¨ăăŚăăžăăăăăŽäťăŽăĄă˝ăăăŻăăăăŞăăŻă˝ăźăăĄă˝ăăăŽĺ é¨ĺŽčŁ ăŽä¸é¨ăŤăăăžăăă ĺŽéăăăăćă¤ăšăĺŻä¸ăŽăăăŞăăŻăĄă˝ăăăŻăăă§ăďź
sort!(v::AbstractArray)
ćŽăăŻăă¤ăşă§ăăăăĺ é¨ăăŤĺąăăžăă çšăŤă
sort!(v::AbstractArray{T,1},lo::Int64,hi::Int64,::InsertionSortAlg,o::Ordering)
sort!(v::AbstractArray{T,1},lo::Int64,hi::Int64,a::QuickSortAlg,o::Ordering)
sort!(v::AbstractArray{T,1},lo::Int64,hi::Int64,a::MergeSortAlg,o::Ordering)
税éĄăŽăĄă˝ăăăŻăă˝ăźăă˘ăŤă´ăŞăşă ăä¸čŹçăŞă˝ăźăćŠć§ăŤăăăŻăăăăăŤĺŽčŁ
ăăăăŽă§ăă çžĺ¨ă Sort.Algorithm
ăŻć˝čąĄĺă§ăăă InsertionSortAlg
ă QuickSortAlg
ăăăăłMergeSortAlg
ăŻăăŽĺ
ˇä˝çăŞăľăăżă¤ăă§ăă ă¤ăłăżăźăă§ă¤ăšă§ăŻă Sort.Algorithm
䝣ăăăŤă¤ăłăżăźăă§ă¤ăšăŤăăăă¨ăă§ăăçšĺŽăŽă˘ăŤă´ăŞăşă ăăăăĺŽčŁ
ăăžăă ăăŽăăăŞăăŽďź
# module Sort
interface Algorithm
sort! :: (AbstractVector, Int, Int, Algorithm, Ordering) --> AbstractVector
end
implement InsertionSortAlg <: Algorithm
function sort!(v::AbstractVector, lo::Int, hi::Int, ::InsertionSortAlg, o::Ordering)
<strong i="17">@inbounds</strong> for i = lo+1:hi
j = i
x = v[i]
while j > lo
if lt(o, x, v[j-1])
v[j] = v[j-1]
j -= 1
continue
end
break
end
v[j] = x
end
return v
end
end
揥ăŤă揥ăŽăăăŤĺŽçžŠăăăă¨ă§ăĺż čŚăŞĺé˘ăĺŽçžă§ăăžăă
# module Sort
sort!(v::AbstractVector, alg::Algorithm, order::Ordering) =
Algorithm.sort!(v,1,length(v),alg,order)
ćă
ăŻĺźăă§ăăăă¨ăé¤ăăŚăăăăŻç§ăăĄăçžĺ¨ăăŁăŚăăăă¨ăŤ_very_čżăAlgorithm.sort!
ăŽäťŁăăăŤăŻăĄăăăŠsort!
ć§ă
ăŞă˝ăźăă˘ăŤă´ăŞăşă ăĺŽčŁ
ăăĺ ´ĺă¨ăăĺ
ĺ´ăăŽĺŽçžŠăăăćšćłă§ăă- Algorithm.sort!
ăŻsort!
é˘ć°ă§ăŻăăăžăăă ăăăŤăŻă sort!
ăŽĺŽčŁ
ăăăŽĺ¤é¨ă¤ăłăżăźăă§ă¤ăšăăĺé˘ăăĺšćăăăăžăă
@StefanKarpinskič¨äşăăăăă¨ăăăăăžăăďź ăăăŻç˘şăăŤ0.3ăŽăăŽă§ăŻăăăžăăă äťĺăćăĄăăžăăăŽă§ăăăăŞăăă 0.3ăăăăŤčľˇăăăŽăăĺĺš´ĺžăŤčľˇăăăŽăăŻăăăăžăă;-)
ä¸čŚăăă¨ăăăĺŽčŁ ăťăŻăˇă§ăłăçŹčŞăŽăłăźăăăăăŻă§ĺŽçžŠăăăŚăăăŽăćŹĺ˝ăŤďźďźďźĺĽ˝ăă§ăă ăăăŤăăăĺĺŽçžŠăŽă¤ăłăżăźăă§ăźăšăç´ćĽć¤č¨źă§ăăžăă
ĺżé ăŻăăăžăăăăŞăŞăźăšăĺŽĺŽăăăăă¨ăăŚăăéăĺ°ćĽăŽćŠč˝ăŤă¤ăăŚć¨ć¸ŹăăŚăĺŽéăŤăŻĺŽłăŻăăăžăăă
ăăŞăăŽă˘ăăăźăăŻăŻăăăŤĺşćŹçă§ăăăăăă¤ăăŽă¤ăłăżăźăă§ăźăšăŤäžĺăăŞăĺéĄă解湺ăăăă¨ăăžăă ăžăăč¨čŞăŤć°ăăć§ćďźă¤ăžăăă¤ăłăżăźăă§ăźăšďźăĺ°ĺ ĽăăŚăč¨čŞăĺ°ăč¤éăŤăăžăďźăăăŻĺż ăăăćŞăăă¨ă§ăŻăăăžăăďźă
ç§ăŻăă¤ăłăżăźăă§ăźăšăăć˝čąĄĺă¸ăŽćł¨éă¨ăăŚăăŁă¨čŚăŚăăžăă has
ăĺ
Ľăăă¨ăă¤ăłăżăźăă§ăźăšăćĺŽă§ăăžăăăćĺŽăăĺż
čŚăŻăăăžăăă
ç§ăč¨ăŁăăăăŤăç§ăŻă¤ăłăżăźăă§ăźăšăăăŽĺŽŁč¨ă§ç´ćĽć¤č¨źăăăăă¨ăă§ăăăăŠăăćŹĺ˝ăŤćŹ˛ăăă§ăă ăăă§ćă䞾輲ć§ăŽä˝ăă˘ăăăźăăŻăĺ厣č¨ĺ ă§ăĄă˝ăăăĺŽçžŠă§ăăăăăŤăăăă¨ăăăăăžăăă ă ăăăăŞăăŽäžăă¨ăă¨
type UnitRange{T} <: Iterable{T,T}
start(r::UnitRange) = oftype(r.start + 1, r.start)
next(r::UnitRange, state::T) = (oftype(T,state), state + 1)
done(r::UnitRange, state::T) = i == oftype(i,r.stop) + 1
end
ĺ厣č¨ăŽĺ¤ă§é˘ć°ăĺŽçžŠăăăă¨ăŻĺźăçśă訹ĺŻăăăžăă ĺŻä¸ăŽéăăŻăĺ é¨é˘ć°ĺŽŁč¨ăă¤ăłăżăźăă§ă¤ăšăŤĺŻžăăŚć¤č¨źăăăăă¨ă§ăă
ăăăăçš°ăčżăăŤăŞăăžăăăç§ăŽăćă䞾輲ć§ăŽä˝ăă˘ăăăźăăăŻčżčŚçźçăăăăăăăăžăăă ćŹĺ˝ăŤăăăăŞăă
ăăăăŽĺŽçžŠăăżă¤ăăăăăŻĺ ăŤé 罎ăăéăŽĺéĄăŽ1ă¤ăŻăăăăčĄăăŤăŻăĺ°ăŞăă¨ăă¤ăłăżăźăă§ă¤ăšăŽĺ¤éçśćżăĺŽéăŤĺż čŚă§ăăăç°ăŞăă¤ăłăżăźăă§ă¤ăšéă§ĺĺăŽčĄçŞăçşçăăĺŻč˝ć§ăăăăă¨ă§ăă ĺăĺŽçžŠăăĺžăŽăăćçšă§ăĺăă¤ăłăżăźăă§ă¤ăšăăľăăźăăăă¨ăăäşĺŽăčż˝ĺ ăăăă¨ăă§ăăžăăăăăăŤă¤ăăŚăŻăăăăăăžăăă
@StefanKarpinskiăăŞăăăăăŤă¤ăăŚčăăŚăăăŽăčŚăăŽăŻç´ ć´ăăăăă¨ă§ăă
Graphsăăăąăźă¸ăŻăă¤ăłăżăźăă§ă¤ăšăˇăšăă ăćăĺż čŚă¨ăăăăăąăźă¸ă§ăă ăăŽăˇăšăă ăăăă§ćŚčŞŹăăăŚăăă¤ăłăżăźăă§ăźăšăăŠăŽăăăŤčĄ¨çžă§ăăăăčŚăăŽăŻčĺłćˇąăă§ăăăďź http ďź
@StefanKarpinski ďźĺ¤éçśćżă¨ăăăăŻĺ é˘ć°ĺŽŁč¨ăŽĺéĄăŻĺŽĺ ¨ăŤăŻăăăăžăăă ăżă¤ăăăăăŻĺ ă§ăŻăçśćżăăăăăšăŚăŽă¤ăłăżăźăă§ă¤ăšăăă§ăăŻăăĺż čŚăăăăžăă
ăăăăç§ăŻăă¤ăłăżăźăă§ăźăšăŽĺŽčŁ
ăăăŞăźăăłăăŤăăăă¨ćăăăăăăŞăăă¨ăç解ăăŚăăžăă ăžăăĺĺ
é˘ć°ĺŽŁč¨ăŻč¨čŞăč¤éăŤăăăăĺŻč˝ć§ăăăăžăă ăăśăăç§ăďź7025ă§ĺŽčŁ
ăăă˘ăăăźăă§ĺĺă§ăă ăŠăĄăăăŤç˝Žăverify_interface
é˘ć°ĺŽŁč¨ăŽĺžďźăžăăŻăŚăăăăăšăă§ďźăăžăăŻăŤăăĺťśćMethodError
ă
ăăŽĺéĄăŻăç°ăŞăă¤ăłăżăźăă§ă¤ăšăĺăĺĺăŽă¸ă§ăăŞăăŻé˘ć°ăćă¤ĺŻč˝ć§ăăăăă¨ă§ăăăăăŤăăăĺĺăŽčĄçŞăçşçăăć示çăŞă¤ăłăăźăăĺŽčĄăăăăĺŽĺ ¨äżŽéŁžĺă§ăĄă˝ăăăčż˝ĺ ăăĺż čŚăăăăžăă ăžăăăŠăŽăĄă˝ăăĺŽçžŠăăŠăŽă¤ăłăżăźăă§ă¤ăšăŤĺąăăŚăăăăć確ăŤăŞăăžăăăăăăăĺĺăŽčĄçŞăćĺăŤçşçăăĺŻč˝ć§ăăăççąă§ăă
ă¨ăăă§ăç§ăŻăč¨čŞăŽĺĽăŽăăăŽăă¨ăăŚă¤ăłăżăźăă§ăźăšăčż˝ĺ ăăăă¨ăŻăĺ°ăéç´äş¤çăăăă¨ćăăăă¨ăŤĺćăăžăă çľĺąăŽă¨ăăăććĄă§čż°ăšăăăăŤăăăăăŻă˘ă¸ăĽăźăŤăŤĺ°ăäźźăŚăăŚăăżă¤ăăŤĺ°ăäźźăŚăăžăă ăłăłăťăăăŽçľąä¸ăŻĺŻč˝ăăăăăŞăć°ăăăžăăăăŠăăăă°ăăăŽăăăăăžăăă
ç§ăŻăăă¤ăăŽççąăăăinterface-as-library-featureă˘ăăŤăăăinterface-as-libraryă˘ăăŤă弽ăżăžăăăăăŻč¨čŞăăăăˇăłăăŤăŤäżăĄďźç˘şăăŤĺĽ˝ăżă§ăăăĺ ˇä˝çăŞç°č°ă§ăŻăăăžăăďźăćŠč˝ăăŞăăˇă§ăłăŽăžăžă§ç°ĄĺăŤă§ăăăă¨ăćĺłăăžăĺŽéăŽč¨čŞăăăăăă¨ăŞăăćšĺăžăăŻĺŽĺ ¨ăŤç˝Žăćăăăăžăăă
ĺ ˇä˝çăŤăŻă @ tknoppăăăŽććĄďźăžăăŻĺ°ăŞăă¨ăććĄăŽĺ˝˘ďźăŻćăăžăăăăăŻăč¨čŞăŤć°ăăăăŽăĺż čŚă¨ăăăŤĺŽçžŠćăŽăă§ăăŻăćäžăăžăă ç§ăçŽăŤăă丝ăŞćŹ çšăŻăĺĺ¤ć°ăĺŚçăăč˝ĺăăŞăăă¨ă§ăă ăăăŻăă¤ăłăżăźăă§ă¤ăšĺŽçžŠăŤĺż čŚăŞé˘ć°ăŽăżă¤ăăŽăżă¤ă_predicates_ăćäžăăăăă¨ă§ĺŚçă§ăăă¨ćăăžăă
ç§ăŽććĄăŽä¸ťăŞĺćŠăŽ1ă¤ăŻăăĄă˝ăăăčż˝ĺ ăăăăăŤçˇç§°é˘ć°ă_ă¤ăłăăźă_ăăĺż čŚăăăăăăăăăă¨ăŻăšăăźăăăŞăăă¨ăŤăăŁăŚĺźă辡ăăăă大éăŽćˇˇäšąă§ăă ăťă¨ăăŠăŽĺ ´ĺăăăăŻčŞ°ăăéĺ ŹĺźăŽă¤ăłăżăźăă§ăźăšăĺŽčŁ ăăăă¨ăăŚăăă¨ăăŤçşçăăăăăăăăŤăăăăăă辡ăăŁăŚăăăăăŤčŚăăžăă
ăĄă˝ăăăă¤ăłăżăźăă§ăźăšăŤĺąăăăăŽăŤĺŽĺ ¨ăŤĺśéăăăĺ ´ĺăé¤ăăŚăăăăŻč§Łćąşăăšăç´äş¤ĺéĄăŽăăăŤćăăăžăă
ăăăăăăăŻç˘şăăŤčŻăĺśéăŽăăăŤăŻćăăžăăă
@StefanKarpinskiăŻăă¤ăłăżăźăă§ăźăšă§ăăŁăšăăăă§ăăă¨č¨ăŁăŚăăžăă ăžăă implement
ć§ćă§ăŻăçšĺŽăŽăżă¤ăăă¤ăłăżăźăă§ăźăšăĺŽčŁ
ăăă¨ăăčăćšăăăăžăă
ä¸čŹăŤăĄă˝ăăăŻçšĺŽăŽĺăŤĺąăăăĺăŽăżăăŤăŤĺąăăăăăăăăŻĺ¤éăăŁăšăăăă¨ăŻĺ°ăç¸ĺăăăăă§ăă ă§ăŻăăĄă˝ăăăĺăŤĺąăăŚăăŞăĺ ´ĺăă¤ăłăżăźăă§ă¤ăšďźĺşćŹçăŤăŻăĄă˝ăăăŽăťăăďźăŻăŠăŽăăăŤăăŚĺăŤĺąăăăă¨ăă§ăăžăăďź
ăŠă¤ăăŠăŞMă使ç¨ăăŚăăă¨ăăžăăăă
module M
abstract A
abstract B
type A2 <: A end
type A3 <: A end
type B2 <: B end
function f(a::A2, b::B2)
# do stuff
end
function f(a::A3, b::B2)
# do stuff
end
export f, A, B, A2, A3, B2
end # module M
äťăç§ăŻAă¨Băĺăă¸ă§ăăŞăăŻé˘ć°ăć¸ăăăă§ă
using M
function userfunc(a::A, b::B, i::Int)
res = f(a, b)
res + i
end
ăăŽäžă§ăŻă f
é˘ć°ăŻă A
ă¨B
ĺăĺăă˘ăăăăŻă¤ăłăżăźăă§ă¤ăšă形ćăă f
ĺźăłĺşăăă¨ăă§ăăă¨ćłĺŽă§ăăăăăŤăăăă¨ćăăžăăăăăăŽ
A
ă¨B
ĺ
ˇä˝çăŞăľăăżă¤ăăćäžăăăäťăŽă˘ă¸ăĽăźăŤăŻă f
ĺŽčŁ
ăćäžăăăă¨ăćĺž
ăăăžăă ĺż
čŚăŞăĄă˝ăăăŽçľăżĺăăççşăĺéżăăăăăŤăăŠă¤ăăŠăŞăć˝čąĄĺăŤĺŻžăăŚf
ăĺŽçžŠăăăă¨ăćĺž
ăăžăă
module N
using M
type SpecialA <: A end
type SpecialB <: B end
function M.f(a::SpecialA, b::SpecialB)
# do stuff
end
function M.f(a::A, b::SpecialB)
# do stuff
end
function M.f(a::SpecialA, b::B)
# do stuff
end
export SpecialA, SpecialB
end # module N
確ăăŤăăăŽäžăŻăăŞăä¸čŞçśăŤćăăžăăăăăžăăăă°ăďźĺ°ăŞăă¨ăç§ăŽĺżăŽä¸ă§ăŻďźĺ¤éăăŁăšăăăă¨ă¤ăłăżăźăă§ă¤ăšăĺŽčŁ ăăçšĺŽăŽăżă¤ăăŽćŚĺżľă¨ăŽéăŤć šćŹçăŞä¸ä¸č´ăăăăăăŤćăăăă¨ă示ăăŚăăžăă
ăăăă import
桡䚹ăŤă¤ăăŚăŽăăŞăăŽćčŚăŻăăăăžăă ăăŽäžă§ă using M
ăĺ
ĽăăŚăăă f
ăŤăĄă˝ăăăčż˝ĺ ăăăă¨ăăă¨ăćĺž
ăŠăăăŤćŠč˝ăăăăĄă˝ăăăčż˝ĺ ăăĺż
čŚăăăŁăăă¨ăčŚăăŚăăăŽăŤăć°ĺăŽčŠŚčĄăĺż
čŚM.f
ďźăžăăŻimport
ă使ç¨ăăăă¨ăă§ăăžăďźă ăăăăă¤ăłăżăźăă§ăźăšăăăŽĺéĄăŽč§Łćąşçă ă¨ăŻćăăžăăă ăĄă˝ăăăŽčż˝ĺ ăăăç´ćçăŤăăćšćłăăăŹă¤ăłăšăăźăăłă°ăăĺĽăŽĺéĄăŻăăăžăăďź
@ abe-egnorăžăăăăăŞăźăăłăŞă˘ăăăźăăăăĺŽçžĺŻč˝ă ă¨ćăăžăă ç§ăŽăăăăżă¤ăďź7025ăŤăŻăĺşćŹçăŤ2ă¤ăŽçšăćŹ ăăŚăăžăă
aďźă¤ăłăżăźăă§ăźăšăĺŽçžŠăăăăăŽăăčŻăć§ć
bďźăăŠăĄăăŞăăŻăżă¤ăăŽĺŽçžŠ
ç§ăŻăăžăăăŠăĄăăŞăăŻăżă¤ăăŽçŹŹä¸äşşč
ă§ăŻăŞăăŽă§ăbďźăŻăă桹ăçľé¨ăćă¤čŞ°ăăŤăăŁăŚč§Łćąşă§ăăă¨ç˘şäżĄăăŚăăžăă
aďźăŤé˘ăăŚăŻăăŻăă§čĄăăă¨ăă§ăăžăă ĺäşşçăŤăŻăć˝čąĄĺĺŽçžŠăŽä¸é¨ă¨ăăŚă¤ăłăżăźăă§ăźăšăç´ćĽĺŽçžŠăăăăăŤăăăç¨ĺşŚăŽč¨čŞăľăăźăă貝ăăăă¨ăă§ăăă¨ćăăžăă has
ă˘ăăăźăăŻčżčŚçźçăăăăăăăăžăăă ăłăźăăăăăŻăŻăăăăăčŻăăăăăăăăžăăă ĺŽéăăăăŻďź4935ă¨é常ăŤé˘éŁăăăăăĺ
é¨ăă¤ăłăżăźăă§ăźăšăĺŽçžŠăăăŚăăžăăăăăăŻăăăŞăăŻă¤ăłăżăźăă§ăźăšăŤé˘ăăăăŽă§ăă ăăŽĺéĄăŻďź4935ăăăăŻăăăŤéčŚă ă¨ćăăŽă§ăăăăăăăłăăŤăăĺż
čŚăŻăăăžăăă ăă ăăć§ćçăŤăŻă严ćšăŽăŚăźăšăąăźăšăčć
ŽăŤĺ
Ľăăăă¨ăăĺ§ăăăžăă
https://gist.github.com/abe-egnor/503661eb4cc0d66b4489ăŻăç§ăčăăŚăă税éĄăŽĺŽčŁ
ăćĺăŤçŞăĺşăăžăăă čŚăăăŤăă¤ăłăżăźăă§ăźăšăŻăăăŽă¤ăłăżăźăă§ăźăšăŤĺż
čŚăŞé˘ć°ăŽĺĺă¨ăăŠăĄăźăżăźĺăĺŽçžŠăăăĺăădictăžă§ăŽé˘ć°ă§ăă @implement
ăăŻăăŻăćĺŽăăăĺăŽé˘ć°ăĺźăłĺşăăŚăăăćĺŽăăăé˘ć°ĺŽçžŠăŤĺăćĽçśăăăăšăŚăŽé˘ć°ăĺŽçžŠăăăŚăăăă¨ă確čŞăăžăă
čŻăçšďź
ćŞăçšďź
ăăŠăĄăźăżĺăŽĺéĄăŤĺŻžăă解湺çăăăă¨ćăăžăăă¤ăžăăă¤ăłăżăźăă§ă¤ăšĺŽçžŠăŻăĺăŽĺ¤ăŤĺŻžăăé˘ć°ă§ăŻăŞăăĺăŽĺźăŤĺŻžăăăăŻăă§ăăĺż
čŚăăăăžăă @implement
ăăŻăăŻăĺăăŠăĄăźăżăźăé˘ć°ĺŽçžŠăŤćĄĺźľăăŚă揥ăŽăăăŞăă¨ăĺŻč˝ăŤăăžăă
<strong i="7">@interface</strong> stack(Container, Data) begin
stack_push!(Container, Data)
end
<strong i="8">@implement</strong> stack{T}(Vector{T}, T) begin
stack_push!(vec, x) = push!(vec, x)
end
ăăŽĺ ´ĺăĺăăŠăĄăźăżăźăŻă¤ăłăżăźăă§ăźăšă§ĺŽçžŠăăăăĄă˝ăăăŤćĄĺźľăăăăŽă§ă stack_push!{T}(vec::Vector{T}, x::T) = push!(vec, x)
ăŤćĄĺźľăăăžăăăăăŻăăžăăŤćŁăăăă¨ă ă¨ćăăžăă
ćéăăăă°ăăăăčĄăăăăŤćĺăŽĺŽčŁ ăä˝ăç´ăăžăă ăăăăä¸éąéç¨ĺşŚă§ăă
ç§ăŻă¤ăłăżăźăăăăĺ°ăé˛čŚ§ăăŚăäťăŽăăă°ăŠăăłă°č¨čŞăă¤ăłăżăźăă§ăźăšăçśćżăŞăŠăŤă¤ăăŚä˝ăăăŚăăăŽăăčŚăŚăăăă¤ăăŽă˘ă¤ăă˘ăćăă¤ăăžăăă ďźčŞ°ăăăăăŤčĺłăăăĺ ´ĺăŻăç§ăĺăŁăé常ăŤĺ¤§ăžăăŞăĄă˘https://gist.github.com/mauro3/e3e18833daf49cdf8f60ďź
čŚăăăŤăă¤ăłăżăźăă§ăźăšăŻćŹĄăŽćšćłă§ĺŽčŁ ă§ăăĺŻč˝ć§ăăăăžăă
ăăăŤăăăć˝čąĄĺăă¤ăłăżăźăă§ăźăšăŤĺ¤ăăăăăŽă¤ăłăżăźăă§ăźăšăĺŽčŁ ăăăăăŤĺ ˇä˝çăŞăľăăżă¤ăăĺż čŚăŤăŞăăžăă
éˇă芹ďź
ç§ăčŚă¤ăăăŽăŻăăăă¤ăăŽăçžäťŁăč¨čŞăŻăľăăżă¤ăăŽăăŞă˘ăźăăŁăşă ăĺťć˘ăăŚăăăă¨ă§ăăă¤ăžăăĺăç´ćĽă°ăŤăźăĺăăăă¨ăŻăŞăă䝣ăăăŤă¤ăłăżăźăă§ă¤ăš/çšć§/ĺăŻăŠăšăŤĺąăăăăŽăŤĺşăĽăăŚĺăă°ăŤăźăĺăăžăă ä¸é¨ăŽč¨čŞă§ăŻăă¤ăłăżăźăă§ăźăš/çšć§/ĺăŻăŠăšăŻăăăăŽéă§é ĺşăćăĄăç¸äşăŤçśćżăăăă¨ăă§ăăžăă 彟ăăŻăžăăăăŽé¸ćăŤă¤ăăŚďźăťă¨ăăŠďźćşčśłăăŚăăăăă§ăă äžďź Go ă
Rust ă Haskell ă
GoăŻă3ă¤ăŽä¸ă§ćăĺłĺŻă§ăŻăŞăăăăŽă¤ăłăżăźăă§ă¤ăšăćéťçăŤćĺŽă§ăăžăăă¤ăžăăĺăă¤ăłăżăźăă§ă¤ăšăŽçšĺŽăŽé˘ć°ăťăăăĺŽčŁ
ăăĺ ´ĺăăăŽă¤ăłăżăźăă§ă¤ăšăŤĺąăăžăă RustăŽĺ ´ĺăă¤ăłăżăźăă§ăźăšďźçšć§ďźăŻimpl
ăăăăŻăŤć示çăŤĺŽčŁ
ăăĺż
čŚăăăăžăă GoăRustăăăŤăăĄă˝ăăăćăŁăŚăăžăăă HaskellăŤăŻăăŤăăĄă˝ăăăăăăăăăăŻĺŽéăŤăŻă¤ăłăżăźăă§ăźăšďźĺăŻăŠăšďźăŤç´ćĽăŞăłăŻăăăŚăăžăă
ăăćĺłă§ăăăăŻJuliaăčĄăăă¨ăŤăäźźăŚăăžăăć˝čąĄĺăŻďźćéťăŽďźă¤ăłăżăźăă§ăźăšăŽăăăŞăăŽă§ăăă¤ăžăăăăŁăźăŤăă§ăŻăŞăĺä˝ăŤé˘ăăăăŽă§ăă ăăăŻă @ StefanKarpinskiăä¸č¨ăŽć稿ăŽ1ă¤ă§ă茳ĺŻăăăăăŤă¤ăłăżăźăă§ă¤ăšăčż˝ĺ ăăă¨ăĺ°ăéç´äş¤ăŤćăăăă¨čż°ăšăăăŽă§ăă ăăăăŁăŚăJuliaăŤăŻăżă¤ăé幤ďźă¤ăžăăľăăżă¤ăăăŞă˘ăźăăŁăşă ďźăăăăžăăăGo / Rust / HaskellăŤăŻăăăžăăă
é幤None<: ... <:Any
ăăšăŚăŽĺăäżćăăŞăăăJuliaăŽć˝čąĄĺăăăĺ¤ăăŽă¤ăłăżăźăă§ă¤ăš/ăăŹă¤ă/ĺăŻăŠăšăŤĺ¤ćăăăŽăŻăŠăă§ăăďź ăăăŤăŻäťĽä¸ăĺŤăžăăžăă
1ďźďźć˝čąĄďźĺăŽĺ¤éçśćżă訹ĺŻăăďźĺéĄďź5ďź
2ďźé˘ć°ăć˝čąĄĺăŤé˘éŁäťăăăă¨ă訹ĺŻăăďźă¤ăžăăă¤ăłăżăźăă§ăźăšăĺŽçžŠăăďź
3ďźć˝čąĄĺďźă¤ăžăăăăŠăŤăăŽĺŽčŁ
ďźă¨ĺ
ˇčąĄĺăŽä¸ĄćšăŤĺŻžăăŚăăăŽă¤ăłăżăźăă§ăźăšăćĺŽă§ăăăăăŤăăžăă
ăăăŤăăăçžĺ¨ăăăăăăŽç´°ăăăżă¤ăăŽă°ăŠăăä˝ćăăă掾éçăŤĺŽčŁ ă§ăăă¨ćăăžăă ăă¨ăă°ăé ĺĺăŻćŹĄăŽăăăŤçľĺăăăžăă
abstract Container <: Iterable, Indexable, ...
end
abstract AbstractArray <: Container, Arithmetic, ...
...
end
abstract Associative{K,V} <: Iterable, Indexable, Eq
haskey :: (Associative, _) --> Bool
end
abstract Iterable{T,S}
start :: Iterable --> S
done :: (Iterable,S) --> Bool
next :: (Iterable,S) --> (T,S)
end
abstract Indexable{A,I}
getindex :: (A,I) --> eltype(A)
setindex! :: (A,I) --> A
get! :: (A, I, eltype(A)) --> eltype(A)
get :: (A, I, eltype(A)) --> eltype(A)
end
abstract Eq{A,B}
== :: (A,B) --> Boolean
end
...
ăăăăŁăŚăĺşćŹçăŤć˝čąĄĺăŻăăŁăźăŤăă¨ăăŚă¸ă§ăăŞăăŻé˘ć°ăćă¤ăă¨ăă§ăăžăďźă¤ăžăăă¤ăłăżăźăă§ă¤ăšăŤăŞăăžăďźăăĺ ˇčąĄĺăŻé常ăŽăăŁăźăŤăă ăăćăĄăžăă ăăăŻăăă¨ăă°ăAbstractArrayăăć´žçăăăŽă§ăŻăŞăăăłăłăăăźăŤĺ˝šçŤă¤é¨ĺăé¸ćăăă ăă§ăăăăăAbstractArrayăăć´žçăăăăŽăĺ¤ăăăă¨ăăĺéĄă解湺ăăĺŻč˝ć§ăăăăžăă
ăăăăžăŁăăčŻăčăă§ăăĺ ´ĺă解湺ăăšăăă¨ăăăăăăăăžăďźçšăŤăĺă¨ĺăăŠăĄăźăżăźăćĺŽăăćšćłďźăăăăăăčăă䞥ĺ¤ăăăăžăăďź
@ssfrrăŻăă¤ăłăżăźăă§ăźăšă¨ĺ¤éăăŁăšăăăăŻäşćć§ăăŞăă¨ä¸č¨ă§ăłăĄăłăăăžăăă ăă¨ăă°ăHaskellă§ăŻăăăŤăăĄă˝ăăăŻĺăŻăŠăšă使ç¨ăăăă¨ăŤăăŁăŚăŽăżĺŻč˝ă§ăăăăăăăăŻĺ˝ăŚăŻăžăăŞăăŻăă§ăă
ăžăă @ StefanKarpinskiăŽč¨äşăčŞăă§ăăinterface
䝣ăăăŤabstract
ăç´ćĽä˝żç¨ăăăŽăçăŤăăŞăŁăŚăăăă¨ăăăăăžăăă ăă ăăăăŽĺ ´ĺă abstract
ăinterface
1ă¤ăŽéčŚăŞăăăăăŁăçśćżăăăă¨ăéčŚă§ăăă¤ăžăăĺŽçžŠăăăinterface
_ after_ăŽimplement
ă¸ăŽĺăŽĺŻč˝ć§ă§ăă 揥ăŤătypAăalgoBăŤĺż
čŚăŞă¤ăłăżăźăă§ă¤ăšăĺŽčŁ
ăăăă¨ăăłăźăă§ĺŽŁč¨ăăăă¨ăŤăăălibAăŽăżă¤ătypAă¨libBăŽă˘ăŤă´ăŞăşă algoBă使ç¨ă§ăăžăďźăăăŻăĺ
ˇčąĄĺăä¸ç¨ŽăŽăŞăźăăłăŞĺ¤éçśćżăćăŁăŚăăăă¨ăćĺłăăă¨ćăăžăďźă
@ mauro3 ăç§ăŻĺŽéăŤăăŞăăŽććĄăćŹĺ˝ăŤĺĽ˝ăă§ăă ç§ăŤă¨ăŁăŚăăăăŻé常ăŤăă¸ăĽăŞă˘ăłăă§čŞçśăŞćăăăăžăă ăžăăăăăŻăă¤ăłăżăźăă§ă¤ăšăĺ¤éçśćżăăăăłć˝čąĄĺăŽăăăŁăźăŤăăăŽăŚăăźăŻă§ĺźˇĺăŞçľąĺă ă¨ćăăžăďźăă ăăăăŁăźăŤăăŻĺ¤ă§ăŻăŞăăĄă˝ăă/é˘ć°ăŽăżă§ăăăăăĺŽéăŤăŻăăă§ăŻăăăžăăďźă abstract Algorithm
ă¨Algorithm.sort!
厣č¨ăăăă¨ă§abstract Algorithm
sort!
äžăŤĺŻžăă彟ăŽććĄăĺŽčŁ
ă§ăăăŽă§ăăăăŻ@StefanKarpinskiăŽăĺ
é¨ăă¨ăĺ¤é¨ăăŽă¤ăłăżăźăă§ă¤ăšăĄă˝ăăăĺşĺĽăăă¨ăăčăă¨ăăăžăAlgorithm.sort!
ă
ăżăăŞăăăăŞăă
------------------ĺĺ§éŽäťś------------------
Ďäťśäşşďź "Jacob Quinn" [email protected];
Ďéćéďź2014ĺš´9ć12ćĽďźććäşďźä¸ĺ6:23
ĺäťśäşşďź "JuliaLang / julia "
ćéďź "Implement" [email protected];
丝é˘ďźReďź[julia]ć˝čąĄĺăŽă¤ăłăżăźăă§ăźăšďźďź6975ďź
@ mauro3 ăç§ăŻĺŽéăŤăăŞăăŽććĄăćŹĺ˝ăŤĺĽ˝ăă§ăă ç§ăŤă¨ăŁăŚăăăăŻé常ăŤăă¸ăĽăŞă˘ăłăă§čŞçśăŞćăăăăžăă ăžăăăăăŻăă¤ăłăżăźăă§ă¤ăšăĺ¤éçśćżăăăăłć˝čąĄĺăŽăăăŁăźăŤăăăŽăŚăăźăŻă§ĺźˇĺăŞçľąĺă ă¨ćăăžăďźăă ăăăăŁăźăŤăăŻĺ¤ă§ăŻăŞăăĄă˝ăă/é˘ć°ăŽăżă§ăăăăăĺŽéăŤăŻăăă§ăŻăăăžăăďźă ăžăăăăăŻ@StefanKarpinskiăŽăĺ é¨ăă¨ăĺ¤é¨ăăŽă¤ăłăżăźăă§ă¤ăšăĄă˝ăăăĺşĺĽăăă¨ăăă˘ă¤ăă˘ă¨
â
ăăŽăĄăźăŤăŤç´ćĽčżäżĄăăăăGitHubă§čĄ¨ç¤şăăŚăă ăăă
@implement大ĺ¤çłă訳ăăăžăăă ăŠăŽăăăŤpingăăăăăăăžăăă ăžă çĽăăŞăăŁăĺ ´ĺăŻăçťé˘ăŽĺłĺ´ăŤăă[çťé˛č§Łé¤]ăăżăłă使ç¨ăăŚăăăăăŽéçĽăăčŞĺčŞčşŤăĺé¤ă§ăăžăă
ăăăăç§ăŻăăŞăăăľăŞăźă¨č¨ăăŽăăăžăĺŠăăăă¨ăă§ăăŞăă¨č¨ăăăă ăă§ă
------------------ĺĺ§éŽäťś------------------
Ďäťśäşşďź "pao" [email protected];
Ďéćéďź2014ĺš´9ć13ćĽďźććĺ
ďźćä¸9:50
ĺäťśäşşďź "JuliaLang / julia "
ćéďź "Implement" [email protected];
丝é˘ďźReďź[julia]ć˝čąĄĺăŽă¤ăłăżăźăă§ăźăšďźďź6975ďź
@implement大ĺ¤çłă訳ăăăžăăă ăŠăŽăăăŤpingăăăăăăăžăăă ăžă çĽăăŞăăŁăĺ ´ĺăŻăçťé˘ăŽĺłĺ´ăŤăă[çťé˛č§Łé¤]ăăżăłă使ç¨ăăŚăăăăăŽéçĽăăčŞĺčŞčşŤăĺé¤ă§ăăžăă
â
ăăŽăĄăźăŤăŤç´ćĽčżäżĄăăăăGitHubă§čĄ¨ç¤şăăŚăă ăăă
ç§ăăĄăŻăăŞăăăăăăăă¨ăćĺž ăăŚăăžăăďź ăŚăźăśăźĺă¨ĺăĺĺăŽJuliaăăŻăăŤă¤ăăŚčŠąăăŚăăăŽă§ăăăăŻĺśçśă§ăăă ăăăă¨ăďź
Rustă§ĺăçľăă§ăăć˝ĺ¨çăŤčĺłćˇąăćŠč˝ďźăăăăăăŽĺéĄăŤé˘éŁăăďźăăăăă¨ăăĄăăăŠčŚăžăăďź http ďź https ďź//github.com/rust-lang/rfcs/pull/195
THTT ďź "Tim Holy Trait Trick"ďźăčŚăĺžăç§ăŻéĺťć°éąéăŤăăăŁăŚă¤ăłăżăźăă§ăźăš/çšć§ăŤă¤ăăŚăăĺ°ăčăăžăăă ç§ăŻăăă¤ăăŽă˘ă¤ăă˘ă¨ĺŽčŁ ăćăă¤ăăďź Traits.jl ă ăžăăďźç§ăćăăŤďźçšć§ăŻă1ă¤ăžăăŻč¤ć°ăŽăżă¤ăăĺŤăĺĽç´ă¨čŚăŞăăăăšăă§ăă ăăăŻăç§ăäťăŽäşşăä¸ă§ç¤şĺăăăăăŤăă¤ăłăżăźăă§ă¤ăšăŽćŠč˝ă1ă¤ăŽć˝čąĄĺăŤă˘ăżăăăăă ăă§ăŻćŠč˝ăăŞăăă¨ăćĺłăăžăďźĺ°ăŞăă¨ăăč¤ć°ăŽĺăĺŤăçšć§ăŽä¸čŹçăŞăąăźăšă§ăŻďźă ăăăŚçŹŹäşăŤă @ StefanKarpinskiăä¸ă§ććĄăăăăăŤăăĄă˝ăăăŻăăŁăšăăăăŤçšć§ă使ç¨ă§ăăĺż čŚăăăăžăă
ăăăŻč¨ăŁăăăăăŤç§ăŽăăăąăźă¸Traits.jlă使ăŁăäžďź
<strong i="12">@traitdef</strong> Eq{X,Y} begin
# note that anything is part of Eq as ==(::Any,::Any) is defined
==(X,Y) -> Bool
end
<strong i="13">@traitdef</strong> Cmp{X,Y} <: Eq{X,Y} begin
isless(X,Y) -> Bool
end
ăăăŻă Eq
ă¨Cmp
ăăżă¤ăX
ă¨Y
éăŽăłăłăăŠăŻăă§ăăăă¨ă厣č¨ăăžăă Cmp
ăŻăăšăźăăźăăŹă¤ăă¨ăăŚEq
ăăăăžăăă¤ăžăă Eq
ă¨Cmp
严ćšăćşăăĺż
čŚăăăăžăă @traitdef
ćŹä˝ă§ăŻăé˘ć°ăˇă°ăăăŁăŻăŠăŽăĄă˝ăăăĺŽçžŠăăĺż
čŚăăăăăćĺŽăăžăă çžćçšă§ăŻăăŞăżăźăłăżă¤ăăŻä˝ăăăžăăă ăżă¤ăăŻăăăŹă¤ăăć示çăŤĺŽčŁ
ăăĺż
čŚăŻăăăžăăăé˘ć°ăĺŽčŁ
ăăă ăă§ĺĺă§ăă ăă¨ăă°ă Cmp{Int,Float64}
ăĺŽéăŤçšć§ă§ăăăăŠăăă確čŞă§ăăžăă
julia> istrait(Cmp{Int,Float64})
true
julia> istrait(Cmp{Int,String})
false
ć示çăŞăăŹă¤ăăŽĺŽčŁ ăŻăžă ăăăąăźă¸ăŤĺŤăžăăŚăăžăăăăčż˝ĺ ăăăŽăŻăăŞăç°Ąĺă§ăă
_trait-dispatch_ă使ç¨ăăé˘ć°ăŻćŹĄăŽăăăŤĺŽçžŠă§ăăžă
<strong i="31">@traitfn</strong> ft1{X,Y; Cmp{X,Y}}(x::X,y::Y) = x>y ? 5 : 6
ăăăŻăé˘ć°ft1
ă厣č¨ăăžăăăăŽé˘ć°Cmp{X,Y}
ăćşăăĺż
čŚăăăă¨ăăĺśç´ăäź´ă2ă¤ăŽĺźć°ăĺăăžăă ĺĽăŽăăŹă¤ăăŤăăŁăšăăăăăĺĽăŽăĄă˝ăăăčż˝ĺ ă§ăăžăă
<strong i="37">@traitdef</strong> MyT{X,Y} begin
foobar(X,Y) -> Bool
end
# and implement it for a type:
type A
a
end
foobar(a::A, b::A) = a.a==b.a
<strong i="38">@traitfn</strong> ft1{X,Y; MyT{X,Y}}(x::X,y::Y) = foobar(x,y) ? -99 : -999
ăăăăŽăăŹă¤ăé˘ć°ăŻăé常ăŽé˘ć°ă¨ĺăăăăŤĺźăłĺşăăă¨ăă§ăăžăă
julia> ft1(4,5)
6
julia> ft1(A(5), A(6))
-999
ĺžă§äťăŽăżă¤ăăăăŹă¤ăăŤčż˝ĺ ăăăŽăŻç°Ąĺă§ăďźft1ăŤUnionă使ç¨ăăĺ ´ĺăŻăăă§ăŻăăăžăăďźă
julia> ft1("asdf", 5)
ERROR: TraitException("No matching trait found for function ft1")
in _trait_type_ft1 at
julia> foobar(a::String, b::Int) = length(a)==b # adds {String, Int} to MyTr
foobar (generic function with 2 methods)
julia> ft1("asdf", 5)
-999
ăăŹă¤ăé˘ć°ăŽ_ĺŽčŁ _ă¨ăăŽăăŁăšăăăăŻă TimăŽăăŞăăŻă¨ăšăăźă¸ăłă°ăăăé˘ć°ăŤĺşăĽăăŚăăžăă䝼ä¸ăĺç §ăăŚăă ăăă çšć§ăŽĺŽçžŠăŻćŻčźçç°Ąĺă§ăăăăšăŚăŽćĺĺŽčŁ ăŤă¤ăăŚăŻăăăăĺç §ăăŚăă ăăă
ç°ĄĺăŤč¨ăă°ăçšć§ăăŁăšăăăăŻĺ¤ăăăžă
<strong i="51">@traitfn</strong> f{X,Y; Trait1{X,Y}}(x::X,y::Y) = x+y
ăăŽăăăŞăăŽăŤďźĺ°ăĺç´ĺăăăďź
f(x,y) = _f(x,y, checkfn(x,y))
_f{X,Y}(x::X,y::Y,::Type{Trait1{X,Y}}) = x+y
# default
checkfn{T,S}(x::T,y::S) = error("Function f not implemented for type ($T,$S)")
# add types-tuples to Trait1 by modifying the checkfn function:
checkfn(::Int, ::Int) = Trait1{Int,Int}
f(1,2) # 3
ăăăąăźă¸ă§ăŻă checkfn
ăŻstagedfuncitonsăŤăăŁăŚčŞĺĺăăăŚăăžăă ăă ăă芳細ăŤă¤ăăŚăŻăTraits.jlăŽREADMEăĺç
§ăăŚăă ăăă
_ăăăŠăźăăłăš_ĺç´ăŞçšć§é˘ć°ăŽĺ ´ĺăçćăăăăăˇăłăłăźăăŻăăăăŻăżă¤ăăŽĺŻžĺżăăăăŽă¨ĺăă§ăăă¤ăžăăćéŤăŽçść ă§ăă ăăéˇăé˘ć°ăŽĺ ´ĺăć大20ďź ăŽéˇăăŽéăăăăăžăă ăăăăăšăŚă¤ăłăŠă¤ăłĺăăĺż čŚăăăă¨ćăŁăăŽă§ăççąăŻăăăăžăăă
ďź Traits.jl
ăă¤ăăźăŞĺ¤ć´ăĺć ăăăăăŤ10ć27ćĽăŤçˇ¨éăăăžăăďź
Traits.jlăăăąăźă¸ăć˘ç´˘ăăćşĺăŻă§ăăŚăăžăăďź readmeăŤăŻăă @ traitimplă¨ăŽă¤ăłăżăźăă§ăźăšăŽĺŽčŁ ďźăžă ĺŽäşăăŚăăžăă...ďźăă¨
ć˘ç´˘ăăćşĺăă§ăăŚăăžăďźăă°ăĺŤă:-)ă @traitimpl
ăŞăă¨ăăăă¨ăŻă
<strong i="7">@traitimpl</strong> Cmp{T1, T2} begin
isless(t1::T1, t2::T2) = t1.t < t2.f
end
é˘ć°ăćĺă§ĺŽçžŠăăă ăă§ă
Base.isless(t1::T1, t2::T2) = t1.t < t2.f
T1
ă¨T2
2ă¤ăŽăżă¤ăăŽĺ ´ĺă
@traitimpl
ăăŻăăčż˝ĺ ăăăŽă§ăä¸č¨ăŽäžăćŠč˝ăăăăăŤăŞăăžăăă ăžăă使ç¨ćłăŽčŠłç´°ă§READMEăć´ć°ăăžăăă ăăăŚă @ lindahuaGraphs.jlă¤ăłăżăźăă§ăźăšăŽä¸é¨ăĺŽčŁ
ăăäžăčż˝ĺ ăăžăăă
https://github.com/mauro3/Traits.jl/blob/master/examples/ex_graphs.jl
ăăăŻćŹĺ˝ăŤăŻăźăŤă§ăă ç§ăŻçšăŤăă¤ăłăżăźăă§ă¤ăšăä¸čŹăŤĺă ăŽăżă¤ăă§ăŻăŞăăăżă¤ăăŽăżăăŤăŽăăăăăŁă§ăăăă¨ăčŞčăăŚăăăŽă弽ăă§ăă
ăăăă¨ăŚăăăŁăăăă¨ćăăžăă ăăŽă˘ăăăźăăŤă¤ăăŚăŻă弽ăăŞăă¨ăăăăăăăăžăă ăăăăŁăă
ďź+1ďź
čŻăăăŁăźăăăăŻăăăăă¨ăďź ăłăźăăĺ°ăć´ć°/ăŞăăĄăŻăżăŞăłă°ăăžăăăăăă°ăăŞăăéăă§ăżăăŽăŤéŠăăŚăăăŻăă§ăă
ăăŽćçšă§ăäşşă
ăăăă芌ăăŚăăŚăźăšăąăźăšăŤéŠĺăăăăŠăăă確čŞă§ăăă°ăăăăăčŻăă§ăăăă
ăăăŻăčŞĺăŽăłăźăăć°ăă茳çšăăčŚăăă¨ăă§ăăăăăąăźă¸ăŽ1ă¤ă§ăă ă¨ăŚăăăŁăăăă
çłă訳ăăăžăăăăăăăçĺŁăŤć¤č¨ăăćéăŻăžă ăăăžăăăăä¸ĺşŚć¤č¨ăăăăăăă¤ăăŽăăŽăăŞăăĄăŻăżăŞăłă°ăăăă¨ćăăžă...
ăăăąăźă¸ăăŞăăĄăŻăżăŞăłă°ăăžă:)
ä¸ćč°ăŤćăŁăŚăăăŽă§ăăăăăŹă¤ăăĺŠç¨ĺŻč˝ă§ăăĺ ´ĺďźăăăŚăä¸č¨ăŽććĄăŽăăăŤč¤ć°ăŽăăŁăšăăăăĺŻč˝ă§ăăĺ ´ĺďźăć˝čąĄĺé幤ăĄăŤăăşă ăć˝čąĄĺăŻăžăŁăăĺż čŚăŞăăăă§ăă ăăă§ăăăŽďź
ăăŹă¤ăăĺŽčŁ ăăăĺžăăăźăšĺ ăŽăăšăŚăŽé˘ć°ăĺŽčŁ ăăăĺžă§ă¨ăłăˇăšăă ĺ ¨ä˝ă§ăăăŹă¤ăăŽăżăŤĺşăĽăăăăăŞăăŻAPIăĺ Źéăăăć˝čąĄĺăćśăăžăă ăăĄăăăăăŽăăăťăšăŻăć˝čąĄĺăĺťć˘ăăăă¨ăŤăăŁăŚč§ŚĺŞăăăĺŻč˝ć§ăăăăžă
ăăăŤă¤ăăŚăăĺ°ăčăăŚăżăă¨ăć˝čąĄĺăçšć§ăŤç˝ŽăćăăăŤăŻă揥ăŽăăăŞĺăăăŠăĄăźăżăźĺăăĺż čŚăăăăžăă
Array{X; Cmp{X}} # an array of comparables
myvar::Type{X; Cmp{X}} # just a variable which is comparable
ç§ăŻä¸č¨ăŽmauro3ăŽçšăŤĺćăăžăăăăăŻăçšć§ďźĺ˝źăŽĺŽçžŠăŤăăă°ăé常ăŤčŻăă¨ćăăžăďźăćă¤ăă¨ăŻăć˝čąĄĺă¨ĺçă§ăă
ăžăăĺŽçžŠĺžăŤçšć§ăĺăŤĺ˛ăĺ˝ăŚăăă¨ăă§ăăăăăŤăăăŤăŻăăăŹă¤ă¸ăźçśćżăă訹ĺŻăăĺż čŚăăăăžăăă¤ăžăăĺăĺŽçžŠăăăĺžăăăć˝čąĄĺăăçśćżăăăă¨ăăłăłăă¤ăŠăŤéçĽăăĺż čŚăăăăžăă
ăăăăŁăŚăĺ ¨ä˝ă¨ăăŚăć˝čąĄĺăŽĺ¤ă§ăăă¤ăăŽçšć§/ă¤ăłăżăźăă§ăźăšăŽćŚĺżľăéçşăăă¨ăăăă¤ăăŽéč¤ăčŞçşăăăĺăăă¨ăéćăăăăăŽăăžăăžăŞćšćłăĺ°ĺ ĽăăăăăăŤćăăăžăă ăăăăŽćŚĺżľăĺ°ĺ ĽăăćčŻăŽćšćłăŻăć˝čąĄĺăŤćŠč˝ăăăŁăăă¨čż˝ĺ ăăăă¨ă ă¨ćăăžăă
硨éďźăăĄăăăăăćçšă§ć˝čąĄĺăăĺ ˇčąĄĺăçśćżăăăă¨ăŻéć¨ĺĽ¨ăŤăŞăăćçľçăŤăŻçŚć˘ăăăŞăăă°ăŞăăžăăă ăżă¤ăçšć§ăŻćéťçăžăăŻć示çăŤćąşĺŽăăăžăăăçśćżăŤăăŁăŚćąşĺŽăăăăă¨ăŻăăăžăă
ć˝čąĄĺăŻăçšć§ăŽĺăŞăăéĺąăŞăäžă§ăŻăăăžăăăďź
ăăăăăŞăăçžĺ¨ăŽć§ćăçśćăăăăŽćĺłăçšć§ăŤĺ¤ć´ăăăă¨ăŻĺŻč˝ă§ăăăăďźăŚăźăśăźăćăĺ ´ĺăŻç´äş¤ăŽčŞçąăŞăŠăä¸ăăďźďź
_ăăă§Point{Float64} <: Pointy{Real}
äžăŤă寞ĺżă§ăăăŽă§ăŻăŞăăă¨ćăăžăďźĺéĄçŞĺˇăăăăăŠăăăŻăăăăžăăďźďź_
ăŻăăăăŞăăŻćŁăăă¨ćăăžăă çšć§ćŠč˝ăŻăçžĺ¨ăŽă¸ăĽăŞă˘ć˝čąĄĺăćĄĺźľăăăă¨ă§ĺŽçžă§ăăžăă 彟ăăĺż
čŚă¨ăă
1ďźĺ¤éçśćż
2ďźé˘ć°ăˇă°ăăăŁ
3ďźăăŹă¤ă¸ăźçśćżăăăă§ăŤĺŽçžŠăăăăżă¤ăăŤć°ăăçšć§ăć示çăŤä¸ăă
大ĺ¤ăŞä˝ćĽăŽăăăŤćăăžăăăăăăăăăăŻăłăăĽăăăŁăŤĺ¤§ăăŞććăä¸ăăăă¨ăŞăăăŁăăă¨ćéˇăăăăă¨ăă§ăăžăă ĺ°ăŞăă¨ăç§ăăĄăŻăăăćăŤĺ Ľăăžăă;ďź
ç§ăăĄăé¸ćăăăăŽăŻä˝ă§ă大ăăŞĺ¤ĺăŤăŞăă¨ćăăžăă0.4ă§ä˝ćĽăéĺ§ăăćşĺăă§ăăŚăăžăăă ć¨ć¸ŹăăŞăăă°ăŞăăŞăăŽă§ăăă°ăĺžćĽăŽĺ¤éçśćżăčż˝ĺ ăăćšĺăăăăçšć§ăŽćšĺăŤç§ťĺăăĺŻč˝ć§ăéŤăă¨ćăăžăă ăăăăç§ăŽć°´ćśçăŻăăŞăăăŽä¸ăŤăăăŽă§ăä˝ăă芌ăăăŤä˝ă辡ăăăă確čŞăăăŽăŻéŁăăă§ăă
FWIWăç§ăŻäťĽä¸ăŽčŹćźă§ăľă¤ă˘ăłăă¤ăăłă¸ă§ăźăłăşăŽĺăŻăŠăšăŤé˘ăăč°čŤăăľăăżă¤ăăłă°ăŽäťŁăăăŤçšć§ăŽăăăŞăăŽă使ç¨ăăćšćłăŤă¤ăăŚćŹĺ˝ăŤćçă§ăăăă¨ăŤć°ăĽăăžăăďź http ďź
ăăăăŻăźă ăŽçźśĺ ¨ä˝ďź
@johnmyleswhite ăăŞăłăŻăăăăă¨ăăé常ăŤčĺłćˇąăă ăăăŤăăŽăăăŞă¸ăŽăŞăłăŻăăăăžăăăăăŻăŽăŁăăăĺăăăăăŤčŚă䞥ĺ¤ăăăăžăă ăăŽăăŹăźăłăăźăˇă§ăłăŻăç§ăăĄăăăă§ĺžăĺ¤ăăŽčłŞĺăŤč§ŚăăŚăăăăă§ăă ăăăŚčĺłćˇąăăă¨ăŤăĺăŻăŠăšăŽĺŽčŁ ăŻăTraits.jlăŤăăăăŽă¨é常ăŤäźźăŚăăžăďźTimăŽăăŞăăŻăçšć§ăŻăăźăżĺă§ăďźă HaskellăŽhttps://www.haskell.org/haskellwiki/Multi-parameter_type_classăŻăTraits.jlăŤăăäźźăŚăăžăă čŹćźă§ăŽĺ˝źăŽčłŞĺăŽ1ă¤ăŻăăă¸ă§ăăŞăăŻăšăĺżăăćĄç¨ăăĺžă§ăăăľăăżă¤ăăłă°ăćŹĺ˝ăŤĺż čŚăŞăŽăăă¨ăăăăŽă§ăă ďźă¸ă§ăăŞăăŻăšăŻăăŠăĄăăŞăăŻĺ¤ç¸é˘ć°ă ă¨ćăăžăăĺç §ăăŚăă ăăďźăăăŻă @ skarielă¨@haydăä¸č¨ă§
@skarielă¨@haydăĺç §ăăă¨ăĺä¸ăŽăăŠăĄăźăżăźçšć§ďźTraits.jlăŽăăăŤďźăŻăĺĽăŽé幤ăă¤ăžăĺ¤éçśćżăćă¤ăă¨ăă§ăăăă¨ăé¤ăăŚăĺŽéăŤć˝čąĄĺăŤé常ăŤčżăă¨ćăăžăă
ăăăăăăŤăăăŠăĄăźăżăŽçšć§ăŻĺ°ăç°ăŞăŁăŚăăăăăŤčŚăăžăăĺ°ăŞăă¨ăç§ăŽé ăŽä¸ăŤăŻăăăžăăă ç§ăčŚăăăăŤăć˝čąĄĺăŽĺăăŠăĄăźăżăźăŻăăťă¨ăăŠăŽĺ ´ĺăĺĺ
ăŤĺŤăžăăäťăŽĺăŤé˘ăăăăŽăŽăăă§ăăăă¨ăă°ă Associative{Int,String}
ăŻădictăŤInt
ăăźă¨String
ăĺŤăžăăŚăăăă¨ă示ăăžăă Tr{Associative,Int,String}...
ăŻă Associative
ă Int
ăăăăłStrings
éăŤä˝ăăăŽăĺĽç´ăăăăăă¨ă示ăăŚăăžăă ăăăăăăăăAssociative{Int,String}
ăăăŽăăăŤčŞăĺż
čŚăăăăžăăă¤ăžăă getindex(::Associative, ::Int) -> String
ă setindex!(::Associative, ::Int, ::String)
ăŞăŠăŽăĄă˝ăăăăăăžă...
@ mauro3éčŚăŞăă¨ăŻăé˘ć°ăŽĺźć°ă¨ăăŚAssociative
ĺăŽăŞăă¸ă§ăŻăă渥ăăă¨ă§ăăăăăŤăăăé˘ć°čŞä˝ăAssociative{Int,String}
ä˝ćă§ăăăăăŤăŞăăžăă
function f(A::Associative)
a = A{Int,String}() # create new associative
a[1] = "one"
return a
end
ăăăăă¨ăă°f(Dict)
ă¨ĺźăłăžăă
@eschnett ăçłă訳ăăăžăăăăăăŞăăä˝ăćĺłăăăŽăăăăăžăăă
@ mauro3ç§ăŻăăžăăŤăč¤éăŞćšćłă§čăăŚăăă¨ćăăžăă ç§ăçĄčŚă
Traits.jlă揥ăŽăăăŤć´ć°ăăžăăďź
@doc
ă使ç¨ăă芳細ăŤă¤ăăŚăŻă httpsďź//github.com/mauro3/Traits.jl/blob/master/NEWS.mdăĺç §ăăŚăă ăăă ăăŁăźăăăăŻăćčżăăžăďź
@ Rory-FinneganăŻă¤ăłăżăźăă§ăźăšăăăąăźă¸ăăžă¨ăăžăăhttps://github.com/Rory-Finnegan/Interfaces.jl
ç§ăŻćčż@mdcfrancisă¨ăăăŤă¤ăăŚčŠąăĺăăžăăăăClojureăŽăăăăłăŤăŤäźźăăăŽăăˇăłăăŤă§ĺŽç¨çă ă¨ćăăžăă ĺşćŹçăŞćŠč˝ăŻăďź1ďźăăăăłăŤăŻć°ăă税éĄăŽăżă¤ăă§ăăăďź2ďźăăă¤ăăŽăĄă˝ăăăˇă°ăăăŁăăŞăšăăăăă¨ăŤăăŁăŚăăăăĺŽçžŠăăďź3ďźäťăŽăżă¤ăăŻăä¸č´ăăăĄă˝ăăĺŽçžŠăćă¤ă ăă§ăăăăćéťçăŤĺŽčŁ ăăžăă ăăŞăăŻäžăă°ć¸ăă§ăăă
protocol Iterable
start(::_)
done(::_, state)
next(::_, state)
end
isa(Iterable, Protocol)
ă¨Protocol <: Type
ăžăă ĺ˝çśăăăăăŤăăŁăšăăăăăăă¨ăă§ăăžăă ăżă¤ăăT <: Iterable
ă使ç¨ăăŚăăăăłăŤăĺŽčŁ
ăăŚăăăăŠăăă確čŞă§ăăžăă
ăľăăżă¤ăăłă°ăŽăŤăźăŤăŻćŹĄăŽă¨ăăă§ăă
PăQăăăăăłăŤăżă¤ăă¨ăăžă
TăéăăăăłăŤăżă¤ăă¨ăăžă
| ĺ
Ľĺ| çľć|
| --- | --- |
| P <ďźäťťć| ç|
| ä¸<ďźP | ç|
| ďźunionăunionallăvarďź<ďźP | é常ăŽăŤăźăŤă使ç¨ăăžăă PăĺşćŹĺă¨ăăŚćąă|
| P <ďź( unionăunionallăvarďź| é常ăŽăŤăźăŤă使ç¨ăă|
| P <ďźP | ç|
| P <ďźQ | ăĄă˝ăăăŽăă§ăăŻďźQďź<ďźăĄă˝ăăďźPďź|
| P <ďźT | false |
| T <ďźP | PăŽăĄă˝ăăăŻă_ăŽäťŁăăăŤTă使ç¨ăăŚĺĺ¨ăăžă|
ćĺžăŽăăŽăŻĺ¤§ăăŞăăŽă§ăăT<ďźPăăăšăăăăŤăŻăPăŽĺŽçžŠă§_ăTăŤç˝Žăćăă署ĺăă¨ăŤmethod_exists
ăăă§ăăŻăăžăă ăăĄăăăăăčŞä˝ăŻăăăăăĺŽčŁ
ăăĺż
čŚăăăăžăăă¨ăăă¨ăŠăźăăšăăźăăăăŠăźăŤăăăŻĺŽçžŠăé常ăŤćŞăăăŽăŤăŞăăă¨ăćĺłăăžăă ăăžăăăă°ăăăăŻčĄ¨é˘çăŞĺéĄă§ăă
ăă1ă¤ăŽĺéĄăŻăăă¨ăă°start(::Iterable)
ăĺŽçžŠăăăŚăăĺ ´ĺăăăŽĺŽçžŠă垪ç°çă§ăăăă¨ă§ăă ăăŽăăăŞĺŽçžŠăŻĺŽéăŤăŻćĺłăăăăžăăă ăŠăăăăăăăăăé˛ăăăăľăăżă¤ăăă§ăăŻä¸ăŤăăŽăľă¤ăŻăŤăć¤ĺşăăăă¨ăă§ăăžăă ĺç´ăŞĺžŞç°ć¤ĺşă§äżŽćŁă§ăăăăŠăăăŻ100ďź
ăăăăžăăăăăăŁă¨ăăăăă¨ćăăăžăă
ăżă¤ă交塎ăŽĺ ´ĺă揥ăŽăăăŤăŞăăžăă
| ĺ
Ľĺ| çľć|
| --- | --- |
| PâŠďźunionăunionallătvarďź| é常ăŽăŤăźăŤă使ç¨ăă|
| PâŠQ| P |
| PâŠT| T |
PâŠQăŤăŻăăă¤ăăŽăŞăăˇă§ăłăăăăžăă
PâŠTăŻăăŞăăăźă§ăă éăăăăłăŤăżă¤ăăŻăăżă¤ăé幤ăŽ1ă¤ăŽé ĺăŤĺśéăăăă¨ăăćĺłă§ăăăăłăŤăżă¤ăăăăăĺ°ăăăăŽă§ăTăŻéŠĺăŞć§ăăăŞčżäźźă§ăăăăăăăłăŤăżă¤ăăŻĺśéăăžăăďźăŠăŽăżă¤ăă§ăäťťćăŽăăăăłăŤăĺŽčŁ ă§ăăăăďź ďźă ăăăăăăăžăăăăŤăŻăä¸čŹçăŞäş¤ĺˇŽĺăĺż čŚăŞăăă§ăăăăăŻăăľăăżă¤ăăłă°ă˘ăŤă´ăŞăşă ăŽăŞăźăăźăăźăŤăĺż čŚă§ăăăăŻăźă çźśăŽĺžăŤăŻăźă çźśăéăăăăćĺăŽĺŽčŁ ă§ăŻéżăăăă¨ćăăžăă
çšç°ć§ďźP <ďźQăŽĺ ´ĺăPăŻQăăăçšç°çă§ăă ăăăăPâŠQăŻĺ¸¸ăŤçŠşă§ăŻăŞăăăăĺăăšăăăĺ
ăŽç°ăŞăăăăăłăŤăŽĺŽçžŠăŻăăăžăă§ăăăă¨ăĺ¤ăăăăăŻăăŞăăćăăăăŤčŚăăžăďźăă¨ăă°ăăxăĺ垊ĺŻč˝ă§ăăĺ ´ĺăŻăăăĺŽčĄăăžăăăxăĺ°ĺˇĺŻč˝ă§ăăĺ ´ĺăŻĺŽčĄăăžăăă"ďźă
ăă ăăĺż
čŚăŞćć§ć§č§ŁćśăŽĺŽçžŠă襨çžăăäžżĺŠăŞćšćłăăŞăăăăăăăŻă¨ăŠăźă§ăăĺŻč˝ć§ăăăăžăă
ďź13412䝼éăăăăăłăŤăŻăăżăăŤăżă¤ăăŽăŚăăŞăłďźĺĺ
é¨ăżăăŤăŽćĺăŽčŚç´ ăĺéĄăŽé˘ć°ăŽăżă¤ăďźăäťăăŚUnionAll _
ă¨ăăŚăă¨ăłăłăźăăă§ăăžăă ăăăŻă䝼ĺăŻćăăăăăŞăăŁăăăŽăăśă¤ăłăŽĺŠçšă§ăă ăă¨ăă°ăăăăăłăŤăŽć§é çăľăăżă¤ăăłă°ăŻčŞĺçăŤĺ¤ąćăăăăăŤčŚăăžăă
ăăĄăăăăăăăŽăăăăłăŤăŻăĺä¸ăăŠăĄăźăżăăšăżă¤ăŤă§ăă ç§ăŻăăăŽĺç´ăă弽ăă§ăăăăăŚç§ăŻăżă¤ăăŽă°ăŤăźăăT <: Iterable
ăăăŤă¨ăŹăŹăłăăŤćąăćšćłăăăăăžăăă
éĺťăŤăăŽă˘ă¤ăă˘ăŤé˘ăăăłăĄăłăăăăă¤ăăăăžăăăx-refhttps ďź //github.com/JuliaLang/julia/issues/5#issuecomment-37995516ă
ç§ăăĄăŻăľăăźăăăžăăăäžăă°
protocol Iterable{T}
start(::_)::T
done(::_, state::T)
next(::_, state::T)
end
ăăăźăç§ăŻăăăćŹĺ˝ăŤĺĽ˝ăă§ăďźçšăŤ@KenoăŽćĄĺźľćŠč˝ă§ďźďź
+1ăăăŻăžăăŤç§ă揲ăăăăŽă§ăďź
@KenoăăăŻééăăŞăăăŽćŠč˝ăŽăăăŽç´ ć´ăăăă˘ăăă°ăŹăźăăăšă§ăăăăăăĺťśćăăççąăăăăžăă ăăĄăăăăŞăżăźăłăżă¤ăăŤé˘äżăăăăŽăŻăăšăŚé常ăŤĺéĄăăăăžăă ăăŠăĄăźăżčŞä˝ăŻćŚĺżľçăŤăŻç´°ăăăăă°ăăăă§ăăăăăĺŽčŁ ăăăŽăŻĺ°ăéŁăăă§ăă ăăšăŚăŽăĄă˝ăăăŽĺĺ¨ăăă§ăăŻăăăăăťăšăŽĺ¨ĺ˛ăŤĺç°ĺ˘ăçśćăăĺż čŚăăăăžăă
ăăŽăšăăźă ăŤďźé
ĺăŽăăăŞăżă¤ăăŽOďź1ďźçˇĺ˝˘ă¤ăłăăăŻăšăŽăăăŞďźçšć§ăĺăĺ
Ľăăăă¨ăă§ăăăăă§ăă hassomeproperty(::T) = true
ăăăŞăăăźăĄă˝ăăăĺŽçžŠăďźăă ăă hassomeproperty(::Any) = false
ă§ăŻăăăžăăďźă
protocol MyProperty
hassomeproperty(::_)
end
_
ăŻăăăăăłăŤĺŽçžŠăŽĺăăĄă˝ăăăŤč¤ć°ĺ襨示ăăăĺŻč˝ć§ăăăăžăă
protocol Comparable
>(::_, ::_)
=(::_, ::_0
end
ăăăăłăŤĺŽçžŠăŽĺăăĄă˝ăăăŤ_č¤ć°ĺĺşçžăăĺŻč˝ć§ăăăăžă
ăŻăă _
ăăšăŚăŽă¤ăłăšăżăłăšăŤĺčŁăżă¤ăăăăăăăăă ăă§ăă
@JeffBezansonăŻćŹĺ˝ăŤăăă漽ăăżăŤăăŚăăžăă ç§ăŤă¨ăŁăŚçšăŤćł¨çŽăăšăăŻăăăăăłăŤăŽăăŞă˘ăźăć§ăă§ăă ăăŽçšă§ăăżă¤ăăŽä˝ćč ăăăăăłăŤăŽĺĺ¨ăŤă¤ăăŚăŽçĽčăćăŁăŚăăŞăăŚăăăżă¤ăăŽçšĺŽăŽ/ăŤăšăżă ăăăăłăŤăĺŽčŁ ă§ăăžăă
ăĄă˝ăăăŻăă¤ă§ăĺçăŤĺŽçžŠă§ăăďźăă¨ăă°@eval
ďźă¨ăăäşĺŽăŻăŠăă§ăăďź ćŹĄăŤăăżă¤ăăçšĺŽăŽăăăăłăŤăŽăľăăżă¤ăă§ăăăăŠăăăŻăä¸čŹăŤéçăŤçĽăăă¨ăă§ăăžăăăăăăŻăĺ¤ăăŽĺ ´ĺăĺçăăŁăšăăăăĺéżăăćéŠĺăçĄĺšăŤăăăăăŤčŚăăžăă
ăŻăăăăăŻďź265ăćŞĺăăăžă:)ăĄă˝ăăăčż˝ĺ ăăăă¨ăăŤăăŁăšăăăă¨çćăăăăłăźăăĺ¤ć´ăăĺż čŚăăăăŽă¨ĺăĺéĄă§ăăăäžĺé˘äżăŽă¨ăă¸ăĺ˘ăăŚăăžăă
ăăăé˛ăăŽăčŚăăŽăŻčŻăăă¨ă§ăďź ăăĄăăăç§ăŻăăŤăăăŠăĄăźăżçšć§ăĺé˛ăŽéă§ăăă¨ä¸ťĺźľăăäşşăŤăŞăă§ăăăă ăăăăçšć§ăŽ95ďź ăŻăă¨ăŤăăĺä¸ăŽăăŠăĄăźăżăźă§ăăĺŻč˝ć§ăăăăžăă ăăăŻă彟ăăč¤ć°ăŽăăŁăšăăăăŤă¨ăŚăăăžăĺăă¨ăăăă¨ă ăă§ăďź ăăăŻăĺż čŚăŤĺżăăŚĺžă§ĺć¤č¨ăăăĺŻč˝ć§ăăăăžăă ĺĺăŤč¨ăŁăă
ăłăĄăłăăŽăŤăăăŤďź
@KenoăŽććĄďźăăăŚJeffăŽăŞăŞă¸ăăŤă§ăŻĺŽéăŤăŻstate
ďźăŻăé˘éŁăăĺă¨ăăŚçĽăăăŚăăžăă ăŞăżăźăłăżă¤ăăăŞăăŚăäžżĺŠă§ăăăă¨ăŤćł¨ćăăŚăă ăăă RustăŤăŻăžă¨ăăŞćĺă¨ăłăăŞăăăăžăă RustăťăŠĺż
čŚă§ăŻăăăžăăăăăăăăŻčŻăčăă ă¨ćăăžăă ăăăăăăăçšć§ăŽăăŠăĄăźăżăźă§ăăăšăă§ăŻăŞăă¨ćăăžăă Iterable
ăŤăăŁăšăăăăăé˘ć°ăĺŽçžŠăăă¨ăă T
ăä˝ă§ăăăăăăăžăăă
ç§ăŽçľé¨ă§ăŻă method_exists
ăŻăçžĺ¨ăŽĺ˝˘ĺźă§ăŻä˝żç¨ă§ăăžăăďźďź8959ďźă ăăăăăăăăăăăŻďź8974ă§ďźăžăăŻăăă§ďźäżŽćŁăăăă§ăăăă çšăŤăăŠăĄăźăżăźĺăăăvarargé˘ć°ă誏ćăăăăăŤăTraits.jlăĺŽčĄăăă¨ăăŤătrait-siganturesăŤĺŻžăăŚăĄă˝ăăăˇă°ăăăŁăä¸č´ăăăăă¨ăćăéŁăăé¨ĺă§ăăăă¨ăăăăăžăăďźăĺç
§ďźă
ăăăăç¸çśăĺŻč˝ă§ăăăăďź
ăăăŠăŤăăŽĺŽčŁ
ăĺŽçžŠă§ăăăĄăŤăăşă ăćŹĺ˝ăŤćŹ˛ăăă§ăă ĺ¤ĺ
¸çăŞăăŽăŻăćŻčźăŽăăăŤă =
ă <
ă >
ă <=
ă >=
ăăĄ2ă¤ăĺŽçžŠăăă ăă§ăăă¨ăăăăŽă§ăă ĺ¤ĺăăăŻă¸ă§ăăŤăăŁăŚč¨ĺăăăăľă¤ăŻăŤăĺŽéăŤĺ˝šçŤă¤ă¨ăăă§ăă ä¸č¨ăŽäžăçśăăă¨ă start(::Indexable) = 1
ă¨done(i::Indexable,state)=length(i)==state
ăĺŽçžŠăăă¨ăăăăăăăăŠăŤăăŤăŞăăžăă ăăăăŁăŚăĺ¤ăăŽăżă¤ăăŻnext
ăĺŽçžŠăăă ăă§ć¸ăżăžăă
čŻăçšă é˘éŁăăăżă¤ăăŻă Iterable{T}
ăăŠăĄăźăżăźă¨ăŻĺ¤ĺ°ç°ăŞăă¨ćăăžăă ç§ăŽă¨ăłăłăźăăŁăłă°ă§ăŻăăăŠăĄăźăżăŻĺ
é¨ăŽăăšăŚăĺĺ¨č¨ĺˇă§ĺŽéĺăăă ăă§ă---ăăżă¤ăFooăăăŽăăăăłăŤăĺŽčŁ
ăăăăăŞTăŻĺĺ¨ăăžăăďźă
ăŻăăç°ĄĺăŤprotocol Foo <: Bar, Baz
訹ĺŻăăBară¨BazăăFooăŤç˝˛ĺăăłăăźăăă ăă§ăăăăă§ăă
ăăŤăăăŠăĄăźăżçšć§ăŻééăăŞă埡ĺă§ăă ăăăăăľăăżă¤ăăłă°ă¨çľąĺăăćšćłăčăăăŽăŻé常ăŤčĺłćˇąăă¨ćăăžăă TypePair{A,B} <: Trait
ăăăŞăăŽă使ç¨ăăăă¨ăă§ăăžăăăăăăŻćŁăăăŞăăăă§ăă
ăăŞăăŽććĄďźćŠč˝ăŽçšă§ďźăŻăĺŽéăŤăŻClojureă¨ăăăăăSwiftăŤäźźăŚăăă¨ćăăžăă
ĺçŽďźăżă¤ăďźă¨ć§é ďźăăăăłăŤďźăŽăľăăżă¤ăăłă°ă桡ĺ¨ăăăăŽăŻĺĽĺŚăŤćăăžăďźăăăŚĺ°ćĽăŽćˇˇäšąăŽĺĺ ăŤăŞăă¨ćăăžăďźďźăăăăăăăŻéżăăăăŞăă¨ćăăžăďźă
ăžăăć°ĺŚ/čĄĺćźçŽăŽăăăăłăŤăŽčĄ¨çžĺăŤăĺ°ăćççă§ăă ăăč¤éăŞäžďźčĄĺćźçŽďźăéăăŚčăăăă¨ăŻăć確ăŤćĺŽăăăă¤ăłăżăźăă§ăźăšăćă¤ĺ垊ăăăĺçşçă ă¨ćăăžăă ăă¨ăă°ă core.matrixăŠă¤ăăŠăŞăĺç §ăăŚăă ăăă
ĺćăăžă; ăăŽćçšă§ăăăăăłăŤăŽäžăĺéăăăăăăç§ăăĄăćăăă¨ăĺŽčĄăăăăŠăăă確čŞăăĺż čŚăăăăžăă
ăăŞăăăăăćłĺăăŚăăăăăŤăăăăăłăŤăŻăăăăŽăĄă˝ăăăĺąăăĺĺ犺éă§ăăăăďź ă¤ăžăăăăŞăăć¸ăă¨ă
protocol Iterable
start(::_)
done(::_, state)
next(::_, state)
end
ăăăă¸ă§ăăŞăăŻé˘ć°start
ă done
ă next
ăĺŽçžŠăăăăăăŽĺŽĺ
¨äżŽéŁžĺăIterable.start
ă Iterable.done
ăŤăŞăăŽăŻčŞçśăŞăă¨ăŽăăăŤćăăăžăă Iterable.next
ă ăżă¤ăăŻIterable
ĺŽčŁ
ăăžăăă Iterable
ăăăăłăŤă§ăăšăŚăŽă¸ă§ăăŞăăŻé˘ć°ăĺŽčŁ
ăăžăă ç§ăŻĺ°ăĺăŤăăăŤé常ăŤäźźăăăŽăććĄăăžăăďźäťăŻčŚă¤ăăăžăăďźăăĺ寞ĺ´ă§ăŻăăăăăłăŤăĺŽčŁ
ăăăă¨ăăŤăăăčĄăăžăďź
implement T <: Iterable
# in here `start`, `done` and `next` are automatically imported
start(x::T) = something
done(x::T, state) = whatever
next(x::T, state) = etcetera, nextstate
end
ăăăŻă @ mdcfrancisăč¨ĺăăăćăĄćśăăăŽă§ăăăăăăç解ăăŚăăă°ăăăăăłăŤăă誤ăŁăŚăĺŽčŁ
ă§ăăăă¨ăŽăĄăŞăăăŻăăžăăăăăžăăă @mdcfrancisăăăăŞăăăăćçă ă¨ćăăŽă芳ăă誏ćăăŚăăă ăăžăăďź GoăăăăăăăăčĄăŁăŚăăăă¨ăŻçĽăŁăŚăăžăăăăăăŻGoăăăăŻăżă¤ăăłă°ăĺŽčĄă§ăăŞăăăă¨ćăăăžăăăăăŻJuliaăĺŽčĄă§ăăăă¨ă§ăă implement
ăăăăŻă使ç¨ăăă¨ă import
䝣ăăăŤusing
import
ă使ç¨ăăĺż
čŚăăťă¨ăăŠăŞăăŞăă¨ćăăžăăăăăŻă大ăăŞăĄăŞăăăŤăŞăăžăă
ĺ°ăĺăŤăăăŤé常ăŤäźźăăăŽăććĄăăžăăďźäťăŻčŚă¤ăăăžăăďź
ăăăăhttps://github.com/JuliaLang/julia/issues/6975#issuecomment-44502467䝼ĺăŽhttps://github.com/quinnj/Datetime.jl/issues/27#issuecomment-31305128 ďź ďźçˇ¨éďźhttpsďź//github.com/JuliaLang/julia/issues/6190#issuecomment-37932021ăĺç §ăăŚăă ăăăďź
ăăăăăă ăă§ăă
@StefanKarpinskiăŻă¤ăăŻăłăĄăłăă
ăăăăłăŤăŽăă税ăŽçśćżă訹ĺŻăăăĺ ´ĺăMySuperIterabeă
ć˘ĺăŽăĄă˝ăăăĺĺŠç¨ăăăăăŤăBase.IterableăćĄĺźľă§ăăžăă
ĺéĄăŻăăĄă˝ăăăŽé¸ćă ăăĺż
čŚăŞĺ ´ĺă§ăă
ăăăăłăŤă§ăăăăăăŻĺ
ăŽăăăăłăŤă
ćĺăăč¤ĺăăăăłăŤă§ăăă
@mdcfrancis âćĺăŽăă¤ăłăăŻčŻăăăŽă§ăăăç§ăććĄăăŚăăăŽăŻć˘ĺăŽăłăźăăĺŁăăă¨ăŻăăăžăăăăăăŁăšăăăăé źăăŤăăĺăŤăäşşă ăŽăłăźăăăżă¤ăăŽăăăăłăŤăŤăăŞăăă¤ăłăăăĺż čŚăăăăă¨ăćĺłăăžăĺăă
MyModule.MySuperIterableăă¤ăłăăćĄĺźľă§ăăžăăďź ä˝ĺăŞĺéˇć§ăăŠăăăćĽăŚăăăŽăăăăăžăăă ăă¨ăă°ă揥ăŽăăăŞăăŽăăăăžăă
protocol Enumerable <: Iterable
# inherits start, next and done; adds the following:
length(::_) # => Integer
end
ăăăŻćŹčłŞçăŤ@ivarneăč¨ăŁăăă¨ă§ăă
ä¸č¨ăŽç§ăŽçšĺŽăŽč¨č¨ă§ăŻăăăăăłăŤăŻĺĺ犺éă§ăŻăŞăăäťăŽăżă¤ăăé˘ć°ăŤé˘ăăăšăăźăăĄăłăăŤăăăžăăă ăăăăăăăŻăăăăç§ăăłă˘ĺăˇăšăă ăŤçŚçšăĺăăăŚăăăăă§ăă ă˘ă¸ăĽăźăŤă¨ăăăăłăŤăŽçľăżĺăăăŤćĄĺźľăăăăˇăłăżăăŻăšăˇăĽăŹăźăćłĺă§ăăžăă
module Iterable
function start end
function done end
function next end
jeff_protocol the_protocol
start(::_)
done(::_, state)
next(::_, state)
end
end
揥ăŤăIterableăĺă¨ăăŚćąăăăăłăłăăăšăă§ăŻă Iterable.the_protocol
ă使ç¨ăăžăă
jeff / mdcfrancisăăăăłăŤăŻăăăăŤăăäťăŽăăšăŚăŽăăŽă¨é常ăŤç´äş¤ăăŚăăă¨ćăăăŽă§ăç§ăŻăăŽčŚçšă弽ăă§ăă ăă¸ăĽăŞă˘ăłăă¨ćăăăăŞăăŽăŞăăăXăŻăăăăłăŤYăĺŽčŁ ăăŚăăăă¨č¨ăĺż čŚăăŞăă¨ăăčť˝éćă
ăŞăăăŽĺˇăčłźčŞăăăŽăăăă¤čłźčŞăăăŽăăăăăžăăă ăăăăăăŽăăăăłăŤăŽććĄăŻăç§ăăăă§ć辡ăă質ĺă解湺ă§ăăăă¨ăăă
ćčĄçăŤčż˝ĺ ăăăăŽăŻä˝ăăăăžăăăăJuliaďźä¸ç¨Žďźă§ĺŽéăŤä˝żç¨ăăăŚăăăăăăăłăŤăăŽäžă¨ăăŚăă˝ăŤăăźăŽćŠč˝ăćąşĺŽăăJuMPăăăăžăă
https://github.com/JuliaOpt/JuMP.jl/blob/master/src/solvers.jl#L223 -L246
# If we already have an MPB model for the solver...
if m.internalModelLoaded
# ... and if the solver supports updating bounds/objective
if applicable(MathProgBase.setvarLB!, m.internalModel, m.colLower) &&
applicable(MathProgBase.setvarUB!, m.internalModel, m.colUpper) &&
applicable(MathProgBase.setconstrLB!, m.internalModel, rowlb) &&
applicable(MathProgBase.setconstrUB!, m.internalModel, rowub) &&
applicable(MathProgBase.setobj!, m.internalModel, f) &&
applicable(MathProgBase.setsense!, m.internalModel, m.objSense)
MathProgBase.setvarLB!(m.internalModel, copy(m.colLower))
MathProgBase.setvarUB!(m.internalModel, copy(m.colUpper))
MathProgBase.setconstrLB!(m.internalModel, rowlb)
MathProgBase.setconstrUB!(m.internalModel, rowub)
MathProgBase.setobj!(m.internalModel, f)
MathProgBase.setsense!(m.internalModel, m.objSense)
else
# The solver doesn't support changing bounds/objective
# We need to build the model from scratch
if !suppress_warnings
Base.warn_once("Solver does not appear to support hot-starts. Model will be built from scratch.")
end
m.internalModelLoaded = false
end
end
ăăŁăăăăăăăŻäžżĺŠă§ăă m.internalModel
ăăăăăłăŤăĺŽčŁ
ăăăăŽă§ăăă ăă§ĺĺă§ăăăăăă¨ă严ćšăŽĺźć°ăéčŚă§ăăďź
ăŻăăăăăăłăŤăĺŽčŁ
ăăăŤăŻm.internalModel
ĺĺă§ăă äťăŽĺźć°ăŻăťă¨ăăŠăĺăŞăăăŻăăŤă§ăă
ăŻăă m.internalModel
ăăăăăłăŤăĺŽčŁ
ăăăŽăŤĺĺă§ă
ĺŽéăŽăăăăłăŤăŽäžăčŚă¤ăăčŻăćšćłăŻăăăăăapplicable
ă¨method_exists
ĺźăłĺşăăć¤ç´˘ăăăă¨ă§ăă
ElixirăăăăăłăŤăĺŽčŁ ăăŚăăăăă§ăăăć¨ćşăŠă¤ăăŠăŞĺ ăŽăăăăłăŤăŽć°ďźĺŽçžŠăăĺ¤ăăŚăăďźăŻăăŞăĺśéăăăŚăăăăă§ăă
ăăăăłăŤă¨ć˝čąĄĺăŽé˘äżăŻăŠăăŞăă§ăăăăďź ĺ ăŽĺéĄăŽčŞŹćă§ăŻăăăăăłăŤăć˝čąĄĺăŤă˘ăżăăăăăăăŞăăŽăććĄăăăŚăăžăăă 確ăăŤăăăăŤăăďźçžĺ¨ăŻéĺ ŹĺźăŽďźăăăăłăŤăŽăťă¨ăăŠăŻăçžĺ¨ć˝čąĄĺă¨ăăŚĺŽčŁ ăăăŚăăăăăŤćăăăžăă ăăăăłăŤăŽăľăăźăăčż˝ĺ ăăăĺ ´ĺăć˝čąĄĺăŻä˝ăŤä˝żç¨ăăăžăăďź APIă厣č¨ăăćšćłăăŞăĺé幤ăŻăăăžăćç¨ă§ăŻăŞăăăăŤćăăăžăă
ă¨ăŚăčŻă質ĺă§ăă ăăăŤăŻăăăăăŽăŞăăˇă§ăłăăăăžăă ăžăăć˝čąĄĺă¨ăăăăłăŤăŻăŠăĄăăăŞăă¸ă§ăŻăăă°ăŤăźăĺăăćšćłă§ăăăé常ăŤç´äş¤ăăŚăăăă¨ăććăăăă¨ăéčŚă§ăă ć˝čąĄĺăŻç´ç˛ăŤĺçŽä¸ăŽăăŽă§ăă ăăăăŻăăŞăă¸ă§ăŻăăăťăăăŤĺąăăăăŽă¨ăăŚăżă°äťăăăžăă ăăăăłăŤăŻç´ç˛ăŤć§é çă§ăă ăŞăă¸ă§ăŻăăçšĺŽăŽăăăăăŁăćăŁăŚăăĺ ´ĺăăăŽăŞăă¸ă§ăŻăăŻăťăăăŤĺąăăžăă ăăăăŁăŚăăăă¤ăăŽăŞăăˇă§ăłăŻ
ďź2ďźăŽăăăŞăăŽăăăĺ ´ĺăăăăŻĺŽéăŤăŻĺä¸ăŽćŠč˝ă§ăŻăŞăăĺçŽä¸ăŽĺäťăă¨ć§é ĺăŽçľăżĺăăă§ăăăă¨ăčŞčăăăă¨ăéčŚă ă¨ćăăžăă
ć˝čąĄĺă彚çŤă¤ă¨ćăăăăă¨ăŽ1ă¤ăŻăăăŠăĄăźăżăźă§ăăăă¨ăă°ă convert(AbstractArray{Int}, x)
č¨čż°ăăžăă AbstractArray
ăăăăăłăŤă§ăăĺ ´ĺăčŚç´ ăżă¤ăInt
ăŻĺż
ăăăăăăăłăŤĺŽçžŠă§č¨ĺăăăĺż
čŚăŻăăăžăăă ăăăŻăăĄă˝ăăăĺż
čŚăŞăżă¤ăăŤé˘ăăčż˝ĺ ć
ĺ ąă§ăă ăăăăŁăŚă AbstractArray{T}
ă¨AbstractArray{S}
ăŻăĺăăĄă˝ăăăćĺŽăăŚăăăŤăăăăăăăç°ăŞăăżă¤ăăŽăžăžă§ăăăăăč¨ĺçĺäťăăĺĺ°ĺ
Ľăăžăăă ăăăăŁăŚăăăŽĺăăŠăĄăźăżăźăŽä˝żç¨ăŤăŻăăă税ăŽĺçŽçĺäťăăĺż
čŚăŞăăă§ăă
ă§ăŻă2ăč¤ć°ăŽć˝čąĄçśćżăćäžăăžăăďź
ă§ăŻă2ăč¤ć°ăŽć˝čąĄçśćżăćäžăăžăăďź
ăăăăăăăŻćŠč˝ăçľąĺăžăăŻçľĺăăćšćłă§ăăăĺćŠč˝ăŤăŻçžĺ¨ăŽăăăăăŁăăăăžăă
č¤ć°ăŽć˝čąĄçśćżă訹ĺŻăăăă¨ăŻăăă1ă¤ăŽăťăźç´äş¤ăăč¨č¨ä¸ăŽćąşĺŽă§ăăăă¨ăäťăĺ ăăŚăăăžăă ăăăăŤăăăć˝čąĄč¨ĺĺăĺ¤ç¨ăăăă¨ăŽĺéĄăŻăďź1ďźăăăăłăŤăŽäşĺžĺŽčŁ ă夹ăĺŻč˝ć§ăăăăă¨ă§ăďźäşşçŠAăĺăĺŽçžŠăăäşşçŠBăăăăăłăŤă¨ăăŽAăŽĺŽčŁ ăĺŽçžŠăăžăďźăďź2ďźăăăăłăŤăŽć§é çăŞăľăăżă¤ăăłă°ă夹ăăăĺŻč˝ć§ăăăăžăă
çžĺ¨ăŽăˇăšăă ăŽĺăăŠăĄăźăżăźăŻăăŠăăăăăăćéťăŽă¤ăłăżăźăă§ăźăšăŽä¸é¨ă§ăŻăăăžăăăďź ăă¨ăă°ăăăŽĺŽçžŠăŻăăăŤäžĺăăŚăăžăďź ndims{T,n}(::AbstractArray{T,n}) = n
ăăăŚĺ¤ăăŽăŚăźăśăźĺŽçžŠé˘ć°ăăăăăžăă
ăăăăŁăŚăć°ăăăăăăłăŤ+ć˝čąĄçśćżăˇăšăă ă§ăŻă AbstractArray{T,N}
ă¨ProtoAbstractArray
ăžăă ăăă§ăĺçŽä¸AbstractArray
ă§ăŻăŞăăŁăăżă¤ăăŻăăăăăeltype
ăăăźăăłăźăăŁăłă°ăăăă¨ăŤăăă T
ăăăłN
ăăŠăĄăźăżăźăä˝ă§ăăăăćĺŽă§ăăĺż
čŚăăăăžăăăăăłndims
ă 揥ăŤă AbstractArray
ăŽăăšăŚăŽăăŠăĄăźăżăźĺăăăé˘ć°ăŻăăăŠăĄăźăżăźăŽäťŁăăăŤeltype
ă¨ndims
ă使ç¨ăăăăăŤć¸ăç´ăĺż
čŚăăăăžăă ăăăăŁăŚăăăăăłăŤăŤăăŠăĄăźăżăźăĺŤăžăăćšăçăŤăăŞăŁăŚăăăŽă§ăé˘éŁăăĺăŻçľĺąăŽă¨ăăé常ăŤĺ˝šçŤă¤ĺŻč˝ć§ăăăăžăă ďźĺ
ˇčąĄĺăŤăŻăžă ăăŠăĄăźăżăźăĺż
čŚă§ăăăă¨ăŤćł¨ćăăŚăă ăăăďź
ăžăă @ malmaudăŽăăŞăăŻă使ç¨ăăăăăăłăŤă¸ăŽăżă¤ăăŽă°ăŤăźăĺďź https ďź
ăŻăăć˝čąĄĺăŽăăŠăĄăźăżăźăŻç˘şăăŤä¸ç¨ŽăŽă¤ăłăżăźăă§ăźăšă§ăăă eltype
ă¨ndims
ăăç¨ĺşŚĺéˇă§ăă 丝ăŞéăăŻăčż˝ĺ ăŽăĄă˝ăăĺźăłĺşăăŞăă§ç´ćĽăăŁăšăăăă§ăăăă¨ă§ăă é˘éŁăăĺă使ç¨ăăă¨ăć˝čąĄĺăăăăăłăŤ/çšć§ăŤç˝Žăćăăăă¨ăŤăŻăăăŤčżăĽăăă¨ăŤĺćăăžăă ć§ćăŻăŠăŽăăăŤăŞăăžăăďź ăľăăżă¤ăăłă°ă¨ăĄă˝ăăĺźăłĺşăăŽéăŤĺžŞç°äžĺé˘äżăćăăăăăŞăăŽă§ăçćłçăŤăŻăĄă˝ăăĺźăłĺşăăăăĺźąăă§ăăăă
ćŽăăŽčłŞĺăŻăé˘éŁăăć˝čąĄĺăŽä¸é¨ăŤăŞăăă¨ăŞăăăăăłăŤăĺŽčŁ ăăăă¨ăćç¨ăăŠăăă§ăă äžă¨ăăŚăŻăĺ垊ĺŻč˝ă§ç´˘ĺźäťăĺŻč˝ăŞćĺĺăăăăžăăăĺ¤ăăŽĺ ´ĺăăłăłăăăźă§ăŻăŞăăăšăŤăŠăźăéă¨ăăŚćąăăăžăă ăăăăŠăŽăăăăŽé ťĺşŚă§çşçăăăăŻăăăăžăăă
ç§ăŻăăŞăăŽăăĄă˝ăăĺźăłĺşăăăšăăźăăĄăłăăĺŽĺ ¨ăŤăŻç解ăăŚăăŞăă¨ćăăžăă ăăăăŁăŚăăăŽć§ćăŽććĄăŻăăăŞăăćąăăŚăăăăŽă§ăŻăŞăĺŻč˝ć§ăăăăžăă
protocol PAbstractArray{T,N}
size(_)
getindex(_, i::Int)
...
end
type MyType1
a::Array{Int,1}
...
end
impl MyType for PAbstractArray{Int,1}
size(_) = size(_.a)
getindex(_, i::Int) = getindex(_.a,i)
...
end
# an implicit definition could look like:
associatedT(::Type{PAbstractArray}, :T, ::Type{MyType}) = Int
associatedT(::Type{PAbstractArray}, :N, ::Type{MyType}) = 1
size(mt::MyType) = size(mt.a)
getindex(mt::MyType, i::Int) = getindex(mt.a,i)
# parameterized type
type MyType2{TT, N, T}
a::Array{T, N}
...
end
impl MyType2{TT,N,T} for PAbstractArray{T,N}
size(_) = size(_.a)
getindex(_, i::Int) = getindex(_.a,i)
...
end
ăăăăłăŤăżă¤ăăŽăľăăżă¤ăăłă°ăăŠăŽăăăŤĺŽçžŠăăăŚăăăăŤĺżăăŚăăăăŻćŠč˝ăăĺŻč˝ć§ăăăăžăă ăă¨ăă°ăä¸ăăăă
protocol PAbstractArray{eltype,ndims}
size(_)
getindex(_, i::Int)
...
end
protocol Indexable{eltype}
getindex(_, i::Int)
end
PAbstractArray{Int,1} <: Indexable{Int}
ăžăăďź ăăŠăĄăźăżăĺĺă§ä¸č´ăăŚăăă°ăăăăŻé常ăŤăăžăăăă¨ćăăžăă eltype(x)
ăx
ăŽăżă¤ăăŽeltype
ăăŠăĄăźăżăźăčżăăăăŤăăĺŽçžŠăčŞĺĺăăăă¨ăă§ăăžăă
impl
ăăăăŻĺ
ăŤăĄă˝ăăĺŽçžŠăé
罎ăăăŽăŻçšăŤĺĽ˝ăă§ăŻăăăžăăăăăăŻä¸ťăŤăĺä¸ăŽăĄă˝ăăĺŽçžŠăč¤ć°ăŽăăăăłăŤăŤĺąăăŚăăĺŻč˝ć§ăăăăăă§ăă
ăăăăŁăŚăăăŽăăăŞăĄăŤăăşă ă§ăŻăć˝čąĄĺăŻä¸čŚăŤăŞăăžăă AbstractArray{T,N}
ăăăăăłăŤăŤăŞăĺŻč˝ć§ăăăăžăă 揥ăŤăďźăăăăłăŤăŽďźĺ¤éçśćżăčŞĺçăŤĺĺžăăžăă ăžăăăăăăłăŤăŽçśćżăŽăżăăľăăźăăăăăăăĺ
ˇčąĄĺăăçśćżă§ăăŞăăă¨ďźăăăŻăć°ĺč
ăăćă
čłăŤăăä¸ćşă§ăďźăŻćăăă§ăă
ä˝čŤă§ăăă Callable
çšć§ă襨çžă§ăăă¨ćŹĺ˝ăŤăăă§ăăăă 揥ăŽăăăŤăŞăăžăă
protocol Callable
::TupleCons{_, Bottom}
end
ăăă§ă TupleCons
ăŻăăżăăŤăŽćĺăŽčŚç´ ă¨ćŽăăŽčŚç´ ăŤĺĺĽăŤä¸č´ăăžăă _
ăŽăĄă˝ăăăăźăăŤă犺ă§ăŞăéăăăăăŻä¸č´ăăă¨ăăčăćšă§ăďźBottomăŻăăšăŚăŽĺźć°ăżăăŤăżă¤ăăŽăľăăżă¤ăă§ăďźă ĺŽéă TupleCons{a, TupleCons{b, EmptyTuple}}
ăŤĺŻžăăŚTuple{a,b}
ć§ćăä˝ćăăăĺ ´ĺăăăăžăďźďź11242ăĺç
§ďźă
ç§ăŻăăăçĺŽă ă¨ăŻćăăžăăăăăšăŚăŽĺăăŠăĄăźăżăźăŻĺĺ¨č¨ĺˇă§_ĺśç´äťă_ă§ĺŽéĺăăăăăăć˝čąĄĺă¨ăăăăłăŤăç´ćĽç˝Žăćăăăă¨ăŻă§ăăžăăă
@jakebolewskiäžă
ăăśăç§ăŻčŚçšăčŚéăăŚăăăăăăăžăăăăăăăăłăŤăŻăŠăŽăăăŤăăŚćŹĄăŽăăăŞĺśç´ăŽăăéŠĺşŚăŤč¤éăŞć˝čąĄĺăă¨ăłăłăźăă§ăăžăăďź
typealias BigMatrix âT, T <: Union{BigInt,BigFloat} AbstractArray{T,2}
ĺçŽä¸ăăšăŚăŽĺŻč˝ć§ăĺćăăĺż čŚăŻăăăžăăăďź
ććĄăăăProtocol
ććĄăŻăç§ă埡調ăăăă¨ăăŚăăăăšăŚăŽć˝čąĄçăŞăľăăżă¤ăăłă°ă¨ćŻčźăăŚăĺłĺŻăŤčĄ¨çžĺăĺŁăŁăŚăăžăă
ç§ăŻćŹĄăŽăă¨ăćłĺăăăă¨ăă§ăăžăăďźĺ˝çśăč¨č¨ăĺŽç¨çăŞéçăžă§äź¸ă°ăăžăďźďź
BigMatrix = âT, T<:Union{BigInt, BigFloat} protocol { eltype = T, ndims = 2 }
ć˘ĺăŽć˝čąĄĺăŽčĄ¨çžĺă¨ä¸č´ăăăăŤăŻăé˘éŁăăĺăĺĺäťăĺăŽăăăăăŁăŞăŠăĺż čŚă§ăăă¨ăă茳ĺŻăŤć˛żăŁăŚé˛ăżăžăă ăăăŤăăăăťăźäşćć§ăćă¤ĺŻč˝ć§ăăăăžăă
AbstractArray = âT âN protocol { eltype=T, ndims=N }
ăŞăă¸ă§ăŻăăŽăăźăżăăŁăźăŤăăŽć§é çăŞăľăăżă¤ăăłă°ăŻăç§ăŤăŻăăžă彚ăŤçŤăăŞăăăăŤćăăăžăăăă䝣ăăăŤ_types_ăŽăăăăăŁăŤéŠç¨ăăăăăăé常ăŤçăŤăăŞăŁăŚăăăăă§ăă
ăžăăăăăŤăăăăăăžăăăŽĺéĄăăăŽčąĺşăăăăćäžăăăĺŻč˝ć§ăăăăă¨ăŤăć°äťăăžăăă2ă¤ăŽăżă¤ăăŽĺ
ąéé¨ĺăŻăä¸é¨ăŽăăŠăĄăźăżăźăŽĺ¤ă獜ĺăăŚăăĺ ´ĺăŻçŠşă§ăă ăăăăŁăŚăć確ăŞNumber
ăżă¤ăăĺż
čŚăŞĺ ´ĺăŻă
protocol Number
super = Number
+(_, _)
...
end
ăăăŻă super
ăĺăŞăĺĽăŽăżă¤ăăŽăăăăăŁă¨ăăŚčĄ¨ç¤şăăŚăăžăă
ç§ăŻććĄăăăăăăăłăŤć§ćă弽ăă§ăăăăăă¤ăăŽăĄă˘ăăăăžăă
ăăăăăăăŞăç§ăŻăăšăŚă誤解ăăŚăăăăăăăžăăă ă¸ăĽăŞă˘ăčŞĺăăăăăăă¨ă¨ăăŚćŹĺ˝ăŤčŞżăšĺ§ăăăŽăŻă¤ăćčżăŽăă¨ă§ăĺăˇăšăă ăŤă¤ăăŚăŻăžă ĺŽĺ ¨ăŤăŻç解ăăŚăăžăăă
ďźaďź @ mauro3ăä¸č¨ă§ĺăçľăă çšć§ćŠč˝ă使ç¨ăăă¨ăăăŤčĺłćˇąăă¨ćăăžăă çšăŤăč¤ć°ăŽăăŁăšăăăăăăăłăŤă使ç¨ă§ăăŞăĺ ´ĺăŻăč¤ć°ăŽăăŁăšăăăăéŠăăŚăăăăă§ăă ĺŽä¸çăŽäžăä˝ă§ăăăăŤă¤ăăŚăŽç§ăŽčŚč§Łăĺžă§ć¸ăăžăă ăăăăăăŽä¸čŹçăŞčŚçšăŻăăăăă2ă¤ăŽăŞăă¸ă§ăŻăăç¸äşä˝ç¨ăăăă¨ăĺŻč˝ăŤăăĺä˝ăŻăăăžăăăăŤĺ¸°çăăžăă ç§ăŻééăŁăŚăăăăăăăžăăăăăăŚăăăŻăăšăŚăăăăłăŤăŤĺ ăžăăŚăăĺŻč˝ć§ăăăăžăăäžăă°ďź
protocol Foo{bar}
...
end
protocol Bar{foo<:Foo}
...
end
ăžăăFooăăăăłăŤăĺăĺŽçžŠăŽBarăăăăłăŤăĺç §ă§ăăŞăă¨ăăéčŚăŞĺéĄăćăăăŤăŞăăžăă
ďźbďź
PAbstractArray {Intă1} <ďźIndexable {Int}ăŻăăăžăăďź ăăŠăĄăźăżăĺĺă§ä¸č´ăăŚăăă°ăăăăŻé常ăŤăăžăăăă¨ćăăžăă
ăŞă_name_ă§ăăŠăĄăźăżăä¸č´ăăăĺż
čŚăăăăŽăââăăăăžăăďźç§ăŻăăăeltype
ĺĺă¨čŚăŞăăŚăăžăă誤解ăăĺ ´ĺăŻăăăŽăťăŻăˇă§ăłăçĄčŚăăŚăă ăăďźă ć˝ĺ¨çăŞé˘ć°ăˇă°ăăăŁă¨ä¸č´ăăăŞăăŽăŻăŞăă§ăăă ăăźăăłă°ă使ç¨ăăç§ăŽä¸ťăŞĺéĄăŻă揥ăŽăă¨ăé˛ăăăă§ăă
module SomeBigLibrary
# Assuming required definitions
protocol Baz{el1type}
Base.foo(_, i::el1type) # say `convert`
baz(_)
end
end
module SomeOtherLibrary
# Assuming required definitions
protocol Bar{el2type}
Base.foo(_, i::el2type)
bar(_)
end
end
module My
# Assuming required definitions
protocol Protocol{el_type} # What do I put here to get both subtypes correctly!
Base.foo(_, i::el_type)
SomeBigLibrary.baz(_)
SomeOtherLibrary.bar(_)
end
end
ä¸ćšăăăăăłăŤăĺż
čŚăŞçšĺŽăŽăżă¤ăé幤ăŽăżăĺ
ŹéăăăăăŤăăžăă ĺĺăIterable
ä¸č´ăăŞăĺ ´ĺăĺ垊ĺŻč˝ăĺŽčŁ
ăăăĄăŞăăăŻĺžăăăžăăďźăžăăäžĺé˘äżăŤĺŞä˝ć§ăćăăăăă¨ăăăăžăăďźă ăăăă揥ăŽăă¨ăĺŽčĄăăćŠč˝ăŤĺ ăăŚăăŚăźăśăźăăăăăä˝ăĺžăăŽăăăăăžăă...
ďźcďźăăă§ăç§ăŻä˝ăăćŹ ăăŚăăăăăăăžăăăăĺĺäťăăżă¤ăă彚çŤă¤ä¸ťăŞçŽçăŻăăšăźăăźăťăăăŽăăžăăžăŞé¨ĺăăŠăŽăăăŤĺä˝ăăăă誏ćăăăă¨ă§ăŻăăăžăăăďź Number
é幤ă¨ć˝čąĄĺSigned
ă¨Unsigned
ăčăăŚăżăžăăăăăŠăĄăăă Integer
ăăăăłăŤăĺŽčŁ
ăăžăăăĺä˝ăăžăŁăăç°ăŞăĺ ´ĺăăăăžăă ăăăăĺşĺĽăăăăăŤă Signed
ăżă¤ăăŽăżăŤçšĺĽăŞnegate
ăĺŽçžŠăăĺż
čŚăăăăžăďźçšăŤăĺŽéăŤUnsigned
ăżă¤ăăĺŚĺŽăăăăŞăżăźăłăżă¤ăăăŞăă¨éŁăăďźďź
ăăăŻă super = Number
äžă§čŞŹćăăĺéĄă ă¨ćăăžăă bitstype Int16 <: Signed
ă厣č¨ăăă¨ďźç§ăŽäťăŽčłŞĺăŻăĺăăăăăŁăćă¤ăăăăłăŤă¨ăăŚăŽNumber
ăžăăŻSigned
ăĺ
ˇä˝çăŞĺăŤăŠăŽăăăŤéŠç¨ăăăăă¨ăăăă¨ă§ăďźă Signed
ďź super = Signed
ďźăăăăłăŤăŻă Unsigned
ăăăăłăŤă§ăăźăŻăăăăżă¤ăă¨ăŻç°ăŞăăăŽă¨ăăŚăăźăŻăăžăăďź ăăăŻç§ăŽčŚč§Łă§ăŻĺĽĺŚăŞč§Łćąşçă§ăăăĺĺäťăăŽĺăăŠăĄăźăżăźăĺĽĺŚă ă¨ćăŁăăăă§ăŻăăăžăăă ăšăźăăźăŤé
罎ăăăăżă¤ăăé¤ăăŚ2ă¤ăŽăăăăłăŤăĺŽĺ
¨ăŤä¸č´ăăĺ ´ĺăă¨ăŤăăăăăăŻăŠăŽăăăŤç°ăŞăăžăăďź ăăăŚăăă大ăăŞĺďźăăăăłăŤďźăŽăľăăťăăéăŽĺä˝ăŤéăăăăĺ ´ĺăć˝čąĄĺăŽçŽçăĺçşćăăă ăă§ăŻăăăžăăăďź
ďźdďźĺéĄăŻăć˝čąĄĺă§ĺä˝ăĺşĺĽăăăăăăłăŤă§çšĺŽăŽćŠč˝ďźĺ¤ăăŽĺ ´ĺăäťăŽĺä˝ăŤé˘äżăŞăďźă確äżăăŚăĺä˝ă襨çžăăĺż čŚăăăăă¨ă§ăă ăăăăç§ăăĄăŻăăăăăłăŤăäżč¨źă§ăăćŠč˝ă¨ăć˝čąĄĺăŽĺä˝ăăăźăăŁăˇă§ăłĺăăăŚăăăă¨ăç解ăăăă¨ăăŚăăžăă
ç§ăăĄăăăă¸ăŁăłăăă解湺çăŻăĺŽčŁ
ă§ĺéĄă¨ăŞăăĺăŤć˝čąĄăŻăŠăšăĺŽčŁ
ăăćĺłă厣č¨ăăăăłăłăăŠă¤ă˘ăłăšăăă§ăăŻăăăăă¨ăăćšéăŤć˛żăŁăăăŽă§ăďźĺžŞç°ĺç
§ăĺăăăăŻăžăăŻimpl
ĺ
ăŤé˘ć°ĺŽçžŠăčż˝ĺ ăăăă¨ăŤă¤ăŞăăďź
ăăăăăăăŤéčŚăŞăă¨ăŤăăăăăłăŤăŻăč¤ć°ăŽé˘ć°ďźĺ垊ăŞăŠďźăŤăăăč¤éăŞćŠč˝ăč¨čż°ăăĺä˝ăč¨čż°ăăžăăăăăŽĺ垊ăŽĺä˝ăŻăć˝čąĄĺďźăă¨ăă°ăă˝ăźăăăăŚăăăăé ĺşäťăăăăŚăăăăŠăăďźăŤăăŁăŚč¨čż°ăăăžăă ä¸ćšăăăăăłăŤă¨ć˝čąĄĺăŽçľăżĺăăăŻăĺŽéăŽĺăćăŤĺ Ľăăăă¨ăă§ăăă°ăćŠč˝ďźćŠč˝ăŚăźăăŁăŞăăŁăĄă˝ăăďźăĺä˝ďźéŤăŹăăŤăĄă˝ăăďźăăžăăŻăăŽä¸ĄćšďźĺŽčŁ ăŽčŠłç´°ďźăăăăŁăšăăăă§ăăăăäžżĺŠă§ăăăĄă˝ăăďźă
ďźeďźăăăăłăŤăč¤ć°ăŽăăăăłăŤďźă¨ăŤăăĺşćŹçăŤć§é çă§ăăďźă¨ĺ ˇčąĄĺă¨ĺăć°ăŽć˝čąĄĺďźăă¨ăă°ăč¤ć°ăŽć˝čąĄçśćżăŞăďźăçśćżă§ăăăăăŤăăă¨ăç´ç˛ăŞăăăăłăŤĺăç´ç˛ăŞć˝čąĄĺăăăăłăăăăłăŤ+ć˝čąĄĺă
ăăăŤăăăä¸č¨ăŽSigned
ă¨Unsigned
ĺéĄă俎ćŁăăăă¨ćăăžăă
IntegerProtocol
çśćżăăžăďźăăăăłăŤć§é ă NumberAddingProtocol
ă IntegerSteppingProtocol
ăŞăŠăçśćżăăžăďźä¸ćšăŻAbstractSignedInteger
ăăăăăä¸ćšăŻAbstractUnsignedInteger
ďźăSigned
ăżă¤ăăŽăŚăźăśăźăŻăćŠč˝ďźăăăăłăŤăăďźă¨ĺä˝ďźć˝čąĄé幤ăăďźăŽä¸Ąćšăäżč¨źăăăžăăAbstractSignedInteger
ĺ
ˇčąĄĺăŻă_ă¨ăŤăă_使ç¨ă§ăăžăăăIntegerSteppingProtocol
ďźăăăŻäşç´°ă§ĺşćŹçăŤĺä¸ăŽé˘ć°ăŽă¨ă¤ăŞă˘ăšďźă ăăĺĺ¨ăăĺ ´ĺăćçľçăŤä¸čśłăăŚăăćŠč˝ă解湺ăăćŠč˝ăä˝ćă§ăăžăăĺ
ˇä˝çăŞAbstractUnsignedInteger
ä¸ăăăăĺ ´ĺăäťăŽăăăăłăŤăĺŽčŁ
ăăăă¨ă§Signed
ă解ăăă¨ăă§ăăžăă ăăśăconvert
ăăăŞăăŽă§ăăăăăăŽăťă¨ăăŠăăăăăłăŤ+ć˝čąĄĺăŤĺ¤ćăăä¸é¨ăç´ç˛ăŞć˝čąĄĺă¨ăăŚćŽăăă¨ăŤăăăć˘ĺăŽăăšăŚăŽĺăäżćăăžăă
硨éďźďźfďźć§ćäžďźăăźăďźaďźăĺŤăďźă
硨é2 ďźăăă¤ăăŽééăă俎ćŁăďź :<
䝣ăăăŤ<:
ďźăä¸éŠĺăŞé¸ćă俎ćŁăăžăăďź Foo
䝣ăăăŤ::Foo
ďź
protocol {T<: Number}(Foo <: AbstractFoo; Bar <: AbstractBar) # Abstract inheritance
IterableProtocol(::Foo) # Explicit protocol inheritance.
# Implicit protocol inheritance.
start(::Bar)
next(::Bar, state) # These states should really share an anonymous internal type
done(::Bar, state)
# Custom method for protocol involving both participants, defines Foo / Bar relationship.
set(::Foo, ::Bar, v::T)
# Custom method only on Bar
bar(::Bar)
end
# Protocols both Foo{T} and Bar{T}.
ăăŽć§ćăŽĺéĄăŻćŹĄăŽăăăŤčŚăăžăă
_ć˝čąĄĺ_ăŻă¨ăłăăŁăăŁăä˝ă§ăăăăĺŽçžŠăăžăă _Protocol_ăŻăă¨ăłăăŁăăŁăčĄăăă¨ăĺŽçžŠ
ç§ăŽćčŚă§ăŻăăăăăłăŤăŻĺä¸ăŽăăŁăšăăăăăăć˝čąĄĺă§ăă ăăăŻăăăąăźă¸ăŽćĄĺźľă¨ĺĺăĺŠăăăă¨ăă§ăăžăă ăăăăŁăŚăă¨ăłăăŁăăŁăĺŻćĽăŤé˘éŁăăŚăăĺä¸ăŽăăăąăźă¸ĺ ă§ăć˝čąĄĺă使ç¨ăăŚéçşă厚ćăŤăăžăďźč¤ć°ăŽăăŁăšăăăăăĺŠçăĺžăďźă ă¨ăłăăŁăăŁăăăçŹçŤăăŚăăăăăąăźă¸éă§ăŻăăăăăłăŤă使ç¨ăăŚĺŽčŁ ăŽé˛ĺşăć¸ăăăžăă
@ mason-bially
ăăŠăĄăźăżăĺĺă§ä¸č´ăăăĺż čŚăăăççąăăăăăžăă
ä˝ç˝ŽăŤăăä¸č´ă¨ăŻĺŻžç §çăŤăĺĺăŤăăä¸č´ăćĺłăăžăă ăăăăŽĺĺăŻăć§é çăŤăľăăżă¤ăĺăăăăŹăłăźăăŽăăăŤćŠč˝ăăžăă ç§ăăĄăćăŁăŚăăĺ ´ĺ
protocol Collection{T}
eltype = T
end
ăăŽĺ ´ĺă eltype
ă¨ăăăăăăăŁăćă¤ăăŽăŻăăšăŚă Collection
ăľăăżă¤ăăŤăŞăăžăă ăăăăŽăăăŠăĄăźăżăăŽé ĺşă¨ä˝ç˝ŽăŻéčŚă§ăŻăăăžăăă
ăšăźăăźăŤé 罎ăăăăżă¤ăăé¤ăăŚ2ă¤ăŽăăăăłăŤăĺŽĺ ¨ăŤä¸č´ăăĺ ´ĺăă¨ăŤăăăăăăŻăŠăŽăăăŤç°ăŞăăžăăďź ăăăŚăăă大ăăŞĺďźăăăăłăŤďźăŽăľăăťăăéăŽĺä˝ăŤéăăăăĺ ´ĺăć˝čąĄĺăŽçŽçăĺçşćăăă ăă§ăŻăăăžăăăďź
ăăăŻĺ
ŹćŁăŞçšă§ăă ĺĺäťăăăŠăĄăźăżăźăŻăĺŽéăć˝čąĄĺăŽăăăăăŁăŽĺ¤ăăĺăćťăăžăă ç§ăŻăăăăăłăŤă¨ć˝čąĄĺăŽä¸Ąćšăĺż
čŚăŤăŞăăăăăăŞăă¨ăăčăăăĺ§ăă揥ăŤćŠč˝ăçľąĺăăŚä¸čŹĺăăăă¨ăăžăăă çľĺąăŽă¨ăăăçžĺ¨type Foo <: Bar
ă厣č¨ăăă¨ăăăăŹăăŤă§ĺŽéăŤčĄăŁăăă¨ăŻFoo.super === Bar
č¨ĺŽăăăžăă ăăăăŁăŚăé˘éŁäťăăăäťăŽăăźă¨ĺ¤ăŽăă˘ă¨ă¨ăăŤăăăăç´ćĽăľăăźăăăĺż
čŚăăăăăăăăžăăă
ăĺăŤć˝čąĄăŻăŠăšăĺŽčŁ ăăŚăłăłăăŠă¤ă˘ăłăšăăă§ăăŻăăćĺłă厣č¨ăăăă
ăŻăăç§ăŻăăŽă˘ăăăźăăăłă˘ćŠč˝ăŤăăăă¨ăŤĺ寞ăăŚăăžăă
ăăăăłăŤăč¤ć°ăŽăăăăłăŤăçśćżă§ăăăăăŤăăă¨...ăăăŚĺăć°ăŽć˝čąĄĺ
ăăăŻăăă¨ăă°ăTăăĄă˝ăăxăyăzăćăĄăAbstractArrayăŽăľăăżă¤ăă§ăăă¨ĺŽŁč¨ăăŚăăĺ ´ĺăTăŻăăăăłăŤPăŽăľăăżă¤ăă§ăăăă¨ăăćĺłă§ăăďź ăăŽç¨ŽăŽăăăăăłăŤ+ć˝čąĄĺăăŻăç§ăŽsuper = T
ăăăăăŁăŽććĄă§ĺžăăăăăŽă¨é常ăŤäźźăŚăăă¨ćăăžăă 確ăăŤăç§ăŽăăźă¸ă§ăłă§ăŻăçžĺ¨ăŽăăăŤé幤ăă¤ăłăăăŤăă§ăźăłăăćšćłăăžă ç解ăăŚăăžăăďźäžďź Integer <: Real <: Number
ďźă
ăăăăłăŤăŤďźĺçŽä¸ăŽďźć˝čąĄĺăçśćżăăăăă¨ăŻăăăăăłăŤăŤĺŻžăăé常ăŤĺźˇăĺśç´ăŽăăă§ăă ăăăăłăŤăĺŽčŁ ăăŞăăŁăć˝čąĄĺăŽăľăăżă¤ăăŻăăăžăăďź ç§ăŽç´ćăŻăăăăăłăŤă¨ć˝čąĄĺăç´äş¤ăăăăŽă¨ăăŚäżćăăćšăčŻăă¨ăăăă¨ă§ăă
protocol {T :< Number}(Foo :< AbstractFoo; Bar :< AbstractBar) # Abstract inheritance
IterableProtocol(Foo) # Explicit protocol inheritance.
# Implicit protocol inheritance.
start(Bar)
...
ăăŽć§ćăăăăăžăăă
{ }
ă¨( )
ăăŽăŻćŁç˘şăŤf(x::ThisProtocol)=...
ĺŽçžŠăăăă¨ăŻăŠăăăćĺłă§ăăďźăăŽĺ ´ĺăeltypeă¨ăăăăăăăŁăćă¤ăăŽăŻăăšăŚăCollectionăŽăľăăżă¤ăăŤăŞăăžăă ăăăăŽăăăŠăĄăźăżăăŽé ĺşă¨ä˝ç˝ŽăŻéčŚă§ăŻăăăžăăă
ăăăç§ăŽčŞ¤č§ŁăăăăžăăăăăăŻăăŁă¨çăŤăăŞăŁăŚăăžăă ă¤ăžăăĺ˛ăĺ˝ăŚăćŠč˝ďź
el1type = el_type
el2type = el_type
ç§ăŽäžăŽĺéĄă解湺ăăăăăŤă
ăăăăŁăŚăé˘éŁäťăăăäťăŽăăźă¨ĺ¤ăŽăă˘ă¨ă¨ăăŤăăăăç´ćĽăľăăźăăăĺż čŚăăăăăăăăžăăă
ăăăŚăăăŽăăź/ĺ¤ćŠč˝ăŻăabstractăăăăŤç˝ŽăćăăăăăăăšăŚăŽăżă¤ăăŤéŠç¨ăăăžăă ăăăŻç´ ć´ăăăä¸čŹçăŞč§Łćąşçă§ăă ăăŞăăŽč§ŁćąşçăŻäťç§ăŤă¨ăŁăŚăŻăăăŤçăŤăăŞăŁăŚăăžăă
確ăăŤăç§ăŽăăźă¸ă§ăłă§ăŻăçžĺ¨ăŽăăăŤé幤ăă¤ăłăăăŤăă§ăźăłăăćšćłăăžă ç解ăăŚăăžăăďźăă¨ăă°ăć´ć°<ďźĺŽć°<ďźć°ĺ¤ďźă
super
ďźăă¨ăă°ă Integer
ăŽăšăźăăźăReal
ďźă super
çšĺĽăŤăăŚăĺĺäťăĺăŽăăăŤĺä˝ăăăăăčż˝ĺ ăăăă¨ăă§ăăă¨ćăăžăăŤăšăżă ĺ解湺ăłăźăďźala pythonďźăčż˝ĺ ăă super
ăăŠăĄăźăżăźăŽăăăŠăŤăăŤăźăŤăä˝ćăăćšćłă
ăăăăłăŤăŤďźĺçŽä¸ăŽďźć˝čąĄĺăçśćżăăăăă¨ăŻăăăăăłăŤăŤĺŻžăăé常ăŤĺźˇăĺśç´ăŽăăă§ăă ăăăăłăŤăĺŽčŁ ăăŞăăŁăć˝čąĄĺăŽăľăăżă¤ăăŻăăăžăăďź ç§ăŽç´ćăŻăăăăăłăŤă¨ć˝čąĄĺăç´äş¤ăăăăŽă¨ăăŚäżćăăćšăčŻăă¨ăăăă¨ă§ăă
ăăăăăć˝čąĄĺśç´ăŻĺŽĺ ¨ăŤăŞăăˇă§ăłă§ăăďź ç§ăŽĺ ¨ä˝çăŞăă¤ăłăăŻăăăăăłăŤă¨ć˝čąĄĺăŻç´äş¤ăăŚăăă¨ăăăă¨ă§ăăă ć˝čąĄ+ăăăăłăŤă使ç¨ăăŚăçšĺŽăŽĺä˝ă¨é˘éŁăăćŠč˝ăŽçľăżĺăăă確ĺŽăŤĺĺžăăžăă ćŠč˝ăŽăżďźăŚăźăăŁăŞăăŁé˘ć°ăŽĺ ´ĺďźăžăăŻĺä˝ăŽăżăĺż čŚăŞĺ ´ĺăŻăăăăăç´äş¤ăăŚä˝żç¨ăăžăă
ăăŽăăăăłăŤăŤăŻĺĺăăăăžăăďź
1ă¤ăŽăăăăŻăŤçąćĽăă2ă¤ăŽĺĺďź Foo
ă¨Bar
ďźăćă¤2ă¤ăŽăăăăłăŤă§ăăăăăŻăă使ç¨ăăŚăăŽăăăŞč¤ć°ăŽĺŽçžŠăćĄĺźľăăăă¨ăŤć
ŁăăŚăăžăă ç§ăŽć§ćăŽăăŽé¨ĺăŻăé¨ĺďźaďźă解湺ăă芌ăżă§ăăă ăăăçĄčŚăăă¨ăćĺăŽčĄăŻĺç´ăŤprotocol Foo{T <: Number, Bar <: AbstractBar} <: AbstractFoo
ăŞăĺŻč˝ć§ăăăăžăďź Bar
ăăăăłăŤăŽĺĽăŽĺĽĺăŽĺŽçžŠă使ç¨ďźă ăžăăé常ăŽĺĺŽçžŠăŽăăăŤă Number
ă AbstractBar
ăăăăłAbstractFoo
ăŻăăšăŚăŞăăˇă§ăłă§ăă
{}ă¨ďźďźăŽä¸čşŤăŻćŁç˘şăŤăŻăŠăăăćĺłă§ăăďź
{}
ăŻăć¨ćşăŽăăŠăĄăăŞăăŻĺĺŽçžŠăťăŻăˇă§ăłă§ăă 使ç¨ăĺŻč˝ăŤFoo{Float64}
ĺŽčŁ
ĺ誏ćăăFoo
使ç¨ăăŚăăăăłăŤăFloat64
ăäžăă°ăăžăă ()
ăŻĺşćŹçăŤăăăăăłăŤćŹä˝ăŽĺŻĺ¤ăă¤ăłăăŁăłă°ăŞăšăă§ăďźăăăăŁăŚăč¤ć°ăŽăăăăłăŤăä¸ĺşŚăŤč¨čż°ă§ăăžăďźă ăŞăŞă¸ăăŤăŽ<:
ă§ăŻăŞă:<
ĺ
Ľĺăééăăăăă桡䚹ăç§ăŽăăă§ăăĺŻč˝ć§ăăăăžăă <<name>> <<parametric>> <<bindings>>
ć§é ăçśćăăăăăŤăăăă交ćăăăă¨ă䞥ĺ¤ăăăăăăăăžăăăăăă§ă <<name>>
ăŻăă¤ăłăăŁăłă°ăŽăŞăšăăŤăŞăăă¨ăăăăžăă
ăăŽăăăăłăŤăăŠăŽăăăŤä˝żç¨ăăžăăďź ć´žéŁăăŚăăăăžăăďź ăăăăăŞăăăăăăłăŤăč¤ć°ăŽăżă¤ăăŤé˘éŁăăŚăăă¨ăăă¨ă
f(x::ThisProtocol)=...
ĺŽçžŠăăăă¨ăŻăŠăăăćĺłă§ăăďź
ç§ăŽćčŚă§ăŻăăăŁăšăăăăŽäžăŻć§ćçăŤăŻćŁăăăăă§ăăĺŽéă揥ăŽĺŽçžŠăć¤č¨ăăŚăă ăăă
protocol FooProtocol # Single protocol definition shortcut
foo(::FooProtocol) # I changed my syntax here, protocol names inside the protocol block should referenced as types
end
abstract FooAbstract
# This next line could use better syntax, like a type alias with an Intersection or something.
protocol Foo <: FooAbstract
FooProtocol(::Foo)
end
type Bar <: FooAbstract
a
end
type Baz
b
end
type Bax <: FooAbstract
c
end
f(f::Any) = ... # def (0)
foo(x::Bar) = ... # def (1a)
foo(x::Baz) = ... # def (1b)
f(x::FooProtocol) = ... # def (2); Least specific type (structural)
f(Bar(...)) # Would call def (2)
f(Baz(...)) # Would call def (2)
f(Bax(...)) # Would call def (0)
f(x::FooAbstract) = ... # def (3); Named type, more specific than structural
f(Bar(...)) # Would call def (3)
f(Baz(...)) # Would call def (2)
f(Bax(...)) # Would call def (3)
f(x::Foo) = ... # def (4); Named structural type, more specific than equivalent named type
f(Bar(...)) # Would call def (4)
f(Baz(...)) # Would call def (2)
f(Bax(...)) # Would call def (3)
ć§é ăăă§ăăŻăăăăăŽăăĺ
ˇä˝çăŞć˝čąĄĺăćĺŽăăăŚăăŞăéăăăăăăłăŤăŻäşĺŽä¸ăĺĺäťăăŽăăăĺďźAnyďźă使ç¨ăăŚăăžăă ĺŽéăăăăăłăŤć§ćă使ç¨ăăăŽă§ăŻăŞăă typealias Foo Intersect{FooProtocol, Foo}
ďź_ Editďź IntersectăŻééăŁăĺĺă§ăăăăăăăă IntersectăćĺăŤćŁăăăŽă§ăŻăŞăJoin_ďźăŽăăăŞăăŽă訹ĺŻăă䞥ĺ¤ăăă
ăăăăăăŻäťç§ăŤă¨ăŁăŚăŻăăăŤçăŤăăŞăŁăŚăăžăďź ĺăăăăăŻă§č¤ć°ăŽăăăăłăŤăä¸çˇăŤĺŽçžŠăăăŽăŻčĺłćˇąăăă¨ă§ăă ăăăŤă¤ăăŚăăĺ°ăčăăŞăăă°ăŞăăžăăă
ć°ĺĺăŤăăšăŚăŽäžăăŻăŞăźăłă˘ăăăăžăăă ăšăŹăăăŽĺĺă§ăă˘ă¤ăă˘ăăăšăăăăăăŽăăăăłăŤăŽăłăźăăšăĺéăăăă¨ăŤă¤ăăŚčŞ°ăăč¨ĺăăžăăăăăăăŻç´ ć´ăăăă˘ă¤ăă˘ă ă¨ćăăžăă
ĺăăăăăŻĺ ăŽč¤ć°ăŽăăăăłăŤăŻăč¨čŞăăăźăăăă¨ăăŤĺŽçžŠ/ăłăłăă¤ăŤă§ä¸Ąĺ´ăŤćŁăăĺă˘ăăăźăˇă§ăłă使ç¨ăăŚăŞăă¸ă§ăŻăéăŽč¤éăŞé˘äżăč¨čż°ăăăă¨ăăă¨ăä¸ç¨ŽăŽăăăăŽăăă§ăďźăă¨ăă°ăPythonăŽăăăŤ; JavaăŻăăă§ăŻăăăžăăďźĺéĄăăăăžăďźă ä¸ćšăăăăăŽăťă¨ăăŠăŻăă¨ăŤăăăăŤăăĄă˝ăăă使ç¨ăăŚă使ăăăăăŽçšă§ăăăăç°ĄĺăŤäżŽćŁă§ăăžăă ăă ăăăăăŠăźăăłăšăŽčć Žäşé ăŻăăăăăłăŤĺ ăŤćŠč˝ăćŁăăĺ Ľĺăăăă¨ăăçăăĺ ´ĺăăăăžăďźvtablesăŞăŠăŤçšĺăăŚăăăăłăŤăćéŠĺăăďźă
ĺ
ăťăŠăăăăăłăŤăŻ::Any
ă使ç¨ăăăĄă˝ăăăŤăăŁăŚďźčޤăŁăŚďźĺŽčŁ
ăăăĺŻč˝ć§ăăăă¨ăăŁăăăăžăăăăăăăŻé常ăŤĺç´ăŞăąăźăšă§ăăăçĄčŚăăăŽăŻé常ăŤç°ĄĺăŞăąăźăšă ă¨ćăăžăă ĺŽčŁ
ăĄă˝ăăă::Any
ăŤăăŁăšăăăăăăĺ ´ĺăĺ
ˇčąĄĺăŻăăăăłăŤă¨ăăŚĺéĄăăăžăăă ä¸ćšă§ăăăăĺż
ăăăĺéĄăŤăŞăă¨ăŻč¨ăăžăăă
ćĺ§ăăŤă ::Any
ăĄă˝ăăăäşĺžăŤčż˝ĺ ăăăĺ ´ĺďźăă¨ăă°ă誰ăăăăăĺŚçăăăăăŽăăä¸čŹçăŞăˇăšăă ăćăă¤ăăăăďźăăăăŻăžă ćĺšăŞĺŽčŁ
ă§ăăăćéŠĺćŠč˝ă¨ăăŚăăăăłăŤă使ç¨ăăĺ ´ĺăĺć§ă§ă::Any
ăăŁăšăăăăăăăĄă˝ăăăŽçšćŽăŞăăźă¸ă§ăłăŻăăăăŠăźăăłăšăĺä¸ăăăăăăŤĺźăçśăćŠč˝ăăžăă ă ăăçľĺąăç§ăŻĺŽéăŤăăăăçĄčŚăăăă¨ăŤĺ寞ăăă§ăăăă
ăă ăăăăăăłăŤĺŽçžŠč
ă2ă¤ăŽăŞăăˇă§ăłăăé¸ćă§ăăć§ćă使ç¨ăăăă¨ăŻäžĄĺ¤ăăăăăăăăžăăďźăăăŠăŤăăŤăăĺ ´ĺăŻăăăä¸ćšă訹ĺŻăăžăďźă ćĺăŤă ::Any
ăăŁăšăăăăăăăĄă˝ăăăŽčť˘éć§ćăăă¨ăă°ă°ăăźăăŤăăźăŻăźăďźćŹĄăŽăťăŻăˇă§ăłăĺç
§ďźă ăăĺ
ˇä˝çăŞćšćłăčŚćąăă2çŞçŽăŽćšćłă¨ăăŚăç§ăŻć˘ĺăŽćç¨ăŞăăźăŻăźăăčăăăă¨ăă§ăăžăăă
硨éďźçĄćĺłăŞăăŽăŽćăĺé¤ăăžăăă
Join
ăŻăăžăăŤăăăăłăŤăżă¤ăăŽĺ
ąéé¨ĺă§ăă ăăăŻĺŽéăŤăŻăĺşäźăăă§ăă ăăăŚĺš¸ăăŞăă¨ăŤăăăăăłăŤăżă¤ăăŻäş¤ĺˇŽçšăŽä¸ă§ăă§ăŤéăăăăŚăăăăă Join
ăżă¤ăăŻĺż
čŚăăăžăăă交塎çšăč¨çŽăăăŤăŻă2ă¤ăŽăĄă˝ăăăŞăšăăéŁçľăăăć°ăăăăăăłăŤăżă¤ăăčżăă ăă§ăă
ăăăăłăŤă::Any
ĺŽçžŠăŤăăŁăŚĺç´ĺăăăăă¨ăŤă¤ăăŚăŻăăžăĺżé
ăăŚăăžăăă ç§ăŤă¨ăŁăŚăă Any
ăăŤăŚăłăăăăŞăăă¨ăé¤ăăŚăä¸č´ăăĺŽçžŠăć˘ăăă¨ăăăŤăźăŤăŻăăŞăăŤă ăŽĺĺăŤĺăăăăŽă§ăă č¨ăăžă§ăăŞăăăľăăżă¤ăăłă°ă˘ăŤă´ăŞăşă ăŤăignoreAnyăăăŠă°ăăšăŹăăĺăăăŽăŻăăŞăé˘ĺă§ăă çľćă¨ăăŚĺžăăăă˘ăŤă´ăŞăşă ăä¸č˛ŤăăŚăăăăŠăăăăăăăăžăăă
ç§ăŻăăăăłăŤăŽă˘ă¤ăă˘ăă¨ăŚă弽ăă§ăďźĺ°ăCLUsterăćăĺşăăăžăďźăç§ăŻăă čĺłăăăăžăăăăăŻJuliaConă§JeffăŤăăŁăŚč°čŤăăăć°ăăăľăăżă¤ăăłă°ă¨ăŠăŽăăăŤéŠĺăăžăăďź ďźç§ăăžă ă¸ăĽăŞă˘ă§ćŹĺ˝ăŤčŚăă2ă¤ăŽăă¨ďźă
ăăăŤăăăçŹčŞăŽăľăăżă¤ăăłă°ăŤăźăŤďźhttps://github.com/JuliaLang/julia/issues/6975#issuecomment-160857877ďźăćă¤ć°ăă税éĄăŽăżă¤ăăčż˝ĺ ăăăžăă ä¸čŚăăă¨ăăˇăšăă ăŽäťăŽé¨ĺă¨äşćć§ăăăăăăŤčŚăăăăŠă°ă¤ăłăăă ăă§ć¸ăżăžăă
ăăăăŽăăăăłăŤăŻă @ mauro3ăŽçšć§ăŽăťă¨ăăŠă1ă¤ăŽăăŠăĄăźăżăźăăăźă¸ă§ăłă§ăă
Join
ăŻăăžăăŤăăăăłăŤăżă¤ăăŽĺ ąéé¨ĺă§ăă
交塎çšă ă¨č¨ăŁăă¨ăăç§ăŻăŠăăăăăăčŞĺăééăŁăŚăăă¨ç˘şäżĄăăžăăă ăă ăă1čĄă§ĺă交塎ăăăćšćłăĺż
čŚă§ăďź Union
ďźă
硨éďź
ăžăăăăăăłăŤă¨ć˝čąĄĺă1ă¤ăŽăˇăšăă ăŤä¸čŹĺăăăăăăŽč§ŁćąşăŽăăăŽăŤăšăżă ăŤăźăŤă訹ĺŻăăăă¨ă弽ăă§ăďźăă¨ăă°ăçžĺ¨ăŽć˝čąĄĺăˇăšăă ăč¨čż°ăăăăăŽsuper
ďźă ăăăćŁăăčĄăăăă°ăäşşă
ăŻăŤăšăżă ĺăˇăšăă ăčż˝ĺ ăăćçľçăŤăŻăăăăŽĺăˇăšăă ăŽăŤăšăżă ćéŠĺăčĄăăă¨ăă§ăăă¨ćăăžăă ăăăăłăŤăćŁăăăăźăŻăźăăŤăŞăăăŠăăăŻăăăăžăăăăĺ°ăŞăă¨ăabstract
ăăăŻăăŤĺ¤ćăăăă¨ăŻă§ăăžăăăăăăŻăă°ăăăăă¨ă§ăă
麌çăăďźçŽçĺ°ă¨ăăŚăŽä¸čŹĺăćąăăăăăăăăăăłăŤĺăăć˝čąĄĺăăăăăŽăéăăŚĺ ąéć§ăéŤăăćšăăăă
ä˝ďź
ăăăăłăŤă¨ć˝čąĄĺăŽćĺłăćŠč˝ăĺŻč˝ć§ăä¸čŹĺăăăăăťăšăŻă質çăŤćăćşčśłăŽăăĺćă解湺ăăćšćłă¨ăăŚăŻăăžăĺšćçă§ăŻăăăžăăă ćĺăŤăçŽçăăăżăźăłăăăăťăšăŽćŹčłŞçăŞĺ ąéçšăĺéăăćšăăăžăćŠč˝ăăžăă ăăăŚăăăŽç解ă桹ăăčŞĺăŽčŚçšăć´çˇ´ăăăŚçľąĺă形ćă§ăăăăăŤăăžăă
ă¸ăĽăŞă˘ăŤă¨ăŁăŚĺŽăĺ¤ăĺŽçžăä˝ă§ăăăăăăŻĺćăćäžăăčśłĺ ´ăŽä¸ăŤć§çŻăăăŚăăžăă ăăć確ăŞĺćăŻăĺťşč¨çăŞĺźˇăă¨čŞĺ°ĺă§ăă
ä˝ďź
彟ăŻăćĺăŤăăăăłăŤăăä˝ă揲ăăăŽăăăăăŚăŞăăăăăćç¨ăŞăŽăăç解ăăĺż čŚăăăă¨č¨ăŁăŚăăă¨ćăăžăă 揥ăŤăăăă¨ć˝čąĄĺăĺĺžăăă¨ăăăăăŽä¸čŹçăŞĺćăćăäťăăŽăç°ĄĺăŤăŞăăžăă
ĺăŞăăăăăłăŤ
ďź1ďźćĺą
ăăăăłăŤăćĄĺźľăăŚăďźăăč¤éăŞďźăăăăłăŤăŤăăăă¨ăă§ăăžăă
ăăăăłăŤăŻăďźăăžăč¤éă§ăŞăďźăăăăłăŤăŤăŞăăăăŤç¸Žĺ°ăăăĺ ´ĺăăăăžăă
ăăăăłăŤăŻă[ă˝ăăăŚă§ă˘ă§]ćşć ăăă¤ăłăżăźăă§ăźăšă¨ăăŚĺŽçžă§ăăžăă
ă¤ăłăżăźăă§ăźăšăŽéŠĺć§ăĺ¤ćăăăăăŤăăăăăłăŤăç
§äźăăăă¨ăă§ăăžăă
ďź2ďźććĄ
ăăăăłăŤăŻăăăăŠăŤăă§ăăăăłăŤĺşćăŽăăźă¸ă§ăłçŞĺˇăăľăăźăăăĺż čŚăăăăžăă
ăăăčĄăăăăŽä˝ăăăŽćšćłăăľăăźăăăăŽăŻčŻăăă¨ă§ăďź
ă¤ăłăżăźăă§ă¤ăšăăăăăłăŤăŤćşć ăăŚăăĺ ´ĺăŻătrueă¨ĺżçăăžăă ă¤ăłăżăźăă§ă¤ăšăŽĺ ´ĺ
ăăăăłăŤăŽăľăăťăăăŤĺż ĺŽă§ăăăćĄĺźľăăăĺ ´ĺăŻćşć ăăžăă
ä¸ĺŽĺ
¨ăŞĺżçăăă䝼ĺ¤ăŽĺ ´ĺăŻfalseăŽĺżçă é˘ć°ăŻăăšăŚăăŞăšăăăĺż
čŚăăăăžă
ăăăăłăŤăŤĺŻžăăŚä¸ĺŽĺ
¨ăŞă¤ăłăżăźăă§ă¤ăšăŤĺż
čŚăŞćĄĺźľă
ďź3ďźăăĽăźă¸ăłă°
ăăăăłăŤăŻăĺŞăă税éĄăŽă˘ă¸ăĽăźăŤă§ăăĺŻč˝ć§ăăăăžăă ăăŽčź¸ĺşăŻĺ˝šçŤă¤ă ăă
ä¸é¨ăŽă¤ăłăżăźăă§ă¤ăšăćşć ăăŚăăăăŠăăăĺ¤ćăăă¨ăăŽćĺăŽćŻčźĺŻžčąĄă¨ăăŚă
[ă¨ăŻăšăăźăăăă]ăżă¤ăă¨é˘ć°ă§ćĺŽăăăăăăăłăŤăŻă揥ă使ç¨ăăŚĺŽŁč¨ă§ăăžăă
@abstract
ă @type
ă @immutable
ăăăăł@function
ăĺşćăŽć˝čąĄĺăăľăăźăăăžăă
[paoďźăłăźăĺźç¨çŹŚăŤĺăćżăăžăăăäşĺžăŤăăăčĄăŁăŚăăă¨ăă錏ăŻăă§ăŤç´ĺąăé˘ăăŚăăăă¨ăŤćł¨ćăăŚăă ăă...]
ďź @mentions
ăĺźç¨ăăĺż
čŚăăăăžăďźďź
ăăăă¨ă-ăăă俎ćŁăă
3ć01ĺAMă§ć°´ććĽă2015ĺš´12ć16ćĽăŤăŻăăăŚăăŽ[email protected]ăŻć¸ăăžăăďź
ďź@ăĄăłăˇă§ăłăĺźç¨ăăĺż čŚăăăăžăďźďź
â
ăăŽăĄăźăŤăŤç´ćĽčżäżĄăăăăGitHubă§čĄ¨ç¤şăăŚăă ăă
https://github.com/JuliaLang/julia/issues/6975#issuecomment-165026727 ă
çłă訳ăăăžăăăăăăŁă¨ć確ăŤăăšăă§ăăďźăłăźăĺźç¨çŹŚăŻ `ă§ăŻăŞă`ă使ç¨ăăŚăăžă
ĺźç¨çŹŚăŽäżŽćŁă俎ćŁăăžăăă
ăăăă¨ă-ç§ăŽäťĽĺăŽçĄçĽă訹ăăŚăă ăă
ăăăăłăŤăżă¤ăăŽčż˝ĺ ăŤé˘ăăăăŽćčżăŽč°čŤăç解ăăăă¨ăăžăăă ä˝ăă誤解ăăŚăăăăăăăžăăăăăăăăłăŤăč¨čż°ăăăă¨ăăŚăăé˘éŁăăć˝čąĄĺăŽĺĺă使ç¨ăă䝣ăăăŤăăăăăłăŤăŤĺĺăäťăăĺż čŚăăăăŽăŻăŞăă§ăăďź
ç§ăŽčŚč§Łă§ăŻăçžĺ¨ăŽć˝čąĄĺăˇăšăă ăăĺăăćĺž ăăăĺä˝ăč¨čż°ăăăăăŽä˝ăăăŽćšćłă§ćĄĺźľăăăŽăŻé常ăŤčŞçśăŞăă¨ă§ăă ăăŽăšăŹăăă§ćĺăŤććĄăăăăăŽă¨ăăäźźăŚăăžăăăăăăăJeffsć§ćă使ç¨ăăžă
abstract Iterable
start(::_)
done(::_, state)
next(::_, state)
end
ăăŽăŤăźăăé˛ăĺ ´ĺăăľăăżă¤ăăă¤ăłăżăźăă§ăźăšăĺŽčŁ ăăŚăăăă¨ăçšĺĽăŤç¤şăĺż čŚăŻăăăžăăă ăăăŻăăľăăżă¤ăăłă°ăŤăăŁăŚćéťçăŤčĄăăăžăă
ć示çăŞă¤ăłăżăźăă§ă¤ăšăĄăŤăăşă ăŽä¸ťăŞçŽć¨ăŻăIMHOăăăéŠĺăŞă¨ăŠăźăĄăăťăźă¸ăĺĺžăăăăéŠĺăŞć¤č¨źăăšăăĺŽčĄăăăă¨ă§ăă
ăăăăŁăŚă揥ăŽăăăŞĺ厣č¨ďź
type Foo <: Iterable
...
end
...
ăťăŻăˇă§ăłă§é˘ć°ăĺŽçžŠăăžăăďź ăăă§ăŞăĺ ´ĺăćŹ č˝ăăŚăăćŠč˝ďźăăăłăăăŤé˘éŁăăč¤éăďźăŤă¤ăăŚăă¤ă¨ăŠăźăçşçăăžăăďź ăžăăč¤ć°ăŽăăăăłăŤăĺŽčŁ
ăăĺă§ăŻăŠăăŞăăžăăďźč¤ć°ăŽć˝čąĄçśćżăćĺšăŤăăžăăďź ăšăźăăźăĄă˝ăăăŽč§ŁćąşăăŠăŽăăăŤĺŚçăăžăăďź ăăăŻĺ¤éăăŁăšăăăă§ä˝ăăăžăăďźăăăĺé¤ăăŚJava風ăŽăŞăă¸ă§ăŻăăˇăšăă ăăăăŤč˛źăäťăăăăă§ăďźďź ćĺăŽĺăĺŽçžŠăăăĺžăăĄă˝ăăăŽć°ăăĺăŽçšćŽĺăăŠăŽăăăŤĺŽçžŠăăžăăďź ăżă¤ăăĺŽçžŠăăĺžăăăăăłăŤăăŠăŽăăăŤĺŽçžŠăăžăăďź
ăăăăŽčłŞĺăŻăăšăŚăć°ăăăżă¤ăăä˝ćăăďźăžăăŻć°ăăăżă¤ăăŽĺŽĺźĺăä˝ćăăďźăă¨ă§ç°ĄĺăŤč§Łćąşă§ăăžăă
ĺăăăăłăŤăŤé˘éŁăăć˝čąĄĺăĺż ăăăĺĺ¨ăăăăă§ăŻăăăžăăďźăăăăĺŽéăŤăŻĺĺ¨ăăŞăăŻăă§ăďźă çžĺ¨ăŽă¤ăłăżăźăă§ăźăšăŽĺć°ăŻăĺăăżă¤ăă§ĺŽčŁ ă§ăăžăă ăăăŻăçžĺ¨ăŽć˝čąĄĺăˇăšăă ă§ăŻčŞŹćă§ăăžăăă ăăăăŁăŚăĺéĄă
verify_interface
ăĄă˝ăăă使ç¨ăăžăăăăŽăĄă˝ăăăŻăăăšăŚăŽé˘ć°ĺŽçžŠăŽĺžă§ăăžăăŻĺä˝ăăšăă§ĺźăłĺşăăă¨ăă§ăăžăăfunction a()
b()
end
function b()
end
ăăăăŁăŚăăăă§ăŻăăăăŻĺ é˘ć°ăŽĺŽçžŠăŻĺż čŚăŞăă¨ćăăžăă
ăăăăăłăŤăăŽăăăŞăăŽă¨ĺ¤éçśćżăŽéăăŻăĺăĺŽçžŠăăăĺžăŤăăăăłăŤăŤčż˝ĺ ă§ăăăă¨ă ă¨ćăăžăă ăăăŻăăăăąăźă¸ďźăăăăłăŤăŽĺŽçžŠďźăć˘ĺăŽăżă¤ăă§ćŠč˝ăăăĺ ´ĺăŤĺ˝šçŤăĄăžăă ä˝ćĺžăŤăżă¤ăăŽăšăźăăźăżă¤ăăĺ¤ć´ă§ăăăăăŤăăăă¨ăă§ăăžăăăăăŽćçšă§ăŻăăăăăăłăŤăăŞăŠă¨ĺźăśćšăăăă§ăăăă
ăăźăăăăăŻć˘ĺăŽăżă¤ăă¸ăŽäťŁćż/ćĄĺźľă¤ăłăżăźăă§ăźăšăĺŽçžŠăăăă¨ăĺŻč˝ăŤăăžăă ăăăćŹĺ˝ăŤĺż čŚăŞĺ ´ćăŻăžă ăŻăŁăăăăŚăăžăăă ć˘ĺăŽă¤ăłăżăźăă§ăźăšăŤä˝ăăčż˝ĺ ăăăĺ ´ĺďźOPă§ććĄăăăă˘ăăăźăăŤĺžăĺ ´ĺďźăĺăŤăľăăżă¤ăăä˝ćăăăľăăżă¤ăăŤčż˝ĺ ăŽă¤ăłăżăźăă§ăźăšăĄă˝ăăăčż˝ĺ ăăžăă ăăăŻăăăŽă˘ăăăźăăŽčŻăă¨ăăă§ăă ăăăŻé常ăŤăăžăăšăąăźăŞăłă°ăăžăă
äžďźĺăăˇăŞă˘ăŤĺăăăăăąăźă¸ăăăă¨ăăžăă ăĄă˝ăătobits
ĺăŤĺŽčŁ
ăăĺż
čŚăăăăžăăăăăăă°ăăăŽăăăąăźă¸ĺ
ăŽăăšăŚăŽé˘ć°ăăăŽĺă§ćŠč˝ăăžăă ăăăSerializer
ăăăăłăŤă¨ĺźăłăžăăăďźă¤ăžăă tobits
ăĺŽçžŠăăăŚăăžăďźă ăăă§ă tobits
ĺŽčŁ
ăăăă¨ă§ă Array
ďźăžăăŻăăŽäťăŽăżă¤ăďźăčż˝ĺ ă§ăăžăă ĺ¤éçśćżă§ăŻăĺŽçžŠĺžăŤăšăźăăźăżă¤ăăArray
ăŤčż˝ĺ ă§ăăŞăăăă Array
ăSerialzer
ăăăăă¨ăă§ăăžăăArray
ăă ăăăŻéčŚăŞăŚăźăšăąăźăšă ă¨ćăăžăă
ăăăăžăăăăăăç解ăăŚăă ăăă https://github.com/JuliaLang/IterativeSolvers.jl/issues/2ăĺć§ăŽĺéĄă§ăăă解湺çăŻĺşćŹçăŤăăăŻăżă¤ăăłă°ă使ç¨ăăăă¨ă§ăă ăăŽĺéĄăă¨ăŹăŹăłăăŤč§Łćąşăăä˝ăăăăă°ăăăăŻç˘şăăŤç´ ć´ăăăăă¨ă§ăă ăăăăăăăŻăăŁăšăăăăŹăăŤă§ăľăăźăăăĺż čŚăăăăăŽă§ăă ä¸č¨ăŽăăăăłăŤăŽčăćšăćŁăăç解ăăŚăăă°ăć˝čąĄĺăžăăŻăăăăłăŤăĺ注éă¨ăăŚćŠč˝ăăăăă¨ăă§ăăžăă ăăă§ăŻăăăă2ă¤ăŽćŚĺżľăăĺĺăŤĺźˇĺăŞ1ă¤ăŽăăźăŤăŤçľąĺăăă¨ăăă§ăăăă
ç§ăŻĺćăăžăďźć˝čąĄĺă¨ăăăăłăŤăŽä¸Ąćšăćă¤ăă¨ăŻé常ăŤćˇˇäšąăăă§ăăăă ç§ăćŁăăćăĺşăă¨ăć˝čąĄĺăŤăŻăăăăłăŤă§ă˘ăăŤĺă§ăăŞăăăă¤ăăŽăťăăłăăŁăŻăšăăăăă¤ăžăć˝čąĄĺăŤăŻăăăăłăŤăŤăŻăŞăćŠč˝ăăăă¨ăăăă¨ăä¸ă§č°čŤăăăžăăă ăăăĺż çśçăŤĺ˝ăŚăŻăžăă¨ăăŚăďźç§ăŻç˘şäżĄăăŚăăžăăăďźă2ă¤ăŽćŚĺżľăŽéăŤăăŽăăăŞĺ¤§ăăŞéč¤ăăăăăăăăă§ă桡䚹ăćăăžăă ăăăăŁăŚăăăăăłăŤăĺŞĺ ăăŚć˝čąĄĺăĺé¤ăăĺż čŚăăăăžăă
ăăăăłăŤăŤă¤ăăŚä¸č¨ăŽăłăłăťăłăľăšăăăéăăăăăăŻă¤ăłăżăźăă§ăźăšăŽćĺŽă埡調ăăŚăăžăă ć˝čąĄĺăŻăăăŽĺĺ¨ăăŞăăăăăłăŤăŽăăă¤ăăĺŽčĄăăăăăŤä˝żç¨ăăăĺŻč˝ć§ăăăăžăă ăăăŻăăă彟ăăŽćăéčŚăŞç¨éă§ăăă¨ăăćĺłă§ăŻăăăžăăă ăăăăłăŤă¨ăŻä˝ăăćăăŚăă ăăăăăăăăć˝čąĄĺăăŠăŽăăăŤç°ăŞăăăăăăăăăăăăŽăŽăăă¤ăăćăăŚăă ăăă ç§ăŻăć˝čąĄĺăéĄĺĺŚă¨ĺăăăăă¤ăłăżăźăă§ăźăšăŤă¤ăăŚă§ăăă¨čăăăă¨ăŻăăăžăăă éĄĺçăŞćčťć§ă¸ăŽčŞçśăŞă˘ăăăźăăć¨ăŚăăă¨ăŻč˛ťç¨ăăăăăžăă
@JeffreySarnoff +1
ć°ĺ¤ăżă¤ăăŽé幤ăŤă¤ăăŚčăăŚăżăŚăă ăăă SignedăUnsignedăŞăŠăŽăăžăăžăŞć˝čąĄĺăŻăăăăăŽă¤ăłăżăźăă§ăźăšăŤăăŁăŚĺŽçžŠăăăžăăă ă珌ĺˇăŞăăăĺŽçžŠăăä¸éŁăŽăĄă˝ăăăŻăăăžăăă ăăăŻĺăŤé常ăŤäžżĺŠăŞĺŽŁč¨ă§ăă
ćŹĺ˝ăŤĺéĄăŻăăăăžăăă Signed
ăżă¤ăă¨Unsigned
ăżă¤ăăŽä¸ĄćšăĺăăĄă˝ăăăŽăťăăăăľăăźăăăŚăăĺ ´ĺăĺăă¤ăłăżăźăă§ă¤ăšă§2ă¤ăŽăăăăłăŤăä˝ćă§ăăžăă ăăă§ăăă¨ăżă¤ăă厣č¨Signed
ă§ăŻăŞăUnsigned
ăăŁăšăăăăŽăăăŤä˝żç¨ăăăă¨ăă§ăăžăďźĺăćŠč˝ăŽă¤ăžăăŽćšćłăŻç°ăŞăĺä˝ďźă ăăă§éčŚăŞăŽăŻăĺăăăăăłăŤăĺŽčŁ
ăăŚăăăă¨ăčć
ŽăăĺăŤăĺŽčŁ
ăăăĄă˝ăăăŤĺşăĽăăŚćéťçăŤăăăć¤ĺşăăăŽă§ăŻăŞăăć示çăŞĺŽŁč¨ăčŚćąăăăă¨ă§ăă
ăă ăă httpsďź //github.com/JuliaLang/julia/issues/6975#issuecomment -168499775ăŽăăăŤăćéťçăŤé˘éŁäťăăăăăăăăłăŤăćă¤ăă¨ăéčŚă§ăă
ăăăăłăŤăŻăĺźăłĺşăăă¨ăă§ăăé˘ć°ăĺŽçžŠă§ăăă ăă§ăŞăăäżćăăĺż čŚăŽăăăăăăăŁăďźćéťçăŤăăžăăŻăăˇăłă§ăăšăĺŻč˝ăŞćšćłă§ďźćć¸ĺăăăă¨ăă§ăăžăă ăăŽăăăŞďź
abs(x::Unsigned) == x
signbit(x::Unsigned) == false
-abs(x::Signed) <= 0
Signed
ă¨Unsigned
éăŽăăŽĺ¤é¨ăăčŚăăĺä˝ăŽéăăăăăŽĺşĺĽă彚çŤăŚăŚăăžăă
ĺ°ăŞăă¨ăçčŤçăŤăŻĺ¤é¨ăăăăăŤć¤č¨źă§ăăŞăăťăŠăć˝čąĄçăăŞĺăŽĺşĺĽăĺĺ¨ăăĺ ´ĺăćŁăăé¸ćăčĄăăŤăŻĺăŽĺŽčŁ
ăçĽăĺż
čŚăăăĺŻč˝ć§ăăăăžăă ăăăŻăçžĺ¨ăŽabstract
ă彚çŤă¤ĺŻč˝ć§ăăăĺ ´ćă§ăă ăăăŻăăăă䝣ć°çăăźăżĺăŽćšĺăŤé˛ăżăžăă
ăăăăłăŤă使ç¨ăăŚăżă¤ăăĺç´ăŤă°ăŤăźăĺăăĺż čŚăăŞăççąăŻăăăžăăăă¤ăžăăĺŽçžŠăăăăĄă˝ăăăĺż čŚă¨ăăžăăďźăăăŚăăăŞăăŻă使ç¨ăăăçžĺ¨ăŽăč¨č¨ă§ĺŻč˝ă§ăďźhttpsďź//github.com/JuliaLang/julia/issues/ 6975ďźissuecomment-161056795ďźă ďźăžăăăăăŻćéťçăŤĺŽçžŠăăăăăăăłăŤăŤĺš˛ć¸ăăŞăăă¨ăŤćł¨ćăăŚăă ăăăďź
čăăă¨(Un)signed
äžăďźç§ăŻăăăżă¤ăăćăŁăŚăăĺ ´ĺăç§ăŻä˝ăăăă ăăSigned
ăăä˝ăăăŽççąă§ĺĽăŽć˝čąĄĺăŽăľăăżă¤ăă§ăăŞăăă°ăŞăăžăăăďź ăăăŻä¸ĺŻč˝ă§ăă
@eschnett ďźçžćçšă§ăŻăć˝čąĄĺăŻăăŽăľăăżă¤ăăŽĺŽčŁ ă¨ăŻä˝ăŽé˘äżăăăăžăăă ăăăŻč°čŤăăăŚăăžăăďźďź4935ă
䝣ć°çăăźăżĺăŻăéŁçśçăŞćščŻăćŹčłŞçăŤćĺłăŽăăčŻăäžă§ăă
ĺéĄćłăŻăăŻăăăŤčŞçśăŤä¸ăăăăăăăăłăŤäťć§ăŽăĄăŠăłă¸ă¨ăăŚăăăć˝čąĄĺé幤ă¨ăăŚăăç´ćĽçăŤĺ˝šçŤăĄăžăă
č¤ć°ăŽć˝čąĄĺé幤ăŽăľăăżă¤ăă§ăăĺăćă¤ăă¨ăŤă¤ăăŚăŽćł¨ćăéčŚă§ăă ć˝čąĄĺăŽĺ¤éçśćżăŤäź´ăĺĺŠä¸ťçžŠçăŞĺăŻăăŞăăăăžăă
@ mauro3ăŻăăăăăŁăŚăăžăă ç§ăŻăčĺĽăăăĺ ąç¨ä˝ă¨ĺçăŽä˝ăăčăăŚăăžăăăăĺăˇăšăă ăäťăăŚă§ăŻăŞăăăżăăŤă¨ĺăăăăĺšççăŤĺŽčŁ ăăăžăăďźĺ ąç¨ä˝ăçžĺ¨ĺŽčŁ ăăăŚăăăăďźă ăăăŻĺćĺănull訹厚ĺăĺ ĺŤăăçžĺ¨ăŽć˝čąĄĺăăăĺšççăŤäťăŽăăă¤ăăŽăąăźăšăĺŚçă§ăăĺŻč˝ć§ăăăăžăă
ăă¨ăă°ăĺżĺčŚç´ ăćă¤ăżăăŤăŽăăăŤďź
DiscriminatedUnion{Int16, UInt32, Float64}
ăžăăŻĺĺäťăčŚç´ ă使ç¨ďź
discriminated_union MyType
i::Int16
u::UInt32
f::Float64
end
ç§ăč¨ăăăăŁăăŽăŻăć˝čąĄĺăŻăăŽăăăŞć§ćăJuliaăŤăăăăăčŻăćšćłăŽ1ă¤ă§ăăă¨ăăăă¨ă§ăă
ăăăăłăŤă使ç¨ăăŚăżă¤ăăĺç´ăŤă°ăŤăźăĺăăĺż čŚăăŞăççąăŻăăăžăăăă¤ăžăăĺŽçžŠăăăăĄă˝ăăăĺż čŚă¨ăăžăăďźăăăŚăăăŞăăŻă使ç¨ăăăçžĺ¨ăŽăč¨č¨ă§ĺŻč˝ă§ăďźďź6975ďźăłăĄăłăďźďźă ďźăžăăăăăŻćéťçăŤĺŽçžŠăăăăăăăłăŤăŤĺš˛ć¸ăăŞăăă¨ăŤćł¨ćăăŚăă ăăăďź
ăăăŠăźăăłăšăéćăăăŤăŻăăăăŤćł¨ćăăĺż čŚăăăă¨ćăăžăăĺ¤ăăŽäşşăĺĺăŤé ťçšăŤć¤č¨ăăŚăăăăăŤăŻčŚăăžăăă ăăŽäžă§ăŻăăłăłăă¤ăŠăăłăłăă¤ăŤćăŤé˘ć°ăé¸ćă§ăăăăăŤăéäťťćăŽăăźă¸ă§ăłăĺç´ăŤĺŽçžŠăăăăăăŤćăăăžăďźĺŽčĄćăŤćŁăăé˘ć°ăé¸ćăăăăăŤé˘ć°ăĺźăłĺşăăăăăłăłăă¤ăŠăé˘ć°ăć¤ćťăăăăăĺż čŚăŻăăăžăăďźăçľćăćąşĺŽăăăăďźă ĺäşşçăŤăŻăăżă°ă¨ăăŚč¤ć°ăŽć˝čąĄçăŞăçśćżăă使ç¨ăăćšăčŻă解湺çăŤăŞăă¨ćăăžăă
ĺż čŚăŞăăŞăăŻă¨ĺăˇăšăă ăŽçĽčăćĺ°éăŤćăăĺż čŚăăăă¨ćăăžăďźăăŻăăŤăŠăăăăăă¨ăŻă§ăăžăăăăăŻăăŽĺĽĺŚăŞăăăŻăŽăăăŤćăăžăăăăŻăă使ç¨ăăŚĺăˇăšăă ăćä˝ăăŚăăĺ ´ĺăŻă @ JeffBezansonăŽçľąĺă˝ăŞăĽăźăˇă§ăłăŻăăăŽĺéĄăăăéŠĺăŤäżŽćŁăăžăďźă
ďźUnďźsignedăŽäžăčăăă¨ăSignedĺă§ăăăăä˝ăăăŽççąă§ĺĽăŽć˝čąĄĺăŽăľăĺă§ăăăĺż čŚăăăĺ ´ĺăŻăŠăăăă°ăăă§ăăăăă ăăăŻä¸ĺŻč˝ă§ăă
č¤ć°ăŽć˝čąĄçśćżă
ç§ăŻăăŽăăšăŚăŽĺ°é˘ă䝼ĺăŤăŤăăźăăăă¨äżĄăăŚăăžăăăăŽäźčŠąăŻĺăćăăŚé˛ăă§ăăăăăŤčŚăăžăďźćŻĺăăçˇĺŻăŞĺă§ăăďźă ăłăźăăšăăăăăłăŤă使ăŁăĺéĄăĺĺžăăĺż čŚăăăă¨č¨ăăăă¨ćăăžăă ăăăŤăăăă˝ăŞăĽăźăˇă§ăłăăăç°ĄĺăŤĺ¤ćă§ăăăăăŤăŞăăžăă
çš°ăčżăăŤăŞăăžăă:)ăăăăłăŤăŻć§é çă§ăăăŽăŤĺŻžăăć˝čąĄĺăŻĺçŽä¸ăŽăăŽă§ăăăă¨ăçăăăŤćăĺşăăăăăŽă§ăăăăăłăŤă§ć˝čąĄĺăŽč¨ąĺŽšĺŻč˝ăŞăă¨ăłăłăźăăŁăłă°ăăĺŽéăŤćăäťăăă¨ăă§ăăŞăéăăăăăăç´äş¤ă¨ăăŚćąăč¨č¨ă弽ăżăžăă ďźăăăăăé˘éŁăăĺă塧ăżăŤä˝żç¨ăăăă¨ă§ďźă ăăĄăăăč¤ć°ăŽć˝čąĄçśćżăçćăăĺ ´ĺăŻăăăźăăšăă¤ăłăăĺžăăăžăă ăăăŻĺŻč˝ă ă¨ćăăžăăăăžă ĺĺă§ăŻăăăžăăă
@JeffBezanson ăé˘éŁäťăăăăĺăăŻă[a]ăăăăłăŤăŤé˘éŁäťăăăăĺ ˇä˝çăŞĺăă¨ăŻç°ăŞăăžăăďź
ăŻăăç§ăŻăă俥ăăŚăăžăă ăăăăłăŤăăĄă˝ăăăćĺŽăăăŽă¨ĺăăăăŤăăĺ¤ăăăżă¤ăă§ăăăăźă¨ĺ¤ăŽăă˘ăćĺŽăăăăăăłăŤăŽćčĄçăŞćĺłă§ăŽăé˘éŁäťăăăăăżă¤ăăăćĺłăăžăă ăă¨ăă°ăăăżă¤ăFooăŻeltype
ăăăĺ ´ĺăŻăłăłăăăăăăłăŤăŤĺžăăžăăăžăăŻăăżă¤ăFooăŻndims
ăăŠăĄăźăżă2ăŽĺ ´ĺăŻăăăŞăăŻăšăăăăłăŤăŤĺžăăžăăă
ć˝čąĄĺăŻĺçŽä¸ăŽăăŽă§ăăăăăăăłăŤăŻć§é çă§ăăă
ć˝čąĄĺăŻĺŽć§çă§ăăăăăăăłăŤăŻćŠč˝ăă
ć˝čąĄĺďźĺ¤éçśćżďźăŻăăăăăłăŤăĺŽčĄăăŚăăéăŤăŞăźăąăšăăŹăźăˇă§ăłăčĄăăžă
ä¸ćšăŽă¨ăłăłăźăăŁăłă°ăăăä¸ćšăŤăăŁăă¨ăăŚăăăăăăŤăĄăŻăăăăŤăĄăŻ..ăĺ ć°ă§ăăďźčĄăăďźă of JuliaăŻăăăăăłăŤăŽä¸čŹçăŤçŽçăŽăăćŚĺżľă¨ĺ¤çśćżĺŻč˝ăŞć˝čąĄĺďźä¸čŹĺăăăçŽçăŽćŚĺżľďźăŽä¸Ąćšăć確ăŤć示ăăĺż čŚăăăăžăă ă¸ăĽăŞă˘ăŤĺĽă ăŤćăăăăžăă严ćšăä¸ăă塧ĺŚăŞĺąéăăăĺ ´ĺăăăăŻä¸ćšăäťćšăäťăăŚčĄăăăăăăžăăŤăăăăĺŻč˝ć§ăéŤăă§ăă
@ mason-biallyďźă§ăŻăĺ¤éçśćżăčż˝ĺ ăăĺż čŚăăăăžăăďź ăăă§ăăăżă¤ăăŽä˝ćĺžăŤăšăźăăźăżă¤ăăčż˝ĺ ă§ăăŞăă¨ăăĺéĄăćŽăăžăďźč¨ąĺŻăăăŚăăĺ ´ĺăé¤ăďźă
@JeffBezanson ďźç´ç˛ăŤĺçŽä¸ăŽăăăăłăŤă訹ĺŻăăăă¨ă
@ mauro3äşĺžăšăźăăźăżă¤ăăŽćżĺ Ľă訹ĺŻăăăăŠăăăŽćąşĺŽăăĺ¤éçśćżăŤ
ăľăźăŻăŤăŽĺĽăŽăŠăŚăłăăéĺ§ăăĺ ´ĺăŻçłă訳ăăăžăăă ăăăăŻăŻé常ăŤč¤éă§ăăăă˝ăŞăĽăźăˇă§ăłăé常ăŤç°ĄĺăŤä˝żç¨ă§ăăăă¨ă確čŞăăĺż čŚăăăăžăă ăăăăŁăŚă䝼ä¸ăăŤăăźăăĺż čŚăăăăžăă
ďź6975ă§ćĺăŤććĄăăăăăŽăŻăĺžă§čŞŹćăăăăăăłăŤăŽă˘ă¤ăă˘ă¨ăŻăžăŁăăç°ăŞăăăăăăăăłăŤăăŠăŽăăăŤčŚăăăă誏ćăăăă税ăŽJEPăăăă¨ăăă§ăăăă
ćŁĺźăŞă¤ăłăżăźăă§ăźăšăĺŽçžŠăăçžĺ¨ăŽ0.4ďźăăŻăăŞăďźă使ç¨ăăŚć¤č¨źăăćšćłăŽäžă¨ăăŚăăăŁăšăăăăŻçžĺ¨ăgf.căŤĺ¤ć´ăĺ ăăăăŚăăŞăéăăăăŹă¤ăăšăżă¤ăŤăŽăăŁăšăăăăŤäžĺăăŚăăžăă ăăăŻć¤č¨źăŤçćăăăé˘ć°ă使ç¨ăăăăšăŚăŽĺč¨çŽăŻĺ犺éă§ĺŽčĄăăăžăă
ćäžăăăăżă¤ăăćĽäťăŽă¤ăăŹăźăżăźă§ăăăă¨ă確čŞăăĺż čŚăăăĺ ´ćăĺŽçžŠăăŚăăDSLăŽăŠăłăżă¤ă ăă§ăăŻă¨ăăŚăăă使ç¨ăĺ§ăăŚăăžăă
çžĺ¨ăăšăźăăźăżă¤ăăŽĺ¤éçśćżăăľăăźăăăŚăăžăă_superăăŁăźăŤăĺăŻăŠăłăżă¤ă ă§ăŻä˝żç¨ăăăăäťťćăŽćĺšăŞăˇăłăăŤăŤăăăă¨ăă§ăăžăă _superăżăăŤăŤäťăŽnĺăŽăżă¤ăăćĺŽă§ăăžăă
https://github.com/mdcfrancis/tc.jl/blob/master/test/runtests.jl
ăăă§ă httpsďź //github.com/JuliaLang/julia/issues/5#issuecomment -230645040ă§ăJuliaConăăăŽçšć§ăŤé˘ăăĺŻč˝ăŞć§ćăŤă¤ăăŚăŽăăŁăšăŤăăˇă§ăłăăăŠăăźă˘ăăăăăă¨ăććă
ăŹă¤ăťăšăăŁăźăŤăŻăĺ¤éăăŁăšăăăč¨čŞďźčŚĺĄďźăŽçšć§ăŤă¤ăăŚăăă¤ăăŽĺŞăăć´ĺŻăćăŁăŚăăžăă彟ăŽJuliaCon 2016ĺşčŞżčŹćźăĺç §ăăŚhttps ďź//youtu.be/EZD3Scuv02gă
ăăă¤ăăŽăă¤ăŠă¤ăďźäťŁć°ăăăăăŁăŽĺ¤§ăăŞçšć§ăˇăšăă ăçšć§ăĺŽčŁ ăăĺăŽçšć§ăăăăăŁăŽĺä˝ăăšăăăăăłăăăăĺŽčŁ ăăăˇăšăă ăŻĺ¤ĺč¤éăăăŚă彟ăŻäťăăç°ĄĺăŞăă¨ăăăă ăăă¨ăăăă¨ă§ăă
ăăăăłăŤăŽăăłă˝ăŤăăăźăłăłăă¤ăŠADăŚăźăšăąăźăšăŽć°ăăSwiftďź
https://gist.github.com/rxwei/30ba75ce092ab3b0dce4bde1fc2c9f1d
@timholyă¨@KenoăŻăăăŤčĺłăăăăăăăăžăăă ăžăŁăăć°ăăăłăłăăłăăăăăžă
ăăŽĺéĄăŽč¨č¨çŠşéăć˘ăă¨ăăăăŽăăŹăźăłăăźăˇă§ăłăŻćł¨çŽăŤĺ¤ăăă¨ćăăžăă
éçšĺŽăŽă˘ă¤ăă˘ăé˘éŁăăčćŻä˝ćĽă¸ăŽăŞăłăŻăŤă¤ăăŚčŠąăĺăăŤăŻă寞ĺżăăčŤčŠąăšăŹăăăéĺ§ăăăăăŤć稿ăăŚčŠąăĺăćšăăăă§ăăăă
éçăŤĺäťăăăăč¨čŞă§ăŽă¸ă§ăăŞăăŻăăă°ăŠăăłă°ăŽç 犜ă§ééăč°čŤăăăĺéĄăŽăťă¨ăăŠăăšăŚăŻăă¸ăĽăŞă˘ă¨ăŻçĄé˘äżă§ăăăă¨ăŤćł¨ćăăŚăă ăăă éçč¨čŞăŻăĺăˇăšăă éĺăăŞăăă¨ăéçăŤĺăă§ăăŻă§ăăä¸ćšă§ăĺż čŚăŞăłăźăăć¸ăăŽăŤĺĺăŞčĄ¨çžĺăćäžăăă¨ăăĺéĄăŤăťăźçŹĺ çăŤé˘ăăŁăŚăăžăă 襨çžĺăŤĺéĄăŻăŞăăéçăŞĺăă§ăăŻăĺż čŚăŞăăŽă§ăă¸ăĽăŞă˘ă§ăŻăăăŻćŹĺ˝ăŤéčŚă§ăŻăăăžăăă
ç§ăăĄăć°ăŤăăăŚăăăŽăŻăč¨čŞăĺçăŤć¤č¨źă§ăăć§é ĺăăăćšćłă§ăăăăłăŤăŽćĺž ăćć¸ĺă§ăăăăăŤăăăă¨ă§ăďźĺŻč˝ăŞĺ ´ĺăŻäşĺăŤďźă ç§ăăĄăŻăžăăäşşă ăçšć§ăŽăăăŞăăŽăŤć´žéŁă§ăăăăăŤăăăă¨ăŤăé˘ĺżăćăŁăŚăăžăă ăăăăćĽçśăăĺż čŚăăăăăŠăăăŻéăăăžăžă§ăă
çľčŤďźéçč¨čŞă§ăŽăăăăłăŤăŤé˘ăăĺŚčĄç 犜ăŻä¸čŹçăŤčĺłćˇąăăăăăăžăăăăJuliaăŽăłăłăăăšăă§ăŻăăžă彚ăŤçŤăĄăžăăă
ç§ăăĄăć°ăŤăăăŚăăăŽăŻăč¨čŞăĺçăŤć¤č¨źă§ăăć§é ĺăăăćšćłă§ăăăăłăŤăŽćĺž ăćć¸ĺă§ăăăăăŤăăăă¨ă§ăďźĺŻč˝ăŞĺ ´ĺăŻäşĺăŤďźă ç§ăăĄăŻăžăăäşşă ăçšć§ăŽăăăŞăăŽăŤć´žéŁă§ăăăăăŤăăăă¨ăŤăé˘ĺżăćăŁăŚăăžăă ăăăăćĽçśăăĺż čŚăăăăăŠăăăŻéăăăžăžă§ăă
é大ăŞĺ¤ć´ăĺéżăăăă¨ăŻĺĽă¨ăăŚăć˝čąĄĺăŽćé¤ă¨golangăšăżă¤ăŤăŽćéťçăŞă¤ăłăżăźăă§ăźăšăŽĺ°ĺ ĽăŻjuliaă§ĺŽçžĺŻč˝ă§ăăăăďź
ăăăăăăă§ăŻăăăžăăă
ăăŚăăăăŻăŠăŽăăăăłăŤ/çšć§ăăăšăŚăŤă¤ăăŚă§ăăăă§ăŻăăăžăăăďź ăăăăłăŤăćéťçăžăăŻć示çăŤăăĺż čŚăăăăăŠăăăŤă¤ăăŚăăăă¤ăăŽč°čŤăăăăžăăă
0.3ďź2014ďźäťĽéăçľé¨ä¸ăćéťăŽă¤ăłăżăźăă§ăźăšďźă¤ăžăăč¨čŞ/ăłăłăă¤ăŠăźăŤăăŁăŚĺźˇĺśăăăŞăďźăĺéĄăŞăćŠč˝ăăăă¨ă示ăăăŚăăă¨ćăăžăă ăžăăăăă¤ăăŽăăăąăźă¸ăăŠăŽăăăŤé˛ĺăăăăçŽăŽĺ˝ăăăŤăăŚăćéŤăŽă¤ăłăżăźăă§ăźăšăŻććŠçăŤéçşăăăĺžăŽćçšă§ăŽăżĺ˝˘ĺźĺďź=ćć¸ĺďźăăăă¨ćăăžăă
ăŠăăăăăăč¨čŞăŤăăŁăŚĺźˇĺśăăăă¤ăłăżăźăă§ăźăšăŽćŁĺźăŞčŞŹćăĺż čŚăăŠăăăŻăăăăžăăă ăăăăăăăćąşĺŽăăăŚăăéă揥ăŽăă¨ă弨ĺąăăăŽăŻç´ ć´ăăăăă¨ă§ăďźăăăĽăĄăłăăăăĽăźăăŞă˘ăŤăăăăłăšăżă¤ăŤăŹă¤ăă§ďźďź
ăă¤ăłăżăźăă§ăźăšăăŻĺŽäžĄă§čť˝éă§ăăăä¸éŁăŽĺăŤĺŻžăăŚćĺŽăŽĺä˝ăăăä¸éŁăŽé˘ć°ă§ăďźăŻăăĺăŻéŠĺăŞăŹăăŤăŽç˛ĺşŚă§ăă x::T
ĺ ´ĺă T
ă§ĺĺă§ăă x
ăă¤ăłăżăźăă§ăźăšăĺŽčŁ
ăăăăŠăăăćąşĺŽăăăăďźă ăăăăŁăŚăćĄĺźľĺŻč˝ăŞĺä˝ăĺăăăăăąăźă¸ăĺŽçžŠăăŚăăĺ ´ĺăŻăă¤ăłăżăźăă§ăźăšăćć¸ĺăăăă¨ăŻćŹĺ˝ăŤçăŤăăŞăŁăŚăăžăă
ă¤ăłăżăźăă§ă¤ăšăŻăăľăăżă¤ăăŽé˘äżă§č¨čż°ăăĺż čŚăŻăăăžăăă ĺ ąéăŽďźéčŚăŞďźăšăźăăźăżă¤ăăŽăŞăĺăŻăĺăă¤ăłăżăźăă§ăźăšăĺŽčŁ ăăĺ ´ĺăăăăžăă ăżă¤ăăŻč¤ć°ăŽă¤ăłăżăźăă§ăźăšăĺŽčŁ ă§ăăžăă
蝢é/ć§ćăŤăŻćéťçăŤă¤ăłăżăźăă§ăźăšăĺż čŚă§ăă ăăŠăăăźăŤčŚŞăŽăăšăŚăŽăĄă˝ăăăçśćżăăăćšćłăăŻé ťçšăŤçşçăă質ĺă§ăăăćŁăă質ĺă§ăŻăăăžăăă ĺŽç¨çăŞč§ŁćąşçăŻăăłă˘ă¤ăłăżăźăă§ă¤ăšăç¨ćăăăăăăŠăăăźăŤĺŽčŁ ăăăă¨ă§ăă
çšć§ăŻĺŽäžĄă§ăăăčŞçąăŤä˝żç¨ăăĺż
čŚăăăăžăă Base.IndexStyle
ăŻăĺŞăăć¨ćşçăŞäžă§ăă
ăăšăăăŠăŻăăŁăšăä˝ă§ăăăăăăăŞăăŽă§ă䝼ä¸ăŻć確ĺăŽćŠćľăĺăăă§ăăăďź
ă¤ăłăżăźăă§ă¤ăšăŤăŻăăŞăă¸ă§ăŻăăă¤ăłăżăźăă§ă¤ăšăĺŽčŁ
ăăăăŠăăăćąşĺŽăăăăăŽTables.istable
ăŞăŠăŽăŻă¨ăŞé˘ć°ăĺż
čŚă§ăăďź çşäżĄč
ăăăžăăžăŞäťŁćżă¤ăłăżăźăă§ă¤ăšăćä˝ă§ăăăăŠăźăŤăăăŻăŽăŞăšăăăăŠăĺż
čŚăăăĺ ´ĺăŻăăăăŻčŻăçżć
Łă ă¨ćăăžăă
docstringăŽă¤ăłăżăźăă§ăźăšăăăĽăĄăłăăŤćéŠăŞĺ ´ćăŻăŠăă§ăăďź ä¸č¨ăŽăŻă¨ăŞé˘ć°ă¨č¨ăăžăă
- ăŻăăăżă¤ăăŻéŠĺăŞăŹăăŤăŽç˛ĺşŚă§ă
ăŠăăăŚăăăŞăă¨ăŤďź ĺ垊ăŞăŠăăżă¤ăăŽä¸é¨ăŽĺ´é˘ăŻăďźăăŁăšăăăăŽçŽçă§ďźă¤ăłăżăźăă§ăźăšăŤçľăżčžźăžăăĺ ´ĺăăăăžăă ăăăăŞăă¨ăăłăźăăć¸ăç´ăăăä¸čŚăŞć§é ă課ăĺż čŚăăăăžăă
- ă¤ăłăżăźăă§ă¤ăšăŻăăľăăżă¤ăăŽé˘äżă§č¨čż°ăăĺż čŚăŻăăăžăăă
ăăăăăăăŻĺż čŚă§ăŻăăăžăăăăăăăŻăăčŻăă§ăăăăďź ĺ垊ĺŻč˝ăŞĺă§é˘ć°ăăŁăšăăăăčĄăăă¨ăă§ăăžăă ăżă¤ăŤĺăăăĺ垊ĺŻč˝ĺăŻăćéťçăŤăăăćşăăăšăă§ăŻăăăžăăăďź ă¤ăłăżăźăă§ăźăšă ăăć°ăŤăăăŽăŤăăŞăăŚăźăśăźăŻăăăăĺçŽĺăŽĺ¨ăăŤćçťăăĺż čŚăăăăŽă§ăăăăă
ĺşćŹçăŤć˝čąĄă¤ăłăżăźăă§ăźăšă¨ăăŚä˝żç¨ăăŚăăĺ ´ĺăĺçŽä¸ăŽăľăăżă¤ăăłă°ăŽăă¤ăłăăŻä˝ă§ăăďź çšć§ăŻăăăăç´°ăă埡ĺă§ăăăăăŤćăăăăŽă§ăăăä¸čŹĺăăĺż čŚăăăăžăă ăăăăŁăŚăĺăŻăťă¨ăăŠçšć§ăŽăăăŤčŚăăžăăăăăăăŽĺśéăĺéżăăăŤăŻçšć§ăĺż čŚă§ăďźéăĺć§ă§ăďźă
ĺşćŹçăŤć˝čąĄă¤ăłăżăźăă§ăźăšă¨ăăŚä˝żç¨ăăŚăăĺ ´ĺăĺçŽä¸ăŽăľăăżă¤ăăłă°ăŽăă¤ăłăăŻä˝ă§ăăďź
ăăŁăšăăăâĺçŽä¸ăŽăżă¤ăăŽăăŽăŤăăŁăšăăăă§ăăžăă ĺăă¤ăłăżăźăă§ăźăšăĺŽčŁ ăăŚăăăăŠăăăăăŁăšăăăăăĺż čŚăăŞăĺ ´ĺăŻăăăăŻăżă¤ăăłă°ăăă ăă§ăă ăăăŻăäşşă ăé常čăŞăçšć§ă使ç¨ăăçŽçă§ăăăăŽçšć§ă使ç¨ăăă¨ăä˝ăăăŽă¤ăłăżăźăă§ă¤ăšăĺŽčŁ ăăăŚăăăă¨ăĺćă¨ăăĺŽčŁ ăĺźăłĺşăăăăŤăăŁăšăăăă§ăăžăďźăă¨ăă°ăăć˘çĽăŽéˇăăďźă äşşă ăćăă§ăăăăăŤčŚăăăŽăŻăăăŽéćĽĺç §ăŽĺą¤ăĺéżăăăă¨ă§ăăăăăăŻĺăŞăäžżĺŠă§ăăăĺż čŚă§ăŻăŞăăăăŤćăăăžăă
ăŠăăăŚăăăŞăă¨ăŤďź ĺ垊ăŞăŠăăżă¤ăăŽä¸é¨ăŽĺ´é˘ăŻăďźăăŁăšăăăăŽçŽçă§ďźă¤ăłăżăźăă§ăźăšăŤçľăżčžźăžăăĺ ´ĺăăăăžăă ăăăăŞăă¨ăăłăźăăć¸ăç´ăăăä¸čŚăŞć§é ă課ăĺż čŚăăăăžăă
@tpappăŻăä˝ăăă¤ăłăżăźăă§ă¤ăšăĺŽčŁ ăăŚăăăăŠăăăĺ¤ćăăăăăŤĺż čŚăŞăŽăŻĺă ăă§ăăăăăšăŚăŽă¤ăłăżăźăă§ă¤ăšăĺé幤ă§čĄ¨ăăă¨ăă§ăăă¨ăŻéăăŞăă¨č¨ăŁăŚăăă¨ćăăžăă
MacroTools
ăŽforward
ă使ç¨ăăŚăăéăčăăŚăżăŚăă ăăă
ĺ¤ăăŽăĄă˝ăăă蝢éăăăŽăŻćă é˘ĺă§ă
<strong i="9">@forward</strong> Foo.x a b c d ...
Foo.x
ăŽăżă¤ăă¨ăĄă˝ăăăŽăŞăšăă使ç¨ăăŚăăŠăĄăă蝢éăăăăć¨ć¸Źă§ăăă¨ăăăăŠăă§ăăăăă ăăăŻä¸ç¨ŽăŽinheritance
ăăăć˘ĺăŽćŠč˝ďźăăŻă+çćăăăé˘ć°ďźă§ĺŽčŁ
ă§ăăžăăăă税ăŽă¤ăłăżăźăă§ăźăšăŽăăăŤăčŚăăžăăăč¨čŞăŤăŻäťăŤä˝ăĺż
čŚăăăžăăă
çśćżăăăăŽăŽăŞăšăăćăäťăăă¨ăă§ăăŞăăŁăăă¨ăŻçĽăŁăŚăăžăďźăăăéçclass
ă˘ăăŤăŽćčťć§ăä˝ăççąă§ăăăăžăďźăĺż
čŚăŞăŽăŻăăŽăăĄăŽăăă¤ăă ăă§ăăăăłă˘ćŠč˝ăŤăŻäžżĺŠă§ăďźăă¨ăă°ă誰ăăArray
ĺ¨ăăŤăŠăăăźďź AbstractArray
ăľăăżă¤ăďźăĺŽçžŠăăăĺ ´ĺăăťă¨ăăŠăŽé˘ć°ăŻčť˘éăăăžăďź
@datnamer ďźäťăŽäşşăćăăăŤăăŚăăăăăŤăă¤ăłăżăźăă§ăźăšăŻăżă¤ăăăăç´°ăăăăšăă§ăŻăăăžăăďźă¤ăžăăă¤ăłăżăźăă§ăźăšăŽĺŽčŁ ăŻăăżă¤ăăä¸ăăăăĺ ´ĺă
ăŻăŁăăăăŞăăŁăăăăăăžăăăăç§ăŽĺçăŽçŽçăŻăă¸ăĽăŞă˘ă§ĺ˝šçŤă¤ç¨ĺşŚăŽă¤ăłăżăźăă§ăźăšăăă§ăŤăăăăăăăŻčť˝éă§éŤéă§ăăăçć çłťăćçăăăŤă¤ăăŚćŽĺăăăă¨ăććăăăă¨ă§ăăă
ă¤ăłăżăźăă§ă¤ăšăč¨čż°ăăăăăŽćŁĺźăŞäťć§ăŻăIMOăŽäžĄĺ¤ăăťă¨ăăŠčż˝ĺ ăăžăăăăăăŻăăăăĽăĄăłăăä˝ćăăăăă¤ăăŽăĄă˝ăăă使ç¨ĺŻč˝ă§ăăăă¨ă確čŞăăă ăă§ăă ĺžč
ăŻă¤ăłăżăźăă§ăźăšăŽä¸é¨ă§ăăăäťăŽé¨ĺăŻăăăăŽăĄă˝ăăăŤăăŁăŚĺŽčŁ
ăăăăťăăłăăŁăŻăšă§ăďźăă¨ăă°ă A
ăé
ĺăŽĺ ´ĺă axes(A)
ăŻgetindex
ćĺšăŞĺş§ć¨ăŽçŻĺ˛ăćäžăăžă
ăăăăç§ăčŚăăăŽăŻ
ăžăăžăĺ¤ăăŽă¤ăłăżăźăă§ăźăšăŽăăăĽăĄăłăďźdocstringĺ ďźă
ć°ăăĺŽçžŠăăăĺăŽćçăăă¤ăłăżăźăă§ăźăšăŽćăăăŞă¨ăŠăźăăăŁăăăăăăăŽăăšăăšă¤ăźăďźăă¨ăă°ăĺ¤ăăŽT <: AbstractArray
ăŻeltype(::Type{T})
ă§ăŻăŞăeltype(::T)
ăĺŽčŁ
ăăžăďźă
@tpappäťăç§ăŤăŻçăŤăăŞăŁăŚăăžăăăăăă¨ăă
@StefanKarpinskiăăăăăăžăăă çšć§ăŻĺçŽçĺă§ăŻăăăžăăăďźĺłďźďźăăăă§ăăăŁăšăăăăŤä˝żç¨ă§ăăžăă
ç§ăŽăă¤ăłăăŻĺşćŹçăŤăăă§@tknoppă¨@ mauro3ăŤăăŁăŚä˝ăăăăăŽă§ăďź https ďź //discourse.julialang.org/t/why-does-julia-not-support-multiple-traits/5278/43ďźu = datnamer
çšć§ă¨ć˝čąĄçăŞăżă¤ăăłă°ă使ç¨ăăăă¨ăŤăăă2ă¤ăŽé常ăŤéĄäźźăăćŚĺżľă使ç¨ăăăă¨ăŤăăăăăăŤč¤éă§ćˇˇäšąăçăăžăă
äşşă ăćăă§ăăăăăŤčŚăăăŽăŻăăăŽéćĽĺç §ăŽĺą¤ăĺéżăăăă¨ă§ăăăăăăŻĺăŞăäžżĺŠă§ăăăĺż čŚă§ăŻăŞăăăăŤćăăăžăă
çšć§é幤ăŽăťăŻăˇă§ăłăŻăăżă¤ăăăŠăĄăźăżă使ç¨ăăŚăĺéĺă交塎çšăŞăŠăŤăăŁăŚă°ăŤăźăĺăăăă¨ăăŤç˘şĺŽăŤăăŁăšăăăă§ăăžăăďź čŠŚăăăă¨ăŻăăăžăăăăč¨čŞăľăăźăăĺż čŚăŞć°ăăăžăă ăżă¤ăăăĄă¤ăłă§ăŽIEĺźăŽĺéĄă
硨éďźĺéĄăŻăăăă§ä˝żç¨ăăăŚăăă¤ăłăżăźăă§ăźăšă¨çšć§ăŽćˇˇĺă§ăăŁăă¨ćăăžăă
ăăăăăăŤć稿ăăă ăă§ćĽ˝ăăăŽă§ăăConceptsăŻééăăŞăĺăĺ ĽăăăăŚăăăC ++ 20ăŽä¸é¨ăŤăŞăăăă§ăă é˘ç˝ăăăŽďź
https://herbsutter.com/2019/02/23/trip-report-winter-iso-c-standards-meeting-kona/
https://en.cppreference.com/w/cpp/language/constraints
çšć§ăŻăăŽĺéĄă解湺ăăăăăŽćŹĺ˝ăŤčŻăćšćłă ă¨ćăăžăăăăăŚčăŞăçšć§ăŻç˘şăăŤéˇăéăŽăăćŠăă§ăăžăăă ăă ăăJuliaăćŹĺ˝ăŤĺż čŚă¨ăăŚăăăŽăŻăçšć§ăŤĺąăăé˘ć°ăă°ăŤăźăĺăăćšćłă ă¨ćăăžăă ăăăŻăăăăĽăĄăłăăŽççąă ăă§ăŞăăăłăźăăŽčŞăżăăăăŤă彚çŤăĄăžăă ç§ăăăăžă§čŚăŚăăăă¨ăăăRustăŽăăăŞçšć§ć§ćăé˛ăăšăéă ă¨ćăăžăă
ăăăŻé常ăŤéčŚă ă¨ćăăžăăćăéčŚăŞăŚăźăšăąăźăšăŻăă¤ăăŹăźăżăŽă¤ăłăăăŻăšä˝ćă§ăă ăăăăăŞăăăăžăăăă¨ćăăăăăăŞă税éĄăŽć§ćăŽććĄă§ăă ăă§ăŤććĄăăăŚăăĺ ´ĺăŻă芍ăłăăžăďźéˇăăšăŹăă...ďźă
import Base: Generator
<strong i="6">@require</strong> getindex(AbstractArray, Vararg{Int})
function getindex(container::Generator, index...)
iterator = container.iter
if <strong i="7">@works</strong> getindex(iterator, index...)
container.f(getindex(iterator, index...))
else
<strong i="8">@interfaceerror</strong> getindex(iterator, index...)
end
end
ćăĺčăŤăŞăăłăĄăłă
éçšĺŽăŽă˘ă¤ăă˘ăé˘éŁăăčćŻä˝ćĽă¸ăŽăŞăłăŻăŤă¤ăăŚčŠąăĺăăŤăŻă寞ĺżăăčŤčŠąăšăŹăăăéĺ§ăăăăăŤć稿ăăŚčŠąăĺăćšăăăă§ăăăă
éçăŤĺäťăăăăč¨čŞă§ăŽă¸ă§ăăŞăăŻăăă°ăŠăăłă°ăŽç 犜ă§ééăč°čŤăăăĺéĄăŽăťă¨ăăŠăăšăŚăŻăă¸ăĽăŞă˘ă¨ăŻçĄé˘äżă§ăăăă¨ăŤćł¨ćăăŚăă ăăă éçč¨čŞăŻăĺăˇăšăă éĺăăŞăăă¨ăéçăŤĺăă§ăăŻă§ăăä¸ćšă§ăĺż čŚăŞăłăźăăć¸ăăŽăŤĺĺăŞčĄ¨çžĺăćäžăăă¨ăăĺéĄăŤăťăźçŹĺ çăŤé˘ăăŁăŚăăžăă 襨çžĺăŤĺéĄăŻăŞăăéçăŞĺăă§ăăŻăĺż čŚăŞăăŽă§ăă¸ăĽăŞă˘ă§ăŻăăăŻćŹĺ˝ăŤéčŚă§ăŻăăăžăăă
ç§ăăĄăć°ăŤăăăŚăăăŽăŻăč¨čŞăĺçăŤć¤č¨źă§ăăć§é ĺăăăćšćłă§ăăăăłăŤăŽćĺž ăćć¸ĺă§ăăăăăŤăăăă¨ă§ăďźĺŻč˝ăŞĺ ´ĺăŻäşĺăŤďźă ç§ăăĄăŻăžăăäşşă ăçšć§ăŽăăăŞăăŽăŤć´žéŁă§ăăăăăŤăăăă¨ăŤăé˘ĺżăćăŁăŚăăžăă ăăăăćĽçśăăĺż čŚăăăăăŠăăăŻéăăăžăžă§ăă
çľčŤďźéçč¨čŞă§ăŽăăăăłăŤăŤé˘ăăĺŚčĄç 犜ăŻä¸čŹçăŤčĺłćˇąăăăăăăžăăăăJuliaăŽăłăłăăăšăă§ăŻăăžă彚ăŤçŤăĄăžăăă