Talking to the compiler (the :meta mechanism)
في بعض الظروف، قد يرغب المرء في تقديم تلميحات أو تعليمات تفيد بأن كتلة معينة من الشيفرة تحتوي على خصائص خاصة: قد ترغب دائمًا في تضمينها، أو قد ترغب في تفعيل تمريرات تحسين المترجم الخاصة. بدءًا من الإصدار 0.4، تمتلك جوليا تقليدًا يمكن من خلاله وضع هذه التعليمات داخل تعبير :meta، والذي يكون عادةً (ولكن ليس بالضرورة) أول تعبير في جسم دالة.
تُنشأ تعبيرات :meta باستخدام الماكرو. كمثال، اعتبر تنفيذ ماكرو @inline:
macro inline(ex)
esc(isa(ex, Expr) ? pushmeta!(ex, :inline) : ex)
endهنا، يُتوقع أن يكون ex تعبيرًا يُعرّف دالة. عبارة مثل هذه:
@inline function myfunction(x)
x*(x+3)
endيتم تحويله إلى تعبير مثل هذا:
quote
function myfunction(x)
Expr(:meta, :inline)
x*(x+3)
end
endBase.pushmeta!(ex, tag::Union{Symbol,Expr}) يضيف :tag إلى نهاية تعبير :meta، مما ينشئ تعبير :meta جديد إذا لزم الأمر.
لاستخدام البيانات الوصفية، يجب عليك تحليل تعبيرات :meta هذه. إذا كان يمكن تنفيذ تطبيقك داخل جوليا، فإن Base.popmeta! مفيدة جدًا: Base.popmeta!(body, :symbol) ستقوم بفحص تعبير body الخاص بالدالة (واحد بدون توقيع الدالة) للعثور على أول تعبير :meta يحتوي على :symbol، واستخراج أي معطيات، وإرجاع مجموعة (found::Bool, args::Array{Any}). إذا لم تحتوي البيانات الوصفية على أي معطيات، أو لم يتم العثور على :symbol، ستكون مصفوفة args فارغة.
لم يتم توفير بنية تحتية ملائمة لتحليل تعبيرات :meta من C++.