История изменений
Исправление AndreyKl, (текущая версия) :
А пользоваться Жабой - это всё равно, что для купания надевать скафандр водолаза-глубоководника.
как то так, но я больше про недостатки баша чем про достоинства явы для скриптов.
мне тут идея пришла, покритикуй, пжл (ну и кому интересно - присоединяйтесь)
Модернизация шелла. Язык должен поддерживать следующие типы данных: текст, целое, с плавающей точкой, булевский тип, дата и структура чтобы комбинировать перечисленные типы. функции должны уметь возвращать значение без лишних телодвижений, в том числе значения-структуры.
Вместо единого потока вывода как сейчас в шелле, есть предложение использовать «структурированные подпотоки».
Структура подпотока видится как пара (данные, имя:тип:формат вывода), подпотоков может быть любое кол-во). То что есть сейчас в шелл описывается форматом (данные, поток:текст).
Для примера возьмём вывод lspci:
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] RS880 Host Bridge
00:01.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (int gfx)
00:0a.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 5)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
данные могли бы быть разбиты на следующий поток
((адрес), (тип), (производитель), (модель), (код производителя) (описание), (дополнительно))
в программе формирующей этот поток (т.е. в lspci) код формирования потока выглядел бы примерно так
pprint(stream(
stream(printf("%d:%d.%d", d.addr.a, d.addr.b, d.addr.c), "address:%s"),
stream(printf("%s", d.type), "type:%s::"),
stream(printf("%s", d.producer), "producer:%s"),
stream(printf("%s", d.model), "model:%s"),
stream(printf("%s", d.producer_code), "producer code:[%s]"),
stream(printf("%s", d.description), "description:%s"),
stream(printf("%s", d.info), "more info:%s"),
"main:%s\n"//имя:формат родительского потока
))
тогда, так как сохраняется совместимость с тем что есть сейчас (поскольку основной поток текст), то грепать поток можно как обычно
lspci | grep 'what do you need'
но можно и переформатировать поток как тебе удобно без лишних телодвижений
lspci | streamf #1d #2d:%s #5d:%s
где # - операция обращения к подпотоку, цифра - номер подпотока, d - данные, f - формат результат вывода был бы такой
00:00.0 Host bridge AMD
00:01.0 PCI bridge AMD
00:0a.0 PCI bridge AMD
00:11.0 SATA controller AMD/ATI
00:12.0 USB controller AMD/ATI
Нужно конечно научить шелл отдавать описание формата потока программы с очередью подпотоков, вроде
#lspci
stream description
main:%s
address:%s
type:%s
...
Понятно что возникнут вопросы, непродумано тут всё, понятно что программописателей ещё надо информировать что можно вот так потоки организовывать, но мне кажется что подобная организация работы шелл значительно бы сократила количество танцев с бубнов вокруг данных.
Кстати, может уже такое есть?
Исходная версия AndreyKl, :
А пользоваться Жабой - это всё равно, что для купания надевать скафандр водолаза-глубоководника.
как то так, но я больше про недостатки баша чем про достоинства явы для скриптов.
мне тут идея пришла, покритикуй, пжл (ну и кому интересно - присоединяйтесь)
Вместо шелла. Язык должен поддерживать следующие типы данных: текст, целое, с плавающей точкой, булевский тип, дата и структура чтобы комбинировать перечисленные типы. функции должны уметь возвращать значение без лишних телодвижений, в том числе значения-структуры.
Вместо единого потока вывода как сейчас в шелле, есть предложение использовать «структурированные подпотоки».
Структура подпотока видится как пара (данные, имя:тип:формат вывода), подпотоков может быть любое кол-во). То что есть сейчас в шелл описывается форматом (данные, поток:текст).
Для примера возьмём вывод lspci:
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] RS880 Host Bridge
00:01.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (int gfx)
00:0a.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 5)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
данные могли бы быть разбиты на следующий поток
((адрес), (тип), (производитель), (модель), (код производителя) (описание), (дополнительно))
в программе формирующей этот поток (т.е. в lspci) код формирования потока выглядел бы примерно так
pprint(stream(
stream(printf("%d:%d.%d", d.addr.a, d.addr.b, d.addr.c), "address:%s"),
stream(printf("%s", d.type), "type:%s::"),
stream(printf("%s", d.producer), "producer:%s"),
stream(printf("%s", d.model), "model:%s"),
stream(printf("%s", d.producer_code), "producer code:[%s]"),
stream(printf("%s", d.description), "description:%s"),
stream(printf("%s", d.info), "more info:%s"),
"main:%s\n"//имя:формат родительского потока
))
тогда, так как сохраняется совместимость с тем что есть сейчас (поскольку основной поток текст), то грепать поток можно как обычно
lspci | grep 'what do you need'
но можно и переформатировать поток как тебе удобно без лишних телодвижений
lspci | streamf #1d #2d:%s #5d:%s
где # - операция обращения к подпотоку, цифра - номер подпотока, d - данные, f - формат результат вывода был бы такой
00:00.0 Host bridge AMD
00:01.0 PCI bridge AMD
00:0a.0 PCI bridge AMD
00:11.0 SATA controller AMD/ATI
00:12.0 USB controller AMD/ATI
Нужно конечно научить шелл отдавать описание формата потока программы с очередью подпотоков, вроде
#lspci
stream description
main:%s
address:%s
type:%s
...
Понятно что возникнут вопросы, непродумано тут всё, понятно что программописателей ещё надо информировать что можно вот так потоки организовывать, но мне кажется что подобная организация работы шелл значительно бы сократила количество танцев с бубнов вокруг данных.
Кстати, может уже такое есть?