Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Методы (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 делает проверки только в рамках одного вызова.