Far Manager стал опенсурсным. Это хорошо. Хорошо лично для меня, как давно сменившего платформу с винды. В самой винде я ни о чем не скучаю, а вот некоторые инструменты Far хотел бы портировать для личных целей. Благодаря BSD лицензии теперь есть шанс, но он всё же слишком мизерен, т.к. я не знаю С++ (только Python) и с трудом ориентируюсь в исходниках. Но и то и другое поправимо. Кроме того, я не замахиваюсь на то, чтобы портировать весь Far. Есть только один действительно серьёзный вопрос - насколько тесно различная функциональность Far связана?
Для примера.
Я хочу использовать часть Far, которая делает рекурсивный поиск по файлам. Что мне нужно для того, чтобы заюзать эти функции? Допустим, конечная цель, это консольная утилита, которая ждёт ввода маски, и выводит список найденных файлов на экран. Проблемы, которые я вижу:
1. Поиск идёт в отдельном процессе
2. Функции поиска выводят нечто куда-то
По первому пункту, насколько сложно запустить функцию поиска в фоне или в основном процессе? Т.е. если функции в общем-то по барабану как она запускается, то разделение хорошее и функция портируема. Если разделение недостаточное, то насколько сложно передавать сигналы между процессами?
По второму пункту, на какие ещё абстракции завязана функция поиска файлов? В каком виде отдаётся результат? Возможно ли скомпилировать программу с этой функцией, заткнув системные виндовые вызовы аналогичными из моей системы? Возможно ли сгенерировать binding (например, с помощью shiboken), чтобы получить возможность дёргать эту функцию через Python.
Я на самом деле не уверен, что это вообще мне нужно. Возможно, только в академических целях. Но такая модульность имеет одно полезное свойство - она даёт возможность покрыть API тестами. Более того, тестировать части по отдельности мелкими прожками (в т.ч. написанными на Python) без перекомпиляции.
Модульность исходников для использования отдельных частей
Модульность исходников для использования отдельных частей
Я тоже обожаю "академические цели", поэтому прокомментирую, пусть даже и через десятилетие ![Smile :)](./images/smilies/smile.gif)
Насколько знаю я, порывшись в исходниках ФАРа.
Экспортировать внутреннюю кухню (в DLL) относительно легко, но НЕБЫСТРО.
2.) А есть другие задачи гораздо приоритетнее.
3.) Если кому-то это сильно надо, тот может написать плагин который будет делать automation с выводом в любой требуемый формат.
Плагин может быть написан уже на Питоне, ДотНете, Паскале, Луа, С++.
Насчет самой целесообразности.
Затрудняюсь представить себе что в ФАРе может представлять ценность само по себе вне контекста самого ФАРа.
Поиск файлов например не представляет собой ничего замечательного по сравнению с кучей других утилитит.
![Smile :)](./images/smilies/smile.gif)
Насколько знаю я, порывшись в исходниках ФАРа.
Экспортировать внутреннюю кухню (в DLL) относительно легко, но НЕБЫСТРО.
2.) А есть другие задачи гораздо приоритетнее.
3.) Если кому-то это сильно надо, тот может написать плагин который будет делать automation с выводом в любой требуемый формат.
Плагин может быть написан уже на Питоне, ДотНете, Паскале, Луа, С++.
Насчет самой целесообразности.
Затрудняюсь представить себе что в ФАРе может представлять ценность само по себе вне контекста самого ФАРа.
Поиск файлов например не представляет собой ничего замечательного по сравнению с кучей других утилитит.
Модульность исходников для использования отдельных частей
Способ организации кода в виде независимых частей - совсем не академическая, а практическая цель. Задача здесь уменьшить количество контекста требуемого для определённой функциональности. Например, поиск можеет быть заменён запусков fd и передачей результата в панель. Здесь интересно, какие возможности отвалятся, какие экстра вызовы делает Far при нативном поиске, насколько просядет производительность, время ответа.
Модульность исходников для использования отдельных частей
techie, в прынципе могу согласится, озвученные цели имеют смысл.
но в чем смысл говорить об этих или других благородных пожеланиях,
когда, например, панельный фильтр можно только через UI задaвать?![Facepalm :facepalm:](./images/smilies/facepalm.gif)
но в чем смысл говорить об этих или других благородных пожеланиях,
когда, например, панельный фильтр можно только через UI задaвать?
![Facepalm :facepalm:](./images/smilies/facepalm.gif)