So `is` is a builtin anonymous function?

julia> Base.function_name(is)
:anonymous

Stefan perhaps we should add a builtins function to inference.jl? Indeed 
it's not obvious at all!

julia> function builtins()
           nams = filter(s -> isdefined(Base, s), names(Base, true, true))
           objs   = map(s -> Base.(s), nams)
           funcs = filter(x -> isa(x, Function) && isa(x.env, Symbol), objs)
           sort!(map(symbol, unique(funcs)))
       end
builtins (generic function with 1 method)

julia> builtins()
24-element Array{Any,1}:
 :_apply
 :_expr
 :applicable
 :apply_type
 :arraylen
 :arrayref
 :arrayset
 :arraysize
 :fieldtype
 :getfield
 :invoke
 :is
 :isa
 :isdefined
 :issubtype
 :kwcall
 :method_exists
 :nfields
 :setfield!
 :svec
 :throw
 :tuple
 :typeassert
 :typeof

julia>



El domingo, 27 de diciembre de 2015, 14:36:52 (UTC-6), Stefan Karpinski 
escribió:
>
> In Julia 0.4 anonymous functions are non-generic (in 0.5 they will, 
> however, be generic), so that's one way to create a non-generic function. 
> Aside from anonymous functions, the only non-generic are the builtins, 
> defined in C code using the add_builtin_func function:
>
> $ ack add_builtin_func src
> src/builtins.c
> 1196:static void add_builtin_func(const char *name, jl_fptr_t f)
> 1204:    add_builtin_func("is", jl_f_is);
> 1205:    add_builtin_func("typeof", jl_f_typeof);
> 1206:    add_builtin_func("sizeof", jl_f_sizeof);
> 1207:    add_builtin_func("issubtype", jl_f_subtype);
> 1208:    add_builtin_func("isa", jl_f_isa);
> 1209:    add_builtin_func("typeassert", jl_f_typeassert);
> 1210:    add_builtin_func("throw", jl_f_throw);
> 1211:    add_builtin_func("tuple", jl_f_tuple);
> 1214:    add_builtin_func("getfield",  jl_f_get_field);
> 1215:    add_builtin_func("setfield!",  jl_f_set_field);
> 1216:    add_builtin_func("fieldtype", jl_f_field_type);
> 1217:    add_builtin_func("nfields", jl_f_nfields);
> 1218:    add_builtin_func("isdefined", jl_f_isdefined);
> 1221:    add_builtin_func("arrayref", jl_f_arrayref);
> 1222:    add_builtin_func("arrayset", jl_f_arrayset);
> 1223:    add_builtin_func("arraysize", jl_f_arraysize);
> 1226:    add_builtin_func("applicable", jl_f_applicable);
> 1227:    add_builtin_func("invoke", jl_f_invoke);
> 1230:    add_builtin_func("apply_type", jl_f_instantiate_type);
> 1231:    add_builtin_func("_apply", jl_f_apply);
> 1232:    add_builtin_func("kwcall", jl_f_kwcall);
> 1233:    add_builtin_func("_expr", jl_f_new_expr);
> 1234:    add_builtin_func("svec", jl_f_svec);
>
>
> You can determine the same list from the Julia side by this not-so-obvious 
> code:
>
> julia> unique(filter(x->isa(x,Function) && isa(x.env,Symbol), 
> map(s->Base.(s), filter(s->isdefined(Base,s), names(Base, true, true)))))
> 22-element Array{Any,1}:
>  issubtype
>  is
>  _apply
>  _expr
>  applicable
>  apply_type
>  arrayref
>  arrayset
>  arraysize
>  fieldtype
>  getfield
>  invoke
>  isa
>  isdefined
>  kwcall
>  nfields
>  setfield!
>  svec
>  throw
>  tuple
>  typeassert
>  typeof
>
>
> On Sun, Dec 27, 2015 at 2:57 PM, Ray Toal <[email protected] <javascript:>
> > wrote:
>
>> In the REPL
>>
>>
>> *julia> **methods(is)*
>>
>> *ERROR: ArgumentError: argument is not a generic function*
>>
>> * in methods at reflection.jl:180*
>>
>>
>> and ditto for isa and typeof and perhaps others.
>>
>> Two quick questions:
>>
>>    - Is it possible for the programmer to create nongeneric functions in 
>>    Julia?
>>    - If not, is there a complete (at least up to the current release 
>>    version of the language) list of nongeneric functions?
>>
>>
>>
>>
>

Reply via email to