Методы (methods)
Irnix воспринимает любой исполняемый файл объекта как метод. Например, возьмем object из предыдущего примера и добавим файл method:
~/.local/share/irnix
└── object
└── method
С содержимым:
#!/bin/python
print("Hello World!")
Который должен быть исполняемым:
chmod +x ~/.local/share/irnix/object/method
drwxr-xr-x ~/.local/share/irnix
drwxr-xr-x └── object
.rwxr-xr-x └── method
Теперь метод можно вызвать командой execute (или просто e), передав имя относительно namespace (в данном случае ~/.local/share/irnix):
irnix e object.method
Irnix запустит исполняемый файл через системный вызов execve. Это означает, что метод может быть как и бинарным файлом, так и скриптом, что начинается с "shebang". Если же файл не начинается с #! и не является бинарным, но при этом вы запускаете irnix в bash или zsh, то скрипт попытается выполнится как bash скрипт.
По сути это означает, что у одного объекта все методы могут быть написанными на разных языках программирования: один на Ruby, другой на Python или Bash, а третий вообще бинарный файл, что скомпилировал компилятор Rust. Это позволяет объединить разные методы в одном объекте, вызывать их из одного места, и для каждой задачи выбирать самый удобный язык программирования, при этом следуя философии UNIX ("Пишите программы, которые делают что-то одно и делают это хорошо").
Передача аргументов
Все что идет после разделителя -- Irnix воспринимает как аргументы, которые необходимо передать методу во время вызова. Возьмем в качестве примера method из главы Быстрый старт:
irnix e object.method -- World!
В этом случае Irnix передаст все аргументы после разделителя -- ровно в таком виде, в каком они были переданы.
Вы также можете передавать флаги, например:
irnix e object.method -- --flag value -f value arg1 arg2 --flag2=value
Именования методов
Названия методов (файлов) не могут содержать .. Они могут начинаться с чисел и содержать _, - или содержать пробелы.
Также файлы не должны иметь расширения (например .sh или .py). Это связано с тем, как Irnix парсит вызов метода. Если попытаться вызвать такой метод: object.method.py, то Irnix будет считать, что method это объект внутри объекта object, что имеет метод py. Irnix просто не найдет такого объекта и выведет сообщение об ошибке. Но это можно обойти, просто создав ссылку на файл. Подробнее про то, как можно использовать ссылки в связке с Irnix будет рассказано в главе "Работа с ссылками"
Детали вызова
Во время вызова Irnix не анализирует весь объект целиком, а только вызываемый метод. Например в случае вызова object.subobject.method Irnix будет работать только со следующими файлами (в данном примере со стандартным namespace, так как фактический путь к методу зависит от того, какой namespace указан в переменных окружения или в флагах):
~/.local/share/irnix/object/subobject/.self(если существует)~/.local/share/irnix/object/subobject/method
Это означает, что Irnix делает проверки только в рамках одного вызова.