Как стать автором
Обновить

Программируем «на уровне операционной системы»

Время на прочтение2 мин
Количество просмотров7.5K
b.s Сразу отбросим вопросы производительности, безопасности и оптимальности. Для данной зарисовки они не важны.

Последние топики про программирование на языке bat файлов напомнили вот такую концепцию. Оно конечно написано в шутку, но почему бы и нет. Может у кого-то в голове что-то и перевернет. ;)

Не претендую на авторство — наверняка такая идея уже кем-то была придумана ранее.

Итак. Возьмем для примера программку на языке C. Пишем, компилируем, получаем черный ящик бинарного кода. Он выполняется в отдельной области памяти и недоступен для простого обывателя (ну разве что вооруженного дебагером).

Для программки на скриптовом языке примерно то же самое — хоть исходники и под рукой, но что происходит в памяти интерпретатора — темный лес.

А не вывернуть ли все это наружу? На уровень доступный пользователю ОС. На уровень файловой системы. :)

Пусть это будет объектно ориентированная программа.
Создаем каталог:
.../bin/test_prg/
Объект станет вложенным каталогом:
.../bin/test_prg/converter/
Его свойства окажутся просто обычными файлами:
.../bin/test_prg/converter/count.txt
.../bin/test_prg/converter/format.txt
Его методы будут мелкими программками:
.../bin/test_prg/converter/init.bin
.../bin/test_prg/converter/to_png.sh

Каждый метод будет выполнять свою мелкую задачу и завершаться. На вход будет получать перечень файлов-аргументов в командной строке, а результатом будет созданный файл. Что будет происходить внутри метода — пока не важно — оставим черным ящиком. Важно что он будет модифицировать свойства объекта (файлики) по мере необходимости.

Пример запуска метода из другого объекта:
текущий каталог: .../bin/test_prj/image/
в свойство .../bin/test_prj/image/new.jpg сохраняем исходное изображение
запускаем метод ../convert/to_png.sh new.jpg
получаем файл со стандартным названием нужного типа «return.png» в текущем каталоге и
копируем в свойство:
.../bin/test_prj/image/done.png

Как вариант, можно просто использовать перенаправление stdout ../convert/to_png.sh new.jpg >done.png .

Или проще пример:
../math/add a.txt b.txt >c.txt

Что получилось? Теперь внутренности «программки» становятся видны без всяких спец инструментов. Она становится жителем ОС состоящим из ее элементов, а не чем-то инородным, присосавшимся к ней через пуповину API. :))

Что-то вроде этого было заложено в механизм переменных окружения. И слегка напоминает реализацию CGI.

Есть ли в этой шутке какая либо польза? Кто знает.
Из плюсов — такой подход сохраняет состояние программы при перезагрузке ОС. Остается лишь запустить нужный метод по событию.
Ну и как простое наглядное пособие для изучающих программирование тоже может пригодиться.

ps. Protected методы могут будут защищены средствами прав доступа самой ОС. А объекты принадлежать отдельным пользователям ОС (методы запускаются от их имени). Хотя для данной иллюстрации можно обойтись и без этого.
Теги:
Хабы:
+6
Комментарии14

Публикации