Handling Operating System Variation

عند كتابة تطبيقات أو مكتبات متعددة المنصات، غالبًا ما يكون من الضروري السماح بالاختلافات بين أنظمة التشغيل. يمكن استخدام المتغير Sys.KERNEL للتعامل مع مثل هذه الحالات. هناك العديد من الدوال في وحدة Sys تهدف إلى تسهيل ذلك، مثل isunix، islinux، isapple، isbsd، isfreebsd، و iswindows. يمكن استخدامها على النحو التالي:

if Sys.iswindows()
    windows_specific_thing(a)
end

لاحظ أن islinux و isapple و isfreebsd هي مجموعات فرعية متبادلة الحصرية من isunix. بالإضافة إلى ذلك، هناك ماكرو @static الذي يجعل من الممكن استخدام هذه الدوال لإخفاء الشيفرة غير الصالحة بشكل شرطي، كما هو موضح في الأمثلة التالية.

كتل بسيطة:

ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)

كتل معقدة:

@static if Sys.islinux()
    linux_specific_thing(a)
elseif Sys.isapple()
    apple_specific_thing(a)
else
    generic_thing(a)
end

عند تداخل الشروط، يجب تكرار @static لكل مستوى (الأقواس اختيارية، ولكن يُوصى بها من أجل الوضوح):

@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)