LINUX.ORG.RU

Классический UNIX-way или «компьютер для профессионала»


0

0

В процессе написания статьи для свободного сборника <<Дары Свободы -- Свободное программное обеспечение: прошлое, настоящее, будущее>> решил, что больше пользы будет, если в процессе написания я учту ваши комментарии, пожелания, мысли и идеи.

>>> Подробности

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

> Если не упоминать OO, который действительно не unix-way как программа, но unix-way по духу (т.е. a) что его разрабатывало community b) что он является заменой ОО - чего не хватает, пишем сами), то как произвести впечатление на людей, работающих с doc (как я, например)?

Ты путаешь UNIX-way и GNU-way, это принципиально разные вещи. Первое это _технология_, второе это _идеология разработки_

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

Классический UNIX-way или

> Т.е. у тебя система не на C написана?

То что линукс дерьмовая поделка не говорит о том, что есть что-то лучше :)

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

perl в подобных тестах делает sh на порядки. Вывод: долой shell, да здравствует perl?

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

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

А XML - это Unix-way 2, так как text и хорошо подходит для сложноконфигурируемых программ. На что похож конфиг apache,proftpd?

И если говорить про regexp/pattern, то и про лексические и синтаксические анализаторы можно упомянуть.

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

>БАШ ТОРМОЗНЕЕ В 4 РАЗА! Долой башизмы-линуксизмы из скриптов!

Ну не стоит так на bash наезжать. Из моего скромного опыта самый навороченый мой скрипт должен был взять оклоло 600 .wav файлов, переделать их в ogg и сделать тэги в соответствии с именим файла/католога. И я бы несказанно удивился, если бы sh сделал эту работу в 4 раза быстрее. Для справки: на моей машине эти 600 трэков пережимались около семи часов.

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

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

То есть, пардон ~160 файлов^ а не 600. И более пяти тысяч лет. Забыл уже всё по старости лет.

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

2anonymous (*) (25.01.2004 17:52:39):

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

В Perl проблемы и с читаемостью, и в неудобстве работы с функциями,
и в неудобстве работы со структурами данных. :-)

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

> А где упоминание о PHP. Большая часть инета написана именно на этом языке

наверное там же где и упоминание о HTML, на нем еще большая часть инета написана :)

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

> В Perl проблемы ... и в неудобстве работы с функциями,

В чем именно неудобства? По сравнению с чем?

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

Надо полагать передачей параметров только списком и никаким другим образом. А по сравнению с OCaml например.

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

> Надо полагать передачей параметров только списком и никаким другим образом.

а) Ну тем, кому нужен именно список, это очень удобно.

б) Как еще можно передавать параметры и чем это удобнее?

в) С момента появления в перле ссылок, передача параметров списком проблемой не является.

> А по сравнению с OCaml например.

Гы-гы-гы. В ocaml функция может получить только один параметр.

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

>i=0 >j=0 >while [ ! "$i" = '1000000' ] >do > while [ ! "$j" = '100' ] > do > j=$(( $j + 1 )) > done > i=$(( $i + 1 )) >done

в школу бегом. учиться основам программирования.

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

Вот у меня в отделе работает молодой человек, так он поначалу тоже всем достоинства bash приводил... Первый скрипт, который он закоммитил в девелопмент ветку начинался со строки

#!/usr/bin/bash

На что ему вежливо сказали: "хочешь bash, пользуйся, мы все свободные люди. Только портировать его под все платформы, где работает наш софт, будешь сам. В свободное от работы время."

UNIX-way не только в пайпах и "каждая софтина делает свою маленькуя часть, но делает это хорошо", но еще и в стандартах. Если sh стандарт, то и скрипты должны писаться в рассчете на него. А что ты используешь в качестве нтерактивного шелла - это твое личное дело. Почему-то люди, использующие большую часть времени BSD, это понимают. Наверное потому, что у них интерактивный шелл - tcsh.

Башизмы в скриптах - давить.

Baka-kun
()
Ответ на: комментарий от anonymous

>Гы-гы-гы. В ocaml функция может получить только один параметр.

Да, только там не параметр, а функцию, так что проблем не возникает.

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

б) Как еще можно передавать параметры и чем это удобнее?

Для программирования гуйни надо полагать метки(labels) не плохо катят, можно значения по умолчанию задавать и порядок не важен, когда много параметров код будет компактнее.

в) С момента появления в перле ссылок, передача параметров списком проблемой не является.

Так о том и речь, что путь есть, но не самый удобный, требует дополниельной возни с разименовыванием ссылок. Но зато наверное простой в релизации, те же классы реализованы на ссылках c именами, довольно своеобразно :-)

Думаю было бы классно добавить в Perl некоторые фичи, с сохранием совместимости, если возможно. А если уж совместимости не будет, то можно кардинально изменить/улучшить некоторые вещи. Хотя, по-хорошему, новый синтаксис было бы правильно сделать опциональным в виде параметра к интерпретатору.

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

И не получить, а вернуть. Но в чем удобство по сравнению с perl? Что perl не может получить/вернуть ссылку на функцию? :)

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

> Для программирования гуйни надо полагать метки(labels) не плохо катят, можно значения по умолчанию задавать и порядок не важен, когда много параметров код будет компактнее.

Ну именованные параметры (и их значения по-умолчанию) в perl давно можно было делать. Правда с хреновой эффективностью.

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

Можно и пример рассмотреть:

01:### perl ############
02:my @a = ();
03:my @b = ();
04:my @c = ();
05:my @d = ();
06:
07:sub test {
08:    my @a = @{shift @_};
09:    my @b = @{shift @_};
10:    my @c = @{shift @_};
11:    my @d = @{shift @_};
12:}
13:
14:test(\@a,\@b,\@c,\@d);
15:######################

01:(*** ocaml **************************)
02:let a = [] in
03:let b = [] in
04:let c = [] in
05:let d = [] in
06:
07:let test a b c d = () in test a b c d
08:(************************************)

Одно и тоже, но во втором случае короче почти в 2 раза.
В Perl по сути два раза передаваемые параметры описываем, вместо
одного. Неужели незаметно? С ссылками на функции все тоже самое,
много лишней письменности :)

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

>Ну именованные параметры (и их значения по-умолчанию) в perl давно можно было делать. Правда с хреновой эффективностью.

Пример можно?

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

> 07:sub test {
> 08: my @a = @{shift @_};
> 09: my @b = @{shift @_};
> 10: my @c = @{shift @_};
> 11: my @d = @{shift @_};
> 12:}

Ну это несерьёзно.

anonymous
()
Ответ на: комментарий от Baka-kun

2Baka-kun Хоть они и стандарты, но меняются. Старый стандарт остается, новый появляется. Правда старый становится никому не нужен, новый его вытеснил - это и есть изменение стандарта. Bash стандарт де-факто в Linux'е. Пока.

> Башизмы в скриптах - давить.

Правильно. Если этого не делать, то bash станет UNIX-стандартом, а оно вам надо? :-)

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

Большая часть софта наваленная в порты FreeBSD была написана авторами изначально под Linux'ом. А в дальнейшем его будет еще больше. Может пора начинать привыкать, а не давить?

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

Ага. И стили мне туда, пожалуйста, и шрифты. Потому что с меня их требуют.
catdoc...
Им только читать, и то, хреновато местами.

jackill ★★★★★
()
Ответ на: комментарий от Baka-kun

Дык напиши
#!/bin/sh

И не используй чего-то особого, характерного для данной оболочки и будет тебе везде счастье.

P.S. Учитывая растущую долю линукса и то, что у него по умолчанию bash, как думаешь, через сколько он станет стандартом де-факто?

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

> Правильно. Если этого не делать, то bash станет UNIX-стандартом, а оно вам надо? :-) Слава богу не все так рассуждают, иначе мы бы просто не имели бы того, что есть сейчас ... Может пора начинать привыкать, а не давить?

Вот у меня в системе изначально стоит линк sh->bash, так что все скрипты с #!/usr/bin/sh и #!/usr/bin/bash делают одно и то же. Так что, прописываю везде sh и никаких проблем с привыканием :)

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

> Во-вторых, помимо emacs и vi(m) есть туева хуча (не менее 400) других текстовых редакторов (в смысле их вовсе не два, как видно некоторым уважаемым win-программистам).

Ja dumau chto sleduet upomjanut' pro FTE ili Jed. Tak kak oni ochen' neplohi dlja novichkov.

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

> http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch10_08.htm
> Классику нужно читать :)

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

use strict;
sub abc {
    my %args = (a => 'a', b => 'b', @_);
    sleep 3; print $args{a},$args{c},"\n";
}
abc(a => 2);

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

Сразу видно, что обработки исключений в языке не хватает.

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

> Это обычный анонимный хеш,

Массив. Процедуре передается массив. Хэшем он становится уже внутри.

> как говорится ещё один способ не делать именованные параметры, а пользоваться тем, что есть.

Это именно именованные параметры. Или нечто внешне от них неотличимое.

> В любом языке, можно передавать хеш в функцию и будет тоже самое. Единственная разница, что в Perl хеш является встроенным типом данных и это ещё более менее смотрится.

Ага! Признаешься.

> Фигня только в том, что если какой-то параметр не задать, то ошибка появится в процессе выполнения, а не при запуске приложения.

Ты пример то смотрел?

> my %args = (a => 'a', b => 'b', @_);

my %args = (a => 'a', b => 'b', c =>'c', @_)

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

Или задать разумные значения по умолчанию.

> Сразу видно, что обработки исключений в языке не хватает.

Ну не знаешь ты perl, тогда зачем ругаешь? Hint: die & eval;

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

>Ну это несерьёзно. Это не аргумент :) К тому же, если рассмотреть что-то более сложное, чем передачу массивов или хешей, то еще более громоздко получается.

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

Несерьёзно в том смысле, что человек, действительно знающий perl, так никогда не напишет.

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

> Шел бы тогда куда подальше от написания статьи, раз у тебя линукс - дерьмовая поделка.

Ну а что я могу поделать, если софта не являющегося дерьмоом исчезающе мало? Ну TeX, например есть, но он не операционная система. Операционных систем не дерьмовых поделок нет вообще.

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

С таким отношением у тебя и статья получится аналогичная.
Нет и не видел - разные вещи.

Посмотри на qnx, plan9.

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

А как много OS Вы видели в своей жизни, чтобы делать такие громкие
заявления?

Почитали бы чего-нибудь для начала, например про Reliant Unix :)

Sun-ch
()
Ответ на: комментарий от jackill

jackill (*) (26.01.2004 8:13:51):

>P.S. Учитывая растущую долю линукса и то, что у него по умолчанию bash, как думаешь, через сколько он станет стандартом де-факто?

anonymous (*) (26.01.2004 3:13:20):

>Большая часть софта наваленная в порты FreeBSD была написана авторами изначально под Linux'ом. А в дальнейшем его будет еще больше. Может пора начинать привыкать, а не давить?

Классическая логика виндузоидов (только s/Linux/Windows/). Попытка быть маленькими бИЛЛАМи гЕЙТСами. Только вышли за 2% на десктопе, а уже такие понты! Если руководствовать ЭТОЙ логикой, то "Учитывая растущую долю Виндовса и то, что у него по умолчанию CMD.EXE, как думаешь, через сколько он станет стандартом де-факто?". И ещё "Может пора начинать привыкать, а не давить?"

:-)

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

Классисческая логика бсд-оида, заходящегося в религиозном экстазе. У самих половина утилит в системе представляет самопальные поделки, и некоторые до сих пор не соотвествуют посиксу, система сделана по принциму "как угодно, но шоб SysV несовместимо", а туда же - упрекать gnu в несоблюдении стандартов. Вот будет завтра (через год) bash стандартизирован, как тогда отмазываться будешь? :)

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

>Массив. Процедуре передается массив. Хэшем он становится уже внутри.
Согласен.

>Ты пример то смотрел?
Да я о другом, об ошибке программера, и где она всплывет, в случае чего.

>Ага! Признаешься.
Кстати, еще один способ задавать дефолтные значения:
my $a = shift || 'x';

>Ну не знаешь ты perl, тогда зачем ругаешь? Hint: die & eval;
Да я и не ругаю, мне нравится, просто сравниваем.

die & eval - из этого немного не то получилось, что нужно было.
Нет специального типа для исключений. А реализация через die,
как-то не впечатляет, так как строки в die пишут самые разные,
и обрабатывать потом $@ не очень удобно. Конечно позволяет
проге не сдохнуть преждевременно, но из-за такой реализации не так
часто используется, как могло бы.

>http://search.cpan.org/~pjordan/Exception-1.4/Exception.pm
вот это уже похоже на исключения, но внешние.

>Несерьёзно в том смысле, что человек, действительно знающий perl, так никогда не напишет.

my @a = @$_[0]; # можно и так
Это обыкновенная передача массива по значению так выглядит, я же 
не сам это придумал. Можно и через ссылки работать, о чем речь.

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

>Вот будет завтра (через год) bash стандартизирован, как тогда отмазываться будешь? :)

Вот будет bash стандартизирован, буду не отмазываться, а использовать. В чём проблемы? Вообще непонятно, почему вызывает (религиозное?) неприятие призыв писать переносимые, соответствующие стандартам программы (а скрипты это те же программы). Ну понятно, многим хочется быть Гейтсами и не плевать только на те стандарты, которые сам придумал и заставлять других плясать под свою дудку. Только это не совместимо со свободой, о которой многие здешние сектанты орут на каждом углу (впрочем, как доходит до дела, оказывается, что для них это просто слова). К тому же много Гейтсов Земля не прокормит. Его и одного-то слишком много для этой маленькой планеты. :-(

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

Некорректное сравнение.
cmd.exe не портировано ни под одну unix-подобную систему.
Зато bash мы можем, насколько я помню, понаблюдать даже на windows...

Ощущаешь разницу? ;)

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

> Вот у меня в системе изначально стоит линк sh->bash, так что все скрипты с #!/usr/bin/sh и #!/usr/bin/bash делают одно и то же. Так что, прописываю везде sh и никаких проблем с привыканием :)

Как правильно заметил мистер Хайд, писать необходимо #!/bin/sh, чтобы везде работало. Но это только половина дела: не нужно использовать специфических для bash конструкций в скриптах. Т.е. быть последовательным: сказал "sh", скажи и "бэ".

Baka-kun
()
Ответ на: комментарий от Alex_M

Не путайся. Причем тут переносимость?

Ты говорил про скорость. Да, скорость - г.вно. Для твоих циклов.

Тебе справедливо заметили, что математику нужно считать где-нить еще.

А вместо
#!/bin/bash все нормальные люди пишут #!/bin/sh, ибо симлинк sh на
bash прокинут по-умолчанию.

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

>Не путайся. Причем тут переносимость? Ты говорил про скорость. Да, скорость - г.вно. Для твоих циклов. Тебе справедливо заметили, что математику нужно считать где-нить еще.

Я говорил и про скорость и про переносимость. Ладно, скорость в скриптах не очень важна, хотя и за неё надо бороться. А что не даёт иметь в системе sh? Религия? Или за 125K (если sh собран динамически) дистроклепателей жаба давит? Для сравнения бинарник баша весит 550K в динамической сборке.

>А вместо #!/bin/bash все нормальные люди пишут #!/bin/sh, ибо симлинк sh на bash прокинут по-умолчанию. Этого мало! Кроме #!/bin/sh нужно ещё избегать башизмов в тексте скрипта. Тем более, что без них легко обойтись в 99% случаев. А для остального 1% существует perl. Тогда всё везде будет работать.

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

> Ну не стоит так на bash наезжать. Из моего скромного опыта самый навороченый мой скрипт должен был взять оклоло 600 .wav файлов, переделать их в ogg и сделать тэги в соответствии с именим файла/католога. И я бы несказанно удивился, если бы sh сделал эту работу в 4 раза быстрее. Для справки: на моей машине эти 600 трэков пережимались около семи часов.

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

"арифмометр" мля... все это время ест ogg, а не шелл

"я вчера в куртке на работу за 30 минут доехал, а сегодня в пальто только за час. в куртке оно в 2 раза быстрее, однако"

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

> "арифмометр" мля... все это время ест ogg, а не шелл

Слушай, у тебя в роду жирафы были?

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

Ну лично я не люблю, когда у меня что-то дублируется. Достаточно того,
что на случай атомной войны есть ash.
Больше программ - больше вероятность поломки и т.п.
Поэтому все программы, дублирующие друг друга, у меня убиты (кроме браузеров -
показывал бы konqueror страницы попрямее - и mozilla бы выкинул), чего
и тебе желаю.

P.S. Опять же, тут уже вопрос привычки - тот же bash можно собрать где угодно.

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