Size: a a a

Язык программирования Julia / Julia programming language

2020 October 01

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
так он и так подставится, или я шо-то не понял )
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
foo(a, :: Nothing) = foo(a)
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
Ага, только я думал это автоматом делается как-то
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
можно доопределить наверное Base.string(x :: Nothing) = ""
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
и там первой строчкой прописать преобразование b в String )
источник
2020 October 04

AK

Alexandr Krotov in Язык программирования Julia / Julia programming language
В Джулии я же не могу в функцию передать ссылку на объект? Я могу изменить переменную только через присваивание?
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
По ссылкам передается только mutable: https://docs.julialang.org/en/v1/manual/types/#Mutable-Composite-Types
Для immutable можно делать обертку Ref.
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
Если надо копировать immutable с одним измененным полем, есть пакет Setfield.jl
источник
2020 October 05

V

Vladimir in Язык программирования Julia / Julia programming language
Добрый!
Как-то можно сделать type-stable функцию:
function f(x)
 #code...
 f2(Val(Symbol(x)))
end
Где:
function f2(::Val{:somesymbol})
#code...
end
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
Там есть неопределенность с типом в рантайме, т.к. непонятно, что вы туда подставите, но в
@code_typed
это не выглядит как нестабильный тип:
%4  = invoke Main.Val(%3::Symbol)::Val{_A} where _A
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
function f(x::String)
 f2(Val(Symbol(x)))
end

f2(::Val) = 0
f2(::Val{:somesymbol}) = 1
f2(::Val{:othersymbol}) = 2

@code_typed f("somesymbol")
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
выдает:
CodeInfo(
1 ─ %1  = $(Expr(:foreigncall, :(:jl_string_ptr), Ptr{UInt8}, svec(Any), 0, :(:ccall), :(x)))::Ptr{UInt8}
│   %2  = Core.sizeof(x)::Int64
│   %3  = $(Expr(:foreigncall, :(:jl_symbol_n), Ref{Symbol}, svec(Ptr{UInt8}, Int64), 0, :(:ccall), :(%1), :(%2), :(%2), :(%1)))::Symbol
│   %4  = invoke Main.Val(%3::Symbol)::Val{_A} where _A
│   %5  = (isa)(%4, Val{:othersymbol})::Bool
└──       goto #3 if not %5
2 ─       goto #6
3 ─ %8  = (isa)(%4, Val{:somesymbol})::Bool
└──       goto #5 if not %8
4 ─       goto #6
5 ─ %11 = Main.f2(%4)::Int64
└──       goto #6
6 ┄ %13 = φ (#2 => 2, #4 => 1, #5 => %11)::Int64
└──       return %13
) => Int64
источник

V

Vladimir in Язык программирования Julia / Julia programming language
вроде разобрался немного... если использовать Val{Symbol(x)}() вместо Val(Symbol(x)), то вроде как получается стабильно... но @code_warntype все равно выделяет красным это место... хотя если просто вызвать @code_warntype  Val{:somesymbol}(), то проблем нет...
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
@code_warntype  в обоих случаях выделяет красным
источник

V

Vladimir in Язык программирования Julia / Julia programming language
julia>  @code_warntype  Val{:somesymbol}()
Variables
 #self#::Core.Compiler.Const(Val{:somesymbol}, false)

Body::Val{:somesymbol}
1 ─ %1 = Core.apply_type(Base.Val, $(Expr(:static_parameter, 1)))::Core.Compiler.Const(Val{:somesymbol}, false)
│   %2 = %new(%1)::Core.Compiler.Const(Val{:somesymbol}(), false)
└──      return %2

julia>
источник

V

Vladimir in Язык программирования Julia / Julia programming language
Синий... если обернуть - красный...
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
в функции надо оборачивать
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
тогда выделяет красным
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
так-то он выдает константу из глобального воркспейса
источник

V

Vladimir in Язык программирования Julia / Julia programming language
просто julia>  @code_warntype  Val(:sym)
Variables
 #self#::Type{Val}
 x::Symbol

Body::Val{_A} where _A
1 ─      nothing
│   %2 = Core.apply_type(Base.Val, x)::Type{Val{_A}} where _A
│   %3 = (%2)()::Val{_A} where _A
└──      return %3
красный и так и эдак...
источник