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 с числом), выполнять правильное обрезание списка (без учета заголовка), работать одновременно со всеми полями объекта даже в том случае, если они не будут выведены на экран. Кроме того, все данные между командами передаются в бинарной форме, благодаря чему их обработка существенно упрощается.

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

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

Бери и пользуйся своим sysvinit. Кто тебе мешает, кроме твоей упоротости?

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

Бери и пользуйся своим sysvinit.

Ага, ага. Пока ещё можно с грехом пополам в некоторых дистрибутивах.

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

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

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

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

К чему такая драма? Это всего лишь коррозия старой Unix-культуры. Школота^WНекоторые могут называть это «прогрессом».

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

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

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

Кстати, шелл тоже понадобится новый.

Это ортогонально.

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

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

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

данные с простой структурой это текст - и он есть.

У любой CLI-утилиты в выхлопе не просто текст, а слегка структурированная таблица (в лучшем случае).

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

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

Названия ключей, хотя бы. Иначе от текущих строк это отличается очень мало.

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

И ты считаешь, что наличие двух наборов утилит - это проще? >В данном случае они вполне даже могут быть физически одним набором. «Старый ls» может быть просто скриптом, взывающим «новый ls» и еще несколько утилит.

Ну то есть ты предлагаешь реализовать «старый» ls заново. Да уж, верх простоты.

Кстати, шелл тоже понадобится новый.

Это ортогонально.

Только с формальной точки зрения. Для естественной записи фильтрующих выражений потомки Bourne shell не подходят:

dfilter euid \< 1000

представь себе несколько условий и скобки.

Так что... либо --object и filter-objects, либо разраб просто завидует славе поцеринга.

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

Взросление чего? Меня или ОС? Хотя ты прое^Hмахнулся в обеих случаях, — что Юникс что я уже далеко не так молоды и красивы как раньше.

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

Ну то есть ты предлагаешь реализовать «старый» ls заново

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

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

то есть данные придётся сериализовать/десериализовать

Подожди. Перевод данных в относительно плейн текст и парсинг его на другой стороне — это уже не сериализация/десериализация?

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

То-то всё так и конструируют с наслаждением цепочки конвейеров и ни разу не стремятся засунуть их в алиасы или скрипты.

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

Только с формальной точки зрения. Для естественной записи фильтрующих выражений потомки Bourne shell не подходят

Да, синтаксис оболочки для удобства надо другой. И тем не менее, функционально это ортогонально.

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

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

А я просто плАчу.

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

Да, синтаксис оболочки для удобства надо другой. И тем не менее, функционально это ортогонально.

Без этого твоим классным новым набором утилит невозможно будет пользоваться. Или придется таки написать команду filter-objects.

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

Да, синтаксис оболочки для удобства надо другой. И тем не менее, функционально это ортогонально.

Да, синтаксис С более удобен, чем синстаксис ассемблера. Хотя, функционально это ортогонально, так что давайте-ка все писать на асме.

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

Ты так говоришь, будто с точки зрения эргономики классным sh можно нормально пользоваться. Конструкции типа if [[ «$a» -gt «$b» ]] ; then верх изящества и читабельности просто.

Так что относительно sh, новая оболочка давно нужна в любом случае.

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

Да, синтаксис оболочки для удобства надо другой.

А вообще, если подумать не спеша: весь этот «Unix-way 2.0» - оттого, что за его конструирование взялись ПТУшники-недоучки. Ъ специалист делал бы что-то вроде Augeas.

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

Исключительно преобразованные в удобочитаемые строки данные.

нет, нет и нет!

данные должны быть текстовыми, а хост консоль должна выводить все в исходном виде!

преобразование же к нужному виду должно быть реализовано отдельной программой.

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

Ты так говоришь, будто с точки зрения эргономики классным sh можно нормально пользоваться

Смотря для чего. Шелл - язык поточной обработки, и для этого он вполне изящен.

Конструкции типа if [[ «$a» -gt «$b» ]] ; then верх изящества и читабельности просто.

Если убрать ненужную пару квадратных скобок, получается почти Си конструкция. И да, шелл не предназначен для обработки числовых даннх.

tailgunner ★★★★★
()

тяжкий кошмар

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

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

geekless ★★
()

Вообще, непонятно, почему бы просто не взять pash? Пусть оно и является комбайном.

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

Прочитал описание, не понял, как это соотносится с обсуждаемой темой

Прочитай еще раз.

Ты намекаешь на обертки для представления данных от кучи утилит в едином структурированном формате?

Я намекаю на то, что из текстового представления можно получить структурированное. Если вынести эту функциональность в библиотеку и продумать способ использования, то не надо никакого «Unix-way 2.0». Но, конечно, это задача другого уровня, чем «давайте напишем новый ls». Инженерная задача, не быдлокодерская.

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

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

это приведенный пример на гномолибах. Вполне можно и без них все сделать, обойдясь XML.

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

Ну вообще, sh и конвееры из стандартных утилит — это по сути функциональный ЯП. Вот только при этом убогий, нелогичный и подпертый плотными рядами костылей. Все его плюсы в функциональщине, а минусы в кривой реализации оной.

Как ситуацию принципиально улучшить, не превращая его в руби или хаскель, я, честно говоря, не знаю. Это сложный вопрос.

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

Как ситуацию принципиально улучшить, не превращая его в руби или хаскель, я, честно говоря, не знаю. Это сложный вопрос.

О чем и речь. А тут предлагается «давайте запилим GVariant и будет щастье». Лохи, мля. Когда Unix проектировался, в нем были заложены передовые технологии того времени, а нынешние недоучки и есть недоучки.

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

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

rezedent12 ☆☆☆
()
Ответ на: комментарий от rezedent12

Скажите за меня лучше.

бинарные форматы больше подвержены уязвимостям.

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

Эпичный баттхерт.

да, так и есть. _Мне_нравится_линукс_ . Мне приятно в нём работать. А его хотят испортить, замахиваясь на архитектуру

argin ★★★★★
()
Ответ на: комментарий от cvs-255

Нормально отформатированный XML читается без проблем.

Ага.

<array>
 <string>x</string>
 <string>y</string>
 <string>z</string>
</array>

верх читабельности.

В отличие от json.

JSON вообще беспомощное говно.

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

данные должны быть текстовыми, а хост консоль должна выводить все в исходном виде!

Кому должны? Зачем? Почему?

преобразование же к нужному виду должно быть реализовано отдельной программой.

Кому должно? Хост-консоль и есть отдельная программа. Для того же PS никто не заставляет использовать стандартную консоль делающую для каждого объекта выводимого на экран ToString(), вполне можно минут за 15 на коленке набросать другой хост, и регулировать отображение ручками через Format-*

Orlangoor ★★★★★
()

активный разработчик GNOME и мантейнер таких проектов, как Nautilus, Gnome-vfs

Дальше читать не стал. Они там и так к венде стремятся.

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

Кому должны? Зачем? Почему?

для

а) возможности работы с ними напрямую, что в случае, например, восстановления поврежденной системы, важно.

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

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

Ага.

<array>
 <string>x</string>
 <string>y</string>
 <string>z</string>
</array>
верх читабельности.

Да, это вполне читаемый объект.

cvs-255 ★★★★★
()
Ответ на: комментарий от buddhist

Полезно было бы сделать это отдельным ключом, а все остальное оставить как есть.

Тогда все плюсы, какие есть, уходят, остается только запара

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

Полезно было бы сделать это отдельным ключом, а все остальное оставить как есть.

Тогда все плюсы, какие есть, уходят

Озвучь список ушедших плюсов.

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

Лучше бы сделали несколько потоков вывода (больше чем stdout и stderr) которые можно подцеплять на stdin (или несколько stdin'ов) нескольких прог, собирая более сложный конвейер.
Примерно как gstreamer, где из демукса могут вылетать n потоков.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от cvs-255

а) возможности работы с ними напрямую, что в случае, например, восстановления поврежденной системы, важно.

В том же PS никто не мешает работать на прямую, используя скажем (ls .\peace.da).Name = «h.ui»; И вывод в консоль в удобочитаемом виде этому никак не мешает

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

Какие к х*ям уязвимости могу быть в красивом форматировании??

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

Какие к х*ям уязвимости могу быть в красивом форматировании??

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

используя скажем (ls .\peace.da).Name = «h.ui»;

я ничего не понял.

cvs-255 ★★★★★
()

Вот я одного не пойму — зачем все это? (даже если предположить, что несмотря на весь геморрой, скорость таки увеличится). Они что, строят RTS на базе pipes?

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