Comment puis-je accéder à une méthode d'une fonction Julia dans l'API C de Julia? Il y a des structs jl_method_instace_t
et jl_method_t
qui, je suppose, sont censés être des conteneurs pour les méthodes de Julia au niveau C, mais comment peut-on en construire un? Et comment peut-on obtenir une méthode spécifique d'une fonction abstraite.Obtenir la méthode Julia spécifique en C
Répondre
J'ai une réponse partielle. Vous pouvez obtenir une méthode spécifique en appelant la fonction "which".
julia> f = which(+, (Int, Int))
+{T<:Union{Int128,Int16,Int32,Int64,Int8,UInt128,UInt16,UInt32,UInt64,UInt8}}(x::T, y::T) at int.jl:32
julia> typeof(f)
Method
Je ne sais pas comment « Unbox » (pas sûr de la terminologie), la jl_value_t correspondante * pour f du côté C pour obtenir un jl_method_t *. Mais je pense que cela vous mène à mi-chemin.
Je suppose que c'est le mieux que vous puissiez faire, car les spécialisations semblent n'exister que si la fonction a déjà été appelée (et donc Jit compilée), pour cet ensemble d'arguments.
Je ne suis pas sûr de ce qu'est un jl_method_instance_t.
Apparemment, dans Julia 0.6, on peut créer un 'jl_method_instance_t' en utilisant' jl_get_specialized'. Malheureusement, cette fonction n'est pas exposée dans la bibliothèque Julia. – sebigu
C ne prend pas en charge _methods_. Et _functions_ n'ont pas de _methods_. – Olaf
La documentation de Julia contient un chapitre sur l'intégration de Julia dans C, c'est-à-dire l'appel des fonctions de Julia à partir de C, mais elle ne fait aucune mention de 'jl_method_instance_t' ni de' jl_method_t'. –
Il y a une fonction jl_invoke exportée dans julia.h qui devrait être utilisée pour invoquer les méthodes Julia, étant donné un tableau de jl_value_t *. Mais il ne semble pas y avoir d'interface pour construire jl_method_instance_t * dans Julia même, à partir des fonctions génériques de Julia (avec une liste de types). Donc, je suis sûr qu'il demande comment générer jl_method_instance_t de Julia afin qu'ils puissent être jl_invoked sur le côté C. Ceci n'est évidemment pas documenté, actuellement, d'où la question. – Bill