Кто идет на Unix-way (или пользователь Linux - кто он)

Обсуждение развития Open-source.

Модератор: Модераторы разделов

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

Voral писал(а):
13.11.2009 18:17
t.t писал(а):
13.11.2009 18:03
Вы эту разницу видеть не хотите -- по крайней мере, у меня сложилось такое впечатление.
Потому, что я ее ни как не могу понять. Блин я совершенно честно это говорю. Мне совершенно не интересно просто так "трепаться ни о чем".
Значит, словами объяснить у нас не получается. Предложу тогда следить за созданной мною темой, прикидывая в уме, сколько времени и сил заняло бы решение тех же задач на си. Может быть, показать разницу на практических примерах нам удастся лучше.

Voral писал(а):
13.11.2009 18:34
Или речь о идет о разнице поколения языков программирования...... Ведь shell - это язык программирования 4го поколения....

Вот вам еще из 4го поколения:
Progress 4GL
там уже и интерфейсы можно создавать........ Или это тоже не программирование?
Я ведь не зря сказал о хоть сколь-нибудь широко употребимых языках. (;

Voral писал(а):
13.11.2009 18:57
Ali1 писал(а):
13.11.2009 18:41
Парадигма или стиль программирования -- ответ на Ваше:
Хм..... Не сочтите за флуд, но:
Т.е. это написание скриптов на языке shell не программирование - потому что другой стиль программирования?
Т.е. языки четвертого поколения не предназначены для программирования?

А прочему именно на переходе 3 - 4 поколение. Это стало не программирование. Давайте уж четко тогда определимся: программирование это оцифровка алгоритмов непосредственно в машинные коды. (Да и то если не заморачиваться, что некоторые машинные коды это вызов алгоритмов "зашитых в процессоре")
Я ведь сказал: чисто формально это тоже программирование. А говорим мы так потому, что стереотипно термин "программирование" понимают слишком узко -- именоо в смысле третьего поколения языков. Т.е. исключительно чтобы подчеркнуть эту разницу.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

Ali1 писал(а):
13.11.2009 18:30
t.t писал(а):
13.11.2009 18:03
....Между ассемблером и лиспом? На мой взгляд, огромна. А ведь все три -- языки третьего поколения. Вот и между ними всеми (с одной стороны) и shell (с другой) разница не меньше. Об этом-то я и толкую.
Вот как раз хотел спросить Вас за Lisp. Мне показалось, что комментируя процесс написания dpkg -L .... Вы описали одну важную вещь. Вы постоянно рассуждали о данных, Вас не интересовали передачи управления и ... , т.е Вы рассуждали непроцедурно( здесь непроцедурно не термин, а эпитет).
t.t, было бы интересно узнать, как Вы "мыслите" о переменных и циклах bash`а?
Очень хороший вопрос, спасибо.

Помните, у Реймонда: алгоритмы вторичны -- данные первичны? Да и не только у него, Реймонд сам цитирует Брукса: покажите мне код и скройте структуры данных -- я скорее всего ничесго не пойму в вашей программе; покажите структуры данных -- и код не понадобится.

Параллель с лиспом тоже к месту: это, пожалуй, один из самых высокоуровневых языков среди третьего поколения; и программирование, управляемое данными (data-driven programming) для него гораздо более естественный подход, чем для тех же процедурных языков.

Теперь собственно к Вашему вопросу. При решении задачи на shell как правило нет чёткой традиционной последовательности "задача - алгоритм - программа". Есть другая цепочка: "исходные данные - модифицированные данные - модифицированные данные - ... - результат". Это я и пытался проиллюстрировать выше, т.к. без Вашей подсказки не смог сформулировать. Т.е. сначала я знаю, какие данные есть на входе, либо какая команда выдаёт (в том числе и) те данные, которые мне нужны. Я смотрю на них -- и сразу вижу, какая первая команда мне нужна. Тут же могу запустить эту команду и посмотреть первый промежуточный результат -- и понять, какая будет вторая команда. И так по цепочке до окончательного результата, на каждом шагу видя и контролируя результат промежуточный. Это я и называю "на ходу".

Мне так мыслить проще. Приведу пример, сознательно чрезмерно упрощённый -- для наглядности: скажем, мне понятнее не "вывести третье поле тех строк, где первое равно единице" (уже алгоритм "в голове"), а "оставить строки, начинающиеся с единицы; оставить третье поле" -- т.е. "на автомате" я скорее всего напишу не так:

Shell

awk '$1="1" {print $3}'
а вот так:

Shell

grep "^1 " | cut -d ' ' -f 3


Таким образом "алгоритм" разбивается на цепочку простых и "как бы независимых" шагов -- "независимых" в том смысле, что мне я на каждом шагу вижу (действительно вижу, в смысле -- могу запустить и посмотреть) входные и выходные данные именно этого шага.

Цикл в этой цепочке возникает тогда, когда я понимаю, что на текущем шаге данные нужно обрабатывать, скажем, построчно (за тем исключением, когда обработка идёт с помощью sed или awk -- они делают это сами):

Shell

... | while read i; do ...; done | ...
или по словам:

Shell

for i in $(...); do ...; done | ...
или по файлам:

Shell

for i in *; do ...; done


Что касается переменных, то они бывают разные:
а) переменные окружения;
б) параметры командной строки (в том числе для внутренних функций);
в) специальные переменные, такие как, например, $# или $?;
г) "счётчики" циклов;
д) внутренние переменные скрипта или оболочки;

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

Первое -- в качестве конфигурационных параметров. Тут два варианта: параметры могут задаваться либо в командной строке (пример в параллельной теме; в более сложных случаях лучше использовать getopt, но в повседневных задачах такие случаи практически не встречаются), либо в файле:

Shell

. $HOME/.config/$(basename $0)


Второе -- в качестве средства ветвления конвейеров или подстановок. Поскольку мы не можем писать что-то такое:

Shell

command1 \ command2 | command4 command3 /
или

Shell

command1 \ command2 $(command4) command3 /
то приходится так (для второго случая):

Shell

a=$(command4) command1 $a command2 $a command3 $a
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

Ali1 писал(а):
13.11.2009 19:13
Кстати, я не считаю unix-shell языком 4. поколения.
Какого же? Третьего? Да, на shell можно писать и в процедурном стиле; но на мой взгляд, это -- намеренно себя ограничивать.

diesel писал(а):
14.11.2009 00:08
Но. Это только одна часть того что можно делать на shell'е, не самая интересная кстати. О другой части можно думать как о постепенной трансформации потока данных. Придуманный пример:
Об этом я и говорю. Пример тоже хорош; у меня такие сами по себе, "пока не надо" не придумываются.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
YUKLA
Сообщения: 342
ОС: Gentoo Linux, XFCE 4.6.1

Re: Кто идет на Unix-way

Сообщение YUKLA »

diesel писал(а):
14.11.2009 00:08
Не видел ни того ни другого, возможно поэтому не понимаю :)
В ZX Spectrum не было шелла в современном понимании. Или, точнее, роль шелла выполнял Basic. Т.е. загрузка компьютера завершалась появлением приглашения Basic.
В Novell Netware шелл выполнял ряд команд Novell, которые касались настройки системы. Но не имел возможностей для работы с файловой системой непосредственно. NetBasic такие возможности предоставлял.

diesel писал(а):
14.11.2009 00:08
Но. Это только одна часть того что можно делать на shell'е, не самая интересная кстати. О другой части можно думать как о постепенной трансформации потока данных.
...........
Хотелось бы увидеть пример подобной логики в Basic-shell'е. На самом деле это не трудно читаемо переписать на любом скриптовом языке, просто логика будет несколько другой.
Ваши представления о "потоке" основаны лишь на том, что ваш скрипт записан в "одну строку". Но на самом деле никакого "потока данных" там и в помине нет. А есть ряд механизмов, которые включают трубки (pipes) и переменные. Причем, каждое перенаправление данных вызывает создание своего собственного pipe. Отдельного.

Таким образом, ничто не мешает переписать ваш пример на ЛЮБОЙ ДРУГОЙ язык программирования (хоть на Байсик, хоть Паскаль). И выполнять ровно то же самое. Как с использованием Pipe API, так и без.

В строчку, или по порядку построчно, с нумерацией строк или без.... :tongue:

Более того, ваш пример можно на 99% трансформировать в тот же Basic методом Search&Replace.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Кто идет на Unix-way

Сообщение diesel »

YUKLA писал(а):
15.11.2009 15:20
Ваши представления о "потоке" основаны лишь на том, что ваш скрипт записан в "одну строку". Но на самом деле никакого "потока данных" там и в помине нет.
как я уже сказал "можно думать как о постепенной трансформации потока данных". t.t. о том же написал как о схеме "исходные данные - модифицированные данные - модифицированные данные - ... - результат".

"Поток" - это, конечно, скорее аналогия с реальным водным потоком: скажем есть у нас поток воды, у него есть источник, по мере течения мы ставим какие-то фильтрующие устройства, а в конце заставляем крутить турбину генератора, на выходе генератора уже получаем поток электронов в проводнике, который в свою очередь... и так далее. Ровно тоже самое, только с данными, происходит в приведенном примере. И ровно так же как в этом описании, нам ровным счетом пофигу на внутреннее устройство фильтров, генератора и проводников. Если у нас есть информация о типах доступных фильтров, то мы, скажем, можем представить какие фильтры надо использовать для речной воды, а какие для морской; а можно и генератор заменить водяной мельницей, или воду по трубам в квартиры пустить, опять же после соответствующей фильтрации. Опять таки, тоже самое с нашими данными.

Вместо того чтобы попытаться понять суть того о чем говорится, Вы опять желаете спорить о терминах; хотя найти четкое определение того что такое "поток данных" вам будет достаточно сложно. Данные есть, они проходят по цепочке, каждый элемент которой имеет вполне определенный вход, и вполне определенный выход, о том почему данные проходящие по цепочке нельзя считать "потоком" - можно спорить долго, и так и не договориться. Затруднит Ваше положение в таком споре еще и то, что с входом и выходом каждой unix-программы связаны как минимум три абстракции - одна для обработки входного потока, и две для порождения выходных потоков, которые так и называют "стандартные потоки" (standart streams). И снова, это абстракции более высокого порядка, в том плане что нас не интересует их реализация.

YUKLA писал(а):
15.11.2009 15:20
А есть ряд механизмов, которые включают трубки (pipes) и переменные. Причем, каждое перенаправление данных вызывает создание своего собственного pipe. Отдельного.

для построения цепочки, нас не интересует механика работы каждого из ее элементов. а вот тут:
YUKLA писал(а):
15.11.2009 15:20
Таким образом, ничто не мешает переписать ваш пример на ЛЮБОЙ ДРУГОЙ язык программирования (хоть на Байсик, хоть Паскаль). И выполнять ровно то же самое. Как с использованием Pipe API, так и без.

вас будет интересовать и механика тоже. попробуйте решить ту же задачу на том же Паскале, или даже каком-нить python'е, и покажите что получится. Скорее всего получиться вариация на тему:

Код: Выделить всё

while(<>){
   @a = split /:/, $_;
   if ( last @a =~ /\/bin\/(ba)?sh/){
      chown($a[..], "users", $a[..]) && print "$a[..]\n";
   }
}

псевдокод похожий на perl, реализацию chown пропустим(и индексы в массиве я не ставил), идея я думаю должна быть понятна. логика построения совершенно другая: вместо возьмем файл c данными, пропустим данные через мясорубку фильтров, и получим на выходе требуемое, мы переходим на более низкий уровень "каждую строку надо прочитать(это мы пропустили благодаря syntax sugar от perl), где-то сохранить, провести необходимые проверки и преобразования, где-то сохранить, что-то сделать,где-то сохранить". И думаем мы уже не только о том как путем последовательных трансформаций привести данные к нужному виду, и трансформируем уже не просто весь массив данных, а выделяем его элементы, так или иначе.
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Кто идет на Unix-way

Сообщение Ali1 »

YUKLA писал(а):
15.11.2009 15:20
Таким образом, ничто не мешает переписать ваш пример на ЛЮБОЙ ДРУГОЙ язык программирования (хоть на Байсик, хоть Паскаль). И выполнять ровно то же самое. Как с использованием Pipe API, так и без.

Ничто не мешает переписать ЛЮБОЙ ДРУГОЙ ПРИМЕР неписанный на ЛЮБОМ ЯП на опкод процессора.
Ну и что?

YUKLA писал(а):
15.11.2009 15:20
Более того, ваш пример можно на 99% трансформировать в тот же Basic методом Search&Replace.

Предлагаю написать реализацию "|" на на встроенном basic IBM-PC XT.

ЗЫ встроенном basic IBM-PC XT, qbasic, ..., Visual_Basic_.NET Вы о чем?

YUKLA писал(а):
15.11.2009 15:20
Ваши представления о "потоке" основаны лишь на том, что ваш скрипт записан в "одну строку". Но на самом деле никакого "потока данных" там и в помине нет. А есть ряд механизмов, которые включают трубки (pipes) и переменные. Причем, каждое перенаправление данных вызывает создание своего собственного pipe. Отдельного.

Определение в студию.
Поток данных (англ. stream) в программировании — абстракция, используемая для чтения или записи файлов, сокетов и т. п. в единой манере.
Спасибо сказали:
YUKLA
Сообщения: 342
ОС: Gentoo Linux, XFCE 4.6.1

Re: Кто идет на Unix-way

Сообщение YUKLA »

Господа.

Я и пытаюсь понять суть, договариваясь о терминах.
1. Поток данных в вашем понимании, существует во всех без исключения алгоритмах, которые в ответ на ввод параметров выдают некие данные в виде результата.
2. Единообразие передачи параметров в виде "файлов, сокетов и пр." существуют в любой связной библиотеке.
3. Никто мне не мешает ВРУЧНУЮ открыть соотв. трубки и пользоваться ими.
4. Никто мне не помешает написать вашу обработку данных в виде подпрограмм и вызывать их ровно таким же методом, как вы вызываете внешние программы/команды в вашем примере.

Простите великодушно, но все то лирика. Типа - "посмотрите, какой красивый код". Но мы то с вами понимаем, как конкретно этот код работает и какие механизмы использует, не правда ли?

Еще раз - какую вы видите принципиальную разницу между шелл-скриптом и любым другим приведённым в дискуссии языком программирования?

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

ЗЫ: Я смотрю на вещи, как программист. А не как филолог или "структуральныейший лингвист". :rolleyes: Любая абстрактная конструкция - для меня набор определённых системных действий.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Кто идет на Unix-way

Сообщение diesel »

YUKLA писал(а):
15.11.2009 18:55
ЗЫ: Я смотрю на вещи, как программист. А не как филолог или "структуральныейший лингвист". :rolleyes: Любая абстрактная конструкция - для меня набор определённых системных действий.

ну дык и перечитайте последнюю страницу этого трэда как программист. если вы подключаете внешнюю библиотеку, и используете некоторые ее функции, интересуют ли вас внутренности используемых функций, если все работает нормально? интересует ли вас при вызове внешних функций что-либо кроме входных параметров которые нужно задать, и результата который вам возвращают?
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Кто идет на Unix-way

Сообщение Ali1 »

Вот сижу я сейчас и думаю, что у меня с :

Код: Выделить всё

/** \ingroup rpmcli
 * Display package information.
 * @todo hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
 * @param ts            transaction set
 * @param qva           parsed query/verify options
 * @param argv          query argument(s) (or NULL)
 * @return              0 on success, else no. of failures
 */
int rpmcliQuery(rpmts ts, QVA_t qva, ARGV_const_t argv);
Вместо того, чтоб набрать rpm -q.
А так конечно -- "все лирика". ;)

UPD Вск Ноя 15 20:39:06 MSK 2009

Код: Выделить всё

/*
rpm --query  in standalone program.
Compile as
cc -I/usr/include/rpm -o pmq pmq.c -lrpm -lrpmbuild -lrpmio -lpopt
See option usage by invoking
./pmq --help
*/

#include <stdlib.h>

#include <rpmcli.h>

#include <rpmdb.h>

#include <rpmds.h>

#include <rpmts.h>

/* Set up a table of options. */

static struct poptOption optionsTable[] = {
{ NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
"Common options for all rpm modes and executables:",
NULL },

{ NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQueryPoptTable, 0,
"Query options (with -q or --query):",
NULL },

POPT_AUTOALIAS

POPT_AUTOHELP

POPT_TABLEEND

};

int main(int argc, char * argv[])

{

poptContext context;

QVA_t qva = &rpmQVKArgs;

rpmts ts;

int ec;

context = rpmcliInit(argc, argv, optionsTable);

if (context == NULL) {
/* Display error and exit... */
poptPrintUsage(context, stderr, 0);

exit(EXIT_FAILURE);

}

ts = rpmtsCreate();

if(qva->qva_mode != 'q') {

poptPrintUsage(context, stderr, 0);

exit(EXIT_FAILURE);
}

if (qva->qva_source != RPMQV_ALL && !poptPeekArg(context)) {
fprintf(stderr, "no arguments given for --query");

exit(EXIT_FAILURE);

}

ec = rpmcliQuery(ts, qva, (const char **) poptGetArgs(context));




ts = rpmtsFree(ts);

context = rpmcliFini(context);
return ec;
}


Код:

$ ./pmq --help Использование: pmq [ПАРАМЕТР...] Общие параметры для всех режимов и компонентов rpm: -D, --define='MACRO EXPR' определить MACRO со значением EXPR -E, --eval='EXPR' вывести значение макроса EXPR --macros=<FILE:...> использовать <FILE:...> вместо файла(ов) по умолчанию --nodigest не проверять дайджест пакета(ов) --nosignature не проверять подпись(и) в пакете(ах) --rcfile=<FILE:...> использовать <FILE:...> вместо файла(ов) по умолчанию -r, --root=ROOT использовать ROOT как корневой каталог (default: "/") --querytags отобразить известные ключи запроса --showrc показать текущее значение rpmrc и макросов --quiet выводить минимум сообщений -v, --verbose выводить более детальные сообщения --version вывести номер версии этой прграммы Параметры запроса (с -q или --query): -c, --configfiles показать все файлы конфигурации -d, --docfiles показать все файлы документации --dump показать основную информацию о файле -l, --list показать список файлов пакета --queryformat=QUERYFORMAT используйте следующий формат запроса -s, --state показать состояние перечисленных файлов Options implemented via popt alias/exec: Help options: -?, --help Show this help message --usage Display brief usage message $ ./pmq --queryformat "%{NAME} %{VERSION} %{INSTALLTID:date}\n" mc mc 4.6.2 Чтв 11 Июн 2009 01:19:02 $
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: Кто идет на Unix-way

Сообщение Voral »

t.t писал(а):
15.11.2009 09:17
Я ведь сказал: чисто формально это тоже программирование. А говорим мы так потому, что стереотипно термин "программирование" понимают слишком узко -- именоо в смысле третьего поколения языков. Т.е. исключительно чтобы подчеркнуть эту разницу.

Вот в чем мы с вами и расходимся. Где этот "стереотип"?....
Откуда такая статистика?
Разница между процедурным программированием и объектным возможно даже больше.....

Скорость написания..... Естественно вы это сделаете быстрее на шеле. Но, это только благодаря тому что данный язык программирования на это и нацелен, под это заточен... Вы думаете нет других узкоспециализированных языков?
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Кто идет на Unix-way

Сообщение sash-kan »

Voral
о каком это «языке программирования шел» вы речь ведёте? (и куда он, интересно, шёл?)
ткните меня носом, где вы видите хоть что-то из синтаксиса хоть какого-нибудь языка программирования в этом примере:
$ du -s * | sort -nr | head -n 5
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Кто идет на Unix-way

Сообщение sash-kan »

YUKLA писал(а):
15.11.2009 18:55
Я и пытаюсь понять суть, договариваясь о терминах.
Я знаю народ, я всё про него прочитал © ДДТ
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

YUKLA писал(а):
15.11.2009 15:20
diesel писал(а):
14.11.2009 00:08
Не видел ни того ни другого, возможно поэтому не понимаю :)
В ZX Spectrum не было шелла в современном понимании. Или, точнее, роль шелла выполнял Basic. Т.е. загрузка компьютера завершалась появлением приглашения Basic.
В Novell Netware шелл выполнял ряд команд Novell, которые касались настройки системы. Но не имел возможностей для работы с файловой системой непосредственно. NetBasic такие возможности предоставлял.
А я видел и то, и другое. С ZX Spectrum работал несколько лет довольно плотно (он был у меня дома в заводском исполнении). Бейсик как бейсик, до unix shell ему -- как до неба.

diesel писал(а):
14.11.2009 00:08
Хотелось бы увидеть пример подобной логики в Basic-shell'е.
YUKLA писал(а):
15.11.2009 15:20
Более того, ваш пример можно на 99% трансформировать в тот же Basic методом Search&Replace.
Так трансформируйте, теоретик Вы наш. "Методом Search&Replace". Очень хочу на это посмотреть. А то Вы только языком чесать умеете. Десять страниц Вам исписали, я отдельную тему специально создал -- а Вы по-прежнему: шелл ничем от бейсика не отличается... Что мне ещё сказать?.. Трансформируйте хотя бы вот этот единичный пример в бейсик -- чтобы _предметно_ разговаривать; и время, затраченное на эту трансформацию, указать не забудьте. А до того оставляю за собой и остальными модераторами право удалять все Ваши изыски словоблудия без дополнительных предупреждений. А то так и сто страниц исписать можно.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

Voral писал(а):
15.11.2009 23:38
t.t писал(а):
15.11.2009 09:17
Я ведь сказал: чисто формально это тоже программирование. А говорим мы так потому, что стереотипно термин "программирование" понимают слишком узко -- именоо в смысле третьего поколения языков. Т.е. исключительно чтобы подчеркнуть эту разницу.
Вот в чем мы с вами и расходимся. Где этот "стереотип"?....
Откуда такая статистика?
Разница между процедурным программированием и объектным возможно даже больше.....
Вы статью англоязычную, на которую я ссылку давал, всё-таки прочитайте, раз самостоятельно понять не можете. Разница не то что "больше" или "меньше" -- она принципиально другая не только чем между процедурным и объектным, но даже чем между процедурным и функциональным. Другой уровень абстракции. И мы тут последние страницы только то и делаем, что пытаемся это доказать на практических примерах.

Voral писал(а):
15.11.2009 23:38
Скорость написания..... Естественно вы это сделаете быстрее на шеле. Но, это только благодаря тому что данный язык программирования на это и нацелен, под это заточен... Вы думаете нет других узкоспециализированных языков?
Примеры можно? С указанием области задач, конечно.

Пока у меня впечатление, что Вы, как и YUKLA, "спорите о вкусе устриц с теми, кто их ел -- до хрипоты, до драки". С нашей стороны практических примеров было уже предостаточно. С вашей -- ни одного.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
YUKLA
Сообщения: 342
ОС: Gentoo Linux, XFCE 4.6.1

Re: Кто идет на Unix-way

Сообщение YUKLA »

t.t писал(а):
16.11.2009 06:34
Так трансформируйте, теоретик Вы наш. "Методом Search&Replace". Очень хочу на это посмотреть. А то Вы только языком чесать умеете. Десять страниц Вам исписали, я отдельную тему специально создал -- а Вы по-прежнему: шелл ничем от бейсика не отличается... Что мне ещё сказать?.. Трансформируйте хотя бы вот этот единичный пример в бейсик -- чтобы _предметно_ разговаривать; и время, затраченное на эту трансформацию, указать не забудьте. А до того оставляю за собой и остальными модераторами право удалять все Ваши изыски словоблудия без дополнительных предупреждений. А то так и сто страниц исписать можно.
Меряться пиписками? Ну, это не серьезно.

Ведь транспонирую. Только вместо ваших "|" буду скобочки круглые. Что тогда скажите? Насоздаю процедур с именами grep, cat, awk,ls. Думайте - не получиться?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Кто идет на Unix-way

Сообщение drBatty »

sash-kan писал(а):
16.11.2009 01:23
о каком это «языке программирования шел» вы речь ведёте? (и куда он, интересно, шёл?)
ткните меня носом, где вы видите хоть что-то из синтаксиса хоть какого-нибудь языка программирования в этом примере:
$ du -s * | sort -nr | head -n 5

да уж, такой нелогичной и жуткой конструкции нет больше нигде... :)
t.t писал(а):
16.11.2009 06:34
Трансформируйте хотя бы вот этот единичный пример в бейсик -- чтобы _предметно_ разговаривать; и время, затраченное на эту трансформацию, указать не забудьте.

можно наверное... лень, в этом ИМХО нет никакого смысла. Впрочем думаю sed справится с не слишком сложными примерами.
(ну если это в правду бейсик, а не как обычно в ZX:
10 REM <много кило кода на асме>
20 RANDOMIZE USE <начало асмового кода>
)
t.t писал(а):
16.11.2009 06:47
Вы статью англоязычную, на которую я ссылку давал, всё-таки прочитайте, раз самостоятельно понять не можете. Разница не то что "больше" или "меньше" -- она принципиально другая не только чем между процедурным и объектным, но даже чем между процедурным и функциональным. Другой уровень абстракции. И мы тут последние страницы только то и делаем, что пытаемся это доказать на практических примерах.

другой конечно. можно basic -> bash, но обратно не получится, только вручную.

YUKLA писал(а):
16.11.2009 09:39
Думайте - не получиться?

нет, к сожалению...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

YUKLA писал(а):
16.11.2009 09:39
t.t писал(а):
16.11.2009 06:34
Так трансформируйте, теоретик Вы наш. "Методом Search&Replace". Очень хочу на это посмотреть. А то Вы только языком чесать умеете. Десять страниц Вам исписали, я отдельную тему специально создал -- а Вы по-прежнему: шелл ничем от бейсика не отличается... Что мне ещё сказать?.. Трансформируйте хотя бы вот этот единичный пример в бейсик -- чтобы _предметно_ разговаривать; и время, затраченное на эту трансформацию, указать не забудьте. А до того оставляю за собой и остальными модераторами право удалять все Ваши изыски словоблудия без дополнительных предупреждений. А то так и сто страниц исписать можно.
Меряться пиписками? Ну, это не серьезно.

Ведь транспонирую. Только вместо ваших "|" буду скобочки круглые. Что тогда скажите? Насоздаю процедур с именами grep, cat, awk,ls. Думайте - не получиться?
На понт берёте? Здесь такие методы не работают. За язык Вас никто не тянул, господин трепач. Сказали -- делайте. Пока не сделаете, оставляю за собой право не реагировать на любые Ваши аргументы в любых темах, называя Вас, по сашиному почину, "господином соврамши" со ссылками сюда и на предыдущий Ваш перл про "50% ботнетов". Успехов.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

drBatty писал(а):
16.11.2009 09:43
t.t писал(а):
16.11.2009 06:34
Трансформируйте хотя бы вот этот единичный пример в бейсик -- чтобы _предметно_ разговаривать; и время, затраченное на эту трансформацию, указать не забудьте.
можно наверное... лень, в этом ИМХО нет никакого смысла. Впрочем думаю sed справится с не слишком сложными примерами.
(ну если это в правду бейсик, а не как обычно в ZX:
10 REM <много кило кода на асме>
20 RANDOMIZE USE <начало асмового кода>
)
Нет, что с бейсика на баш или сед много чего можно перевести, я не спорю. Вопрос как раз об обратном. Да тут Вы и сам то же говорите:

drBatty писал(а):
16.11.2009 09:43
t.t писал(а):
16.11.2009 06:47
Вы статью англоязычную, на которую я ссылку давал, всё-таки прочитайте, раз самостоятельно понять не можете. Разница не то что "больше" или "меньше" -- она принципиально другая не только чем между процедурным и объектным, но даже чем между процедурным и функциональным. Другой уровень абстракции. И мы тут последние страницы только то и делаем, что пытаемся это доказать на практических примерах.
другой конечно. можно basic -> bash, но обратно не получится, только вручную.

YUKLA писал(а):
16.11.2009 09:39
Думайте - не получиться?
нет, к сожалению...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кто идет на Unix-way

Сообщение t.t »

drBatty писал(а):
16.11.2009 09:43
Впрочем думаю sed справится с не слишком сложными примерами.
Кстати, вопрос как к главному знатоку sed: как вот здесь можно без цикла обойтись?
Unix-way в действии
Лучше ответить "по месту" -- тут давно флуд сплошной.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Кто идет на Unix-way

Сообщение drBatty »

t.t писал(а):
16.11.2009 12:44
Лучше ответить "по месту" -- тут давно флуд сплошной.

там и ответил.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Кто идет на Unix-way

Сообщение drBatty »

t.t писал(а):
16.11.2009 11:56
Сказали -- делайте. Пока не сделаете, оставляю за собой право не реагировать на любые Ваши аргументы в любых темах, называя Вас, по сашиному почину, "господином соврамши" со ссылками сюда и на предыдущий Ваш перл про "50% ботнетов". Успехов.
ИМХО это возможно в принципе, но очень трудоёмко на практике.
t.t писал(а):
16.11.2009 12:05
Нет, что с бейсика на баш или сед много чего можно перевести, я не спорю. Вопрос как раз об обратном. Да тут Вы и сам то же говорите:

обратное если и возможно, то слишком трудоёмко. например в bash'е несколько методов работы со строками, вроде ${X:n:m}, я уже не говорю про регулярные выражения и "глоббинг" - как это реализовать на бейсике - даже не представляю...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Кто идет на Unix-way

Сообщение Ali1 »

//Совершеннейший offtop
drBatty А в бейсике спектрума ассемблер полный или как встроенный в C/trpascal ?
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: Кто идет на Unix-way

Сообщение Goodvin »

YUKLA писал(а):
11.11.2009 11:34
watashiwa_daredeska писал(а):
11.11.2009 09:46
Voral писал(а):
11.11.2009 09:12
/me пошел еще раз гуглить про юникс-вей почему он не может быть совместим с гуи.
Потому что GUI проблематично подать на вход другой программе. Сравните:
1. Программа пишет логи в файл обычным plain-text. Можно применять весь арсенал средств для обработки текстов: grep, sed, awk и пр., представить кратки результат в агрегированном нужным нам образом виде. Причем: a) независимо от программы, b) весь арсенал уже существует и разработчику программы не нужно парить этим себе мозг.
2. Программа пишет логи в окошко. Красиво, разноцветно и т.п. Никаких готовых средств для обработки не существует, пользователь не может сделать с этой кашей ничего, кроме как тупо пялиться, как баран, в это дурацкое окошко.
Поэтому GUI — это финал обработки (или финал побочной ветви), способ отображения информации исключительно для человека.

Вы заблуждаетесь. Радикально.
1. "Программа GUI" может использовать все существующие в API механизмы. И "трубки" - pipes, и "очереди" - queues, и просто соединения через TCP/IP Localhost. И так далее. Список механизмов точно такой же, как и для ЛЮБОЙ ДРУГОЙ ПРОГРАММЫ для данной операционной системы.
2. Алгоритм обработки текста НЕ ЗАВИСИТ от способа его хранения. Это аксиома. Странно читать это то вас, честное слово.
3. Не уж то вы полагаете, что алгоритмы, реализованные в "grep, sed, awk и пр" настолько уникальны, что нигде больше не применяются? Может быть, вам стоит начать с изучения текстовых функций базовых библиотек? Например - glib.
4. GUI - это GUI. Это просто библиотека для отображения информации по-пиксельно. А не по-символьно. Только и всего.
Господи, какая же оголтелая демагогия.

YUKLA писал(а):
11.11.2009 11:34
ЗЫ: Честное слово - ожидал большего профессионализма для данного форума.
У Вас очень странные и извращенные представления либо о самом понятии "профессионализм", либо о самой профессиональной области предмета обсуждения.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Кто идет на Unix-way

Сообщение drBatty »

Ali1 писал(а):
16.11.2009 16:53
drBatty А в бейсике спектрума ассемблер полный или как встроенный в C/trpascal ?

нет там ассемблера, там есть REM - это комментарий, а после него любые символы, включая перевод строки (там не текстовый файл, там в начале каждой строки хранится длинна, вроде паскаля).

Goodvin писал(а):
16.11.2009 18:03
Господи, какая же оголтелая демагогия.


Можно немного подробнее? С чем вы не согласны?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Кто идет на Unix-way

Сообщение watashiwa_daredeska »

drBatty писал(а):
16.11.2009 18:30
Можно немного подробнее? С чем вы не согласны?
Отвечу от себя еще раз, в свете уже прошедшей дискуссии.
YUKLA писал(а):
11.11.2009 11:34
1. "Программа GUI" может использовать все существующие в API механизмы. И "трубки" - pipes, и "очереди" - queues, и просто соединения через TCP/IP Localhost. И так далее. Список механизмов точно такой же, как и для ЛЮБОЙ ДРУГОЙ ПРОГРАММЫ для данной операционной системы.
Проблема в том, что grep/sed/awk не используют pipes/sockets и т.п. Они используют stdin/stdout/файлы. Решение об использовании pipes/sockets/files принимает не разработчик программы, а ее пользователь. Это во-первых. Во-вторых, то, что GUI-программа может также использовать stdin/stdout не имеет никакого отношения к возможностям GUI. Когда я пишу:

Код: Выделить всё

if kdialog --yesno "Отвечайте только 'Да' или 'Нет'."; then
  echo Да
else
  echo Нет
fi
то взаимодействие kdialog с остальными инструментами обеспечивается отнюдь не GUI.

YUKLA писал(а):
11.11.2009 11:34
2. Алгоритм обработки текста НЕ ЗАВИСИТ от способа его хранения. Это аксиома. Странно читать это то вас, честное слово.
В целом, я придерживаюсь своего предыдущего ответа: от способа хранения зависит способ обработки, а не алгоритм.

При чем тут вообще разговор об алгоритме, мне не понятно.

YUKLA писал(а):
11.11.2009 11:34
3. Не уж то вы полагаете, что алгоритмы, реализованные в "grep, sed, awk и пр" настолько уникальны, что нигде больше не применяются? Может быть, вам стоит начать с изучения текстовых функций базовых библиотек? Например - glib.
Тут мне также непонятно, при чем тут разговор о том, применяются ли где-то алгоритмы, заложенные в grep, sed, awk или нет. Мне, как пользователю, которому нужно обработать текст абсолютно фиолетово, используются ли эти алгоритмы где-то еще или нет, мне нужно использовать их самому, сейчас и с минимальными усилиями.

YUKLA писал(а):
11.11.2009 11:34
4. GUI - это GUI. Это просто библиотека для отображения информации по-пиксельно. А не по-символьно. Только и всего.
Это совершенный уход от темы. Разговор идёт о самом принципе построения инструментов Unix таким образом, чтобы можно было направить вывод одной утилиты на вход другой. Так сказать, «если тебе лень, читать, что пишет программа — заставь другую программу читать это».
Спасибо сказали:
YUKLA
Сообщения: 342
ОС: Gentoo Linux, XFCE 4.6.1

Re: Кто идет на Unix-way

Сообщение YUKLA »

watashiwa_daredeska писал(а):
16.11.2009 20:02
Это совершенный уход от темы. Разговор идёт о самом принципе построения инструментов Unix таким образом, чтобы можно было направить вывод одной утилиты на вход другой. Так сказать, «если тебе лень, читать, что пишет программа — заставь другую программу читать это».
Просто вы не можете понять другого человека. Смотрящего по другому. И не можете ему ничего объяснить.

Я вот воспринимаю команды, записанные в командной строке шелл-скрипта не как внешние программы (самостоятельные бинарники), а как просто функции.

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

Это, в общем, не важно. Еще раз повторю свои первоначальные постулаты:
1. Шелл скрипт - это язык программирования.
2. Работа в приглашении текущего шелла аналогична работе в приглашении Basic. Различия - в семантике вызова программ/команд и в тех или иных дополнительных фичах. И эта разница незначительна.
3. Особенности Unix-шелла (перечисленные тут stdin, stdout, pipes, queues и пр) являются инструментами программирования. И реализованы в библиотеке GNU LibC. Пользоваться ими можно только в рамках составления или отладки программ. Что, опять же, подчеркивает ориентацию Unix-way на программиста и/или администратора.

Кстати. Не могу понять, что уважаемый t.t хочет доказать, требуя от меня код на Pascal/Basic, аналогичный приведенному господином diesel? Такой код я, безусловно, напишу. Просто непонятно - для чего он (код) нужен t.t. Чтобы доказать, что на шелле программировать такие задачи проще?

Дык - я то пытался и пытаюсь доказать, что на шелле именно программируют! И что шелл-скрипт - инструмент программиста. :tongue: Прочитайте, пожалуйста, все мои предыдущие сообщения, чтобы удостовериться. О чем же вы тогда спорите?

В общем - ИМХО, дискуссия пошла по кругу.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Кто идет на Unix-way

Сообщение watashiwa_daredeska »

YUKLA писал(а):
16.11.2009 22:34
1. Шелл скрипт - это язык программирования.
2. Работа в приглашении текущего шелла аналогична работе в приглашении Basic. Различия - в семантике вызова программ/команд и в тех или иных дополнительных фичах.
Допустим. С натяжкой.

YUKLA писал(а):
16.11.2009 22:34
И эта разница незначительна.
Я так полагаю, что свой sysinfo Вы пишете прямо в маш. кодах? Ибо разница между C/C++ и маш. кодами куда незначительней, чем между sh и C/C++.

YUKLA писал(а):
16.11.2009 22:34
3. Особенности Unix-шелла (перечисленные тут stdin, stdout, pipes, queues и пр) являются инструментами программирования. И реализованы в библиотеке GNU LibC. Пользоваться ими можно только в рамках составления или отладки программ. Что, опять же, подчеркивает ориентацию Unix-way на программиста и/или администратора.
Особенности GUI (окна, кнопки, поля ввода и пр) являются инструментами программирования. И реализованы в библиотеке (допустим, GTK+). Пользоваться ими можно только в рамках составления или отладки программ [что бы это значило?]. Что, опять же, подчеркивает ориентацию GUI-программ на программиста и/или администратора.

Я что-то упустил?

YUKLA писал(а):
16.11.2009 22:34
Дык - я то пытался и пытаюсь доказать, что на шелле именно программируют! И что шелл-скрипт - инструмент программиста.
Ну, в таком случае, я сантехник, повар, слесарь, плотник, дизайнер, автомеханик, телемастер, логистик, швец, жнец, на дуде игрец, а когда напьюсь до беспамятства, еще и балерин, не считая прочих моих достоинств.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Кто идет на Unix-way

Сообщение diesel »

YUKLA писал(а):
16.11.2009 22:34
Дык - я то пытался и пытаюсь доказать, что на шелле именно программируют! И что шелл-скрипт - инструмент программиста. :tongue:

Хорошо, допустим, что написание строчек на шелле это программирование, тогда кстати стоит вспомнить утверждение что unix - это среда разработки. А еще о том что программирование, само по себе, можно рассматривать не только как самостоятельное отдельное занятие, каковым оно является для программистов, но и как один из инженерных навыков: просто инструмент для построения решений. Тогда все становится на свои места.
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Кто идет на Unix-way

Сообщение Ali1 »

diesel писал(а):
17.11.2009 02:54
но и как один из инженерных навыков: просто инструмент для построения решений. Тогда все становится на свои места.

Поправка.
Образовательный стандарт начального общего образования по информатике и информационным технологиям
Изучение информатики и информационных технологий в начальной школе направлено на достижение следующих целей:
· развитие способностей ориентироваться в информации разного вида; элементов алгоритмической деятельности; образного и логического мышления;
· освоение знаний, составляющих основу информационной культуры;
· овладение умениями использовать компьютерную технику для работы с информацией в учебной деятельности и повседневной жизни[1];
· воспитание интереса к информационной и коммуникационной деятельности; этических норм работы с информацией, бережного отношения к техническим устройствам.
...

Работа с информацией: передача,поиск, преобразование, хранение (в том числе на компьютере). Упорядочение информации по алфавиту и числовым параметрам (возрастанию и убыванию). Построение простейших логических выражений с использованием связок: «и», «для всех», «или» «не». Команда, исполнитель команд, алгоритм. Примеры простейших алгоритмов (в том числе компьютерных).
....
уметь
· выполнять инструкцию при решении учебных задач;
· выполнять несложные алгоритмы;
· работать с текстом и изображением, представленным на компьютере;
· набирать небольшой текст и конструировать простое изображение на мониторе;
использовать приобретенные знания и умения в практической деятельности и повседневной жизни:
· готовить сообщения с использованием различных источников информации;
· использовать доступные компьютерные программы для решения учебных и практических задач.;
· пользоваться компьютером для создания и хранения личных текстов, рисунков, аудио и видео записей.
http://manager-edu.mcfr-ep.ru/material/def...mp;catalogid=29
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: Кто идет на Unix-way

Сообщение Goodvin »

Voral писал(а):
12.11.2009 11:36
t.t писал(а):
12.11.2009 11:26
У меня используются fetcmail + procmail + bogofilter. Первая собирает почту с нескольких (одна из причин, почему мне удобнее работать с почтой локально; вторая -- доступ к сети есть далеко не всегда, когда нужна почта) POP-серверов в один локальный почтовый ящик.

Вы каждый раз набираете 3 команды по отдельности?
Или вы оформили алгоритм своих действий в скрипт?

Подозреваю, что всё значительно проще - их вызывает cron.
Спасибо сказали: