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)