LINUX.ORG.RU
ФорумTalks

Бинаризация всея Линукса

 ,


0

0

Копипаста с опеннета:

Раздумывая над способами модернизации командной строки UNIX, Александр Ларсон (Alexander Larsson), активный разработчик GNOME и мантейнер таких проектов, как Nautilus, Gnome-vfs и Dia, предложил в своем блоге новый способ объединения команд с помощью пайпов, основная идея которого заключается в передаче через канал не простых потоков неструктурированных данных, а объектов, представленных в бинарной форме. По словам Александра, его идея может сделать командный интерфейс более гибким, но не таким переусложненным как Microsoft PowerShell.

В качестве основы для представления объектов Александр предложил использовать тип данных GVariants из библиотеки Glib, используемой также в GTK+ и GNOME. Он реализовал несколько утилит, повторяющих функциональность стандартных UNIX-команд ps, sort, head и других, которые принимают на вход и выдают на выходе объекты типа GVariants, причем в случае, если вывод осуществляется в терминал или принимающая команда не поддерживает на входе объекты, данные будут переданы в текстовой форме. Например, вывод его версии ps в терминал будет выглядеть так:

$ dps
   <{'pid': <uint32 1>, 'ppid': <uint32 0>, 'euid': <uint32 0>,  'user': <'root'>,...
   <{'pid': <uint32 2>, 'ppid': <uint32 0>, 'euid': <uint32 0>,  'user': <'root'>,...
   ...

Применив к этому выводу другие утилиты можно легко отсортировать объекты по необходимым полям и выполнить их фильтрацию на основе тех или иных полей:

$ dps | dfilter euid \< 1000 | dsort rss
   <{'pid': <uint32 1>, 'ppid': <uint32 0>, 'euid': <uint32 0>, 'user': <'root'>,
   <{'pid': <uint32 769>, 'ppid': <uint32 745>, 'euid': <uint32 0>, 'user': <'root'>,
   ...

В конце концов, можно использовать специальные утилиты для вывода данных удобочитаемом виде:

dps | dfilter euid \< 1000 | dsort rss | dhead 4 | dtable pid user rss vsize cmdline
   pid     user      rss    vsize  cmdline
     1   'root'    24408    61488 '/usr/lib/systemd/systemd'
   769   'root'    16028   108000 '/usr/bin/Xorg :0 -background none -logverbose 7 -seat seat0 -nolisten tcp vt1'
   608   'root'    15076   255312 '/usr/bin/python /usr/sbin/firewalld --nofork'
   747   'root'     8276   452604 '/usr/sbin/libvirtd'

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

Я вот еще опасаюсь, что все старое сломают, а новое будет глючить и его будут долго чинить.

После появления NetworkManager я пару лет вынужден был отключать его и править все ручками, потому что он не работал как надо.

grondek
()
Ответ на: комментарий от Kindly_Cat

А кто тебя заставляет использовать только сабжевые утилиты?

Лично мне в embedded гораздо проще обрабатывать структурированный бинарник, нежели очередной высер текста. Особенно если надо это делать на С. А при том, что внутренности этого embedded никто не видит кроме разработчиков да особо упоротых личностей, которым надо от железки странного. Но и те и другие знают зачем это надо.

Для десктопов вообще не нужно, для серверов спорно.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от geekless

ls и прочие ps будут выдавать структурированную информацию вместо текста - для указания этого хватит одной опции.

И будут еще большими комбайнами, ага.

За счет способности выдавать GVariant? Если так, то да, будут.

В примере из поста мы именно компоненты и видим.

Лолшто? Я прочитал статью и не обнаружил в ней никаких компонентов.

Кстати, для примера - набросай план распиливания ls на компоненты :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Нет. Как раз таки это говно полное. Потому что убогий key-value без средства определения и валидации формата.

Подробнее с этого места. Какая тебе валидация формата нужна для передачи списков и строк?

geekless ★★
()
Ответ на: комментарий от MahMahoritos

разработчикам нечем заняться

разработчикам есть чем заняться, но они предпочитают заниматься велосипедостроительством и переписыванием того, что и так работает (может не самым идеальным образом, но работает)

lazyklimm ★★★★★
()

Идея нормальная, вот только бы оно еще определяло само, куда выводит...

debianist
()
Ответ на: комментарий от tailgunner

Про методы - логика норкомана, которую, слава ТНБ, слишком трудно реализовать.

Не так уж и трудно, была бы типизация.

Orlangoor ★★★★★
()
Ответ на: комментарий от thunar

а это линакс-way: stable api is nonsense. жрите.

Линакс-вей - это школьнеги, которые не читают дальше заголовка. Или, в твоем случае, дальше имени файла в Documentation/.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Если на улице будет стоять человек и вещать, что он пророк и мессия, ты начнешь с ним спорить или пройдешь мимо? Или толпу вокруг него разгонять и доказывать всем, что они не правы?

Это при допущении, что чувак ни к кому не лезет, ни к кому не цепляется, а толпа сама собралась, поверившая речам

MahMahoritos ★★★
()
Ответ на: комментарий от PolarFox

Ты и сейчас их хрен прочтёшь

Вот только не надо ля-ля. Вывод у ps замечательно читается глазами с монитора.

trex6 ★★★★★
()
Ответ на: комментарий от MahMahoritos

Они пишут, что хотят

Лучше бы они писали то, что могут. Или хотя бы то, что собирались. Вот казалось бы - ну являешься ты «активным разработчиком Гнома» - ну так и разрабатывай Гном. Чини баги, разгребай фичреквесты, там работы еще на сто лет. Дык ведь нет, каналы ему жить мешают.

thesis ★★★★★
()
Ответ на: комментарий от Orlangoor

Про методы - логика норкомана, которую, слава ТНБ, слишком трудно реализовать.

Не так уж и трудно, была бы типизация.

Ты реально норкоман. Хоть попробуй подумать, каким образом реализовать исполняемый код этих методов.

tailgunner ★★★★★
()
Ответ на: комментарий от PolarFox

вообще достаточно стандартизовать формат обычного текстового вывода, привычных команд. Достаточно чтобы шапка и итог выхлопа отделялась от записей, поля в записях разделялись разделителем, а спецсимволы маскировались единообразно.

Если брать исторически сложившийся \v как разделитель групп, \n записей, а \t полей - то всё и так гладко, без ОО :) И читаемо и автоматизируемо и правок немного. Просто в процессе развития unix утилит на эту идею подзабили все.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MahMahoritos

Если на улице будет стоять человек и вещать, что он пророк и мессия, ты начнешь с ним спорить или пройдешь мимо?

Если на улице будет стоить чувак и говорить, что он посланец цивилизации Альфа Центавра и с целью улучшения человечества сейчас подсыплет волшебного порошка в водопровод, я таки постараюсь, чтобы он этого не сделал.

tailgunner ★★★★★
()
Ответ на: комментарий от geekless

И будут еще большими комбайнами, ага.

Да уж, способность гнутого ls выдавать цветной текст, текст столбиками по размеру терминала, текст с дополнительной информацией по файлам, без дополнительной информации, игнорируя точка-файлы, не игнорируя, не показывать . и .. или показывать их, выводить С-стайл экранирование для спецсимволов, выбрать в каких единицах показывать размер файла, вывести даты в разных форматах и куча всего ещё, что можно найти в man ls, уж точно не делает его комбайном.

PolarFox ★★★★★
()
Ответ на: комментарий от tailgunner

Лолшто? Я прочитал статью и не обнаружил в ней никаких компонентов.

dfilter
dsort
dhead
dtable

А, и статью я не читал. :-D

Кстати, для примера - набросай план распиливания ls на компоненты :)

Выкидываем всё, оставляем вывод информации о файлах в виде списка списков значений аттрибутов. Это и есть то, что должен делать ls. Остальное в нём — комбайностроение.

geekless ★★
()
Ответ на: комментарий от geekless

Потому что убогий key-value без средства определения и валидации формата.

Подробнее с этого места. Какая тебе валидация формата нужна для передачи списков и строк?

Мне не нужна передача списков и строк - она у меня уже есть.

tailgunner ★★★★★
()
Ответ на: комментарий от lazyklimm

Если это их хобби, то пусть хоть вприсядку дрочат (в пределах закона). Если же работа, то пусть работодатель сам решает, что с таким работником делать.

MahMahoritos ★★★
()
Ответ на: комментарий от trex6

Вот только не надо ля-ля. Вывод у ps замечательно читается глазами с монитора.

Я выше уже приводил ссылку на сборник костылей, которые дают возможность этому ps высрать буковки так, чтобы они в конечном итоге попали на экран.

PolarFox ★★★★★
()
Ответ на: комментарий от geekless

Выкидываем всё, оставляем вывод информации о файлах в виде списка списков значений аттрибутов. Это и есть то, что должен делать ls. Остальное в нём — комбайностроение.

Смешнее комбайностроителей только комбайноненавистники.

Kindly_Cat
() автор топика
Ответ на: комментарий от geekless

Ой, видимо среагировал на ключевое слово «комбайн» из твоего сообщения (:

PolarFox ★★★★★
()
Ответ на: комментарий от geekless

Я прочитал статью и не обнаружил в ней никаких компонентов.

dfilter
dsort
dhead
dtable

И каким образом это «компоненты»? А то я могу объявить существующие ls, ps и sort «компонентами».

Кстати, для примера - набросай план распиливания ls на компоненты :)

Выкидываем всё, оставляем вывод информации о файлах в виде списка списков значений аттрибутов.

Это не «распиливание», а «выпиливание». И подразумевает написание параллельного набора утилит.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Только ситуация отличается тем, что чтобы пропихнуть dps во все дистры и выкинуть старый ps, ему надо договориться с разработчиками дистров. У них тоже голова на плечах есть

MahMahoritos ★★★
()
Ответ на: комментарий от PolarFox

Всё должно быть в пределах разумного. Строители идеалов мало того, что сами попадают в полную жопу, так ещё и других с собой утягивают.

Kindly_Cat
() автор топика
Ответ на: комментарий от tailgunner

Это не «распиливание», а «выпиливание». И подразумевает написание параллельного набора утилит.

Да.

Собственно, а иначе никак. POSIX-совместимость, все дела.

geekless ★★
()
Ответ на: комментарий от tailgunner

Ты реально норкоман. Хоть попробуй подумать, каким образом реализовать исполняемый код этих методов.

Довольно просто. При вызове метода, передавать указатель на объект библиотечной функции. Функция вполне может быть оберткой над вызовами какой нибудь GLib. Безусловно будет серьезный недостаток - потребуется отдельный шелл.

Orlangoor ★★★★★
()
Ответ на: комментарий от MahMahoritos

Только ситуация отличается тем, что чтобы пропихнуть dps во все дистры и выкинуть старый ps, ему надо договориться с разработчиками дистров.

Не надо. Достаточно финансирования. То, что найдутся добровольцы для проталкивания, хорошо демонстрируется этим топиком. Доказано, опять же, systemd.

tailgunner ★★★★★
()
Ответ на: комментарий от PolarFox

Ага, давайте теперь нагородим еще больше костылей, их ведь и так достаточно. А еще по дороге что-нибудь сломаем.

Пусть в свой GnomeOS тянут любые какашки, лишь бы coreutils не трогали.

P.S. Про совместимость этого «бинарного вывода» на разных платформах вопрос уже поднимался. Автор молчит?

trex6 ★★★★★
()
Ответ на: комментарий от Orlangoor

Хоть попробуй подумать, каким образом реализовать исполняемый код этих методов.

Довольно просто. При вызове метода, передавать указатель на объект библиотечной функции.

В сад.

Безусловно будет серьезный недостаток - потребуется отдельный шелл.

Это самое очевидное и не самое сложное.

tailgunner ★★★★★
()
Ответ на: комментарий от geekless

Их надо урезать, распилить на компоненты и сделать нормальную ортогональность.

Может проще сразу из шелла дать доступ к POSIX API?

baverman ★★★
()
Ответ на: комментарий от geekless

Это не «распиливание», а «выпиливание». И подразумевает написание параллельного набора утилит.

Да.

Собственно, а иначе никак.

Я написал, как.

POSIX-совместимость, все дела.

POSIX не запрещает расширения.

tailgunner ★★★★★
()

Ящитаю, что достаточно добавить в стандартные утилиты ключик для ввода/вывода информации в неком стандартизированном и удобным для программного разбора формате.
Бинаризация ненужна.
Собственно как всегда, здравые идеи вперемешку с идиотическим бредом.

WatchCat ★★★★★
()
Ответ на: комментарий от trex6

Я против бинарного вывода. Формат должен оставаться текстовым, но быть более структурированным.

PolarFox ★★★★★
()
Ответ на: комментарий от geekless

Да, и вместо, например, emerge -uDNva @world придётся конструировать длинный конвейер из нескольких команд. Зато мир, труд, май, Ленин такой молодой, все дела.

Kindly_Cat
() автор топика
Ответ на: комментарий от gh0stwizard

Даже не знаю, зачем это.

http://kernel.org/doc/Documentation/filesystems/sysfs.txt

и man proc лично мне всегда хватало, как и обычной работы с файлами.

Chaser_Andrey ★★★★★
()
Последнее исправление: Chaser_Andrey (всего исправлений: 1)
Ответ на: комментарий от baverman

Вот, тоже на ум пришло. Ведь всякие там программы - это такие комбайны!

Kindly_Cat
() автор топика
Ответ на: комментарий от tailgunner

POSIX не запрещает расширения.

А нафейхоа нужны такие расширения, простите? Оставить минимальную реализацию утилит для совместимости с POSIX, а остальное перевести на «Юниксвей 2.0».

Кто-то тут кстати недавно рассуждал о принципе простоты ради надежности и скорости разаботки. Буквально вчера.

geekless ★★
()
Ответ на: комментарий от geekless

О, ещё один. Недавно один тут пытался доказать, что у меня никто ничего не отнимает, потом скатился до «ты ничего не платишь разработчикам, так что заткнись и жри что дают». Когда-то кричали, что и sysvinit никто ни у кого не отнимет, и что вышло?

Kindly_Cat
() автор топика
Ответ на: комментарий от Orlangoor

Просветишь?

Нет, потому что у меня тоже нет решения. Но, как пример менее очевидных проблем: что представляет собой объект с методами, где хранится его код? Каким образом должны генерироваться эти объекты? Для традиционных pipe'ов понятно - fprintf. А для твои, с методами?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Доказано, опять же, systemd

Ну ладно. Все ментейнеры сходят с ума и во всех основных дистрах появляется ненужные systemd, dps и другие продукты упорина. Пользоваться невозможно, все плохо. В этом случае ведь попросту от этих же основных дистров отпочкуются другие, лишенные этой заразы.

Но так будет, только если действительно systemd и другие новинки такое жуткое зло и все посходили с ума, продвигая их.

MahMahoritos ★★★
()
Ответ на: комментарий от Kindly_Cat

Да, и вместо, например, emerge -uDNva @world придётся конструировать длинный конвейер из нескольких команд.

Каким образом существование элементарных компонент мешает существованию более сложных? Ты идиот и не лечишься.

geekless ★★
()

Самый главный вопрос - Линус уже высказался по этому поводу?

trex6 ★★★★★
()
Ответ на: комментарий от geekless

POSIX не запрещает расширения.

А нафейхоа нужны такие расширения, простите?

А на фейхоа вообще вся эта бодяга с передачей структурированной информации?

Кто-то тут кстати недавно рассуждал о принципе простоты ради надежности и скорости разаботки. Буквально вчера.

И ты считаешь, что наличие двух наборов утилит - это проще? Кстати, шелл тоже понадобится новый.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от geekless

Каким образом существование элементарных компонент мешает существованию более сложных?

А кто тут кукарекал, что все комбайны нужно распилить на части?

Kindly_Cat
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.