[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Нужен ли bash



On Tue, Sep 30, 2008 at 03:00:34PM +0300, Dmitry Nezhevenko wrote:
> > > назови платформу где не работает make?
> > 
> > Любая, на которой не работает shell.
> 
> Это Ваши слова?
>  
> Вы все еще продолжаете утверждать, что make (кстати какой make? GNU?)
> не работает на платформах, где нет шелла? Несмотря на то, что я привел
> два примера (реальный и не очень), где make легко применяется без
> наличия шелла. 

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

> Таким образом, make может работать на платформах без шелла. Да, он не
> будет поддерживать все его фичи, но он будет работать. Например, им
> можно будет собирать софт из исходников :)

Соберите мне GNU hello без шелла.

> > > make -- штука достаточно универсальная. Им можно собирать софт из
> > > исходников, LaTeX документы, ну и др. Им же можно и шелл запускать
> > > (явно или неявно).
> > 
> > Кто с этим спорит?
> 
> Вы :)

Неправда. Где я сказал, что мейком нельзя собирать что-то из исходников
или компилировать документы LaTeX? Я утверждаю только, что эта система
сборки непереносима, т.к. вплотную завязана на шелл.

> > Some implementations do not use system() for all command lines, as
> > required by the portable makefile format; as a performance enhancement,
> > they select lines without shell metacharacters for direct execution by
> > execve(). There is no requirement that system() be used specifically,
> > but merely that the same results be achieved. The metacharacters
> > typically used to bypass the direct execve() execution have been any of:
> >   =  |  ^  (  )  ;  &  <  >  *  ?  [  ] :  $  ‘  ’  "  \  \n
> 
> Спасибо, читал. Это лишь говорит о том, что make для некоторой части
> команд (в которых используется синтаксис шелла) шелл нужен. В то же
> время GNU make умеет в большей части случаев обходиться без шелла. И
> ни кто не запрещает использовать в make только шелл-независимые вещи.

Так ведь это как раз и есть непереносимость. Стандарт говорит: правила
исполняются шеллом. Значит, шелл должен быть. Правда
_некоторые_реализации_ могут исполнить _часть_ команд и без шелла, но
это всего лишь частный случай, особенность реализации. Такой мейкфайл
можно написать, но произвольный мейкфайл, взятый наугад из произвольного
проекта с вероятностью 99,9% таким свойством обладать не будет.


-- 
Andrey V. Kiselev
ICQ# 26871517


Reply to: