Что точно Вы видите? Со сценарием
opts="-x ''"
echo curl http://somepage $opts
opts="-x \'\'"
echo curl http://somepage $opts
С ударом 3.2.39 или 4.1.5, я вижу
+ opts='-x '\'''\'''
+ echo curl http://somepage -x ''\'''\'''
curl http://somepage -x ''
+ opts='-x \'\''\'\'''
+ echo curl http://somepage -x '\'\''\'\'''
Первый вызов к curl
(хорошо, echo curl
) имеет последний аргумент, состоящий из двух символов ''
. Трассировка выходит из специальных символов: '
появляется как '\''
(общая идиома, чтобы “выйти” из одинарных кавычек в одинарных кавычках). Официально, ''\'''\'''
состоит из пустой единственно заключенной в кавычки строки ''
сопровождаемый заключенным в кавычки из обратной косой черты символом \'
, с другой стороны ''
, снова \'
, и финал ''
. (Ksh показывает это как немного более читаемое $'\'\''
.) Второй вызов передает четыре символа \'\'
.
Под нормальным sh анализирующие правила Вы не можете привести пустой аргумент путем расширения неупомянутой переменной. Word, разделяющий сокращения только там, где существует непробел или заключенный в кавычки символ.
Так как Вы используете удар, можно поместить несколько опций в массив. Это также работает в ksh и zsh.
opts=(-x "")
curl http://somepage "${opts[@]}"
Для этого конкретного случая можно переопределить переменную среды вместо этого.
http_proxy= curl http://somepage
Сводка: основная причина переключения с GCC для Лязга является несовместимостью лицензии GPL v3 GCC с целями проекта FreeBSD. Существуют также политические вопросы, чтобы сделать с корпоративными инвестициями, а также требованиями базы пользователей. Наконец, там ожидаются технические преимущества, чтобы сделать с соответствием стандартов и простотой отладки. Повышения производительности реального мира в компиляции и выполнении являются определенными для кода и спорными; случаи могут быть сделаны для обоих компиляторов.
FreeBSD и GPL: FreeBSD имеет неудобные отношения с GPL. Защитники BSD-лицензии полагают, что действительно бесплатное программное обеспечение не имеет никаких ограничений использования. Защитники GPL полагают, что ограничения необходимы для защиты свободы программного обеспечения, и конкретно что способность создать небесплатное программное обеспечение из бесплатного программного обеспечения является несправедливой формой питания, а не свободы. Проект FreeBSD, если это возможно, старается избегать использования GPL:
Из-за дополнительных сложностей, которые могут развиться в коммерческом использовании программного обеспечения GPL, мы действительно, однако, пытаемся заменять такое программное обеспечение представлениями в соответствии с более расслабленной лицензией FreeBSD, когда это возможно.
FreeBSD и GPL v3: GPL v3 явно запрещает так называемый Tivoisation кода, лазейки в GPL v2, который позволил аппаратным ограничениям запретить в других отношениях легальные модификации программного обеспечения пользователями. Закрытие этой лазейки было недопустимым шагом для многих в сообществе FreeBSD:
У поставщиков устройства в особенности есть большинство, чтобы проиграть, если большое тело программного обеспечения, в настоящее время лицензируемого под GPLv2 сегодня, мигрирует на новую лицензию. У них больше не будет свободы использовать программное обеспечение GPLv3 и ограничить модификацию программного обеспечения, установленного на их аппаратных средствах... Короче говоря, существует большая база потребителей OpenSource, которые внезапно очень интересуются пониманием, что альтернативы GPL лицензировали программное обеспечение.
Из-за перемещения GCC к GPL v3 FreeBSD был вынужден остаться использовать GCC 4.2.1 (GPL v2), который был выпущенным путем назад в 2007 и теперь значительно устарел. То, что FreeBSD не перемещался для использования более современных версий GCC, даже с дополнительными головными болями обслуживания выполнения старого компилятора и бэкпортирования, фиксирует, дает некоторое представление о силе требования для предотвращения GPL v3. Компилятор C является главным компонентом основы FreeBSD, и "одной из (предварительных) целей для FreeBSD 10 является система GPL-свободной-основы".
Корпоративные инвестиции: Как много главных проектов с открытым исходным кодом, FreeBSD получает финансирование и техническую разработку от корпораций. Хотя степень, которой FreeBSD финансирован или дан разработку Apple, не является легко поддающейся обнаружению, существует значительное перекрытие, потому что Darwin Apple ОС использует существенный BSD-порожденный код ядра. Кроме того, сам Лязг был первоначально внутренним проектом Apple, прежде чем быть открыто полученным в 2007. Так как корпоративные ресурсы являются ключевым фактором проекта FreeBSD, удовлетворение потребностей спонсора является, вероятно, значительным реальным драйвером.
База пользователей: FreeBSD является привлекательной опцией с открытым исходным кодом для многих компаний, потому что лицензирование просто, нестрого и маловероятно привести к судебным процессам. С прибытием GPL v3 и новых anti-Tivoisation условий, было предложено, чтобы было ускорение, управляемая поставщиками тенденция к большему количеству разрешающих лицензий. Так как воспринятое преимущество FreeBSD для коммерческих объектов заключается в своей разрешающей лицензии, там увеличивает давление базы корпоративных пользователей для отодвигания от GCC и GPL в целом.
Проблемы с GCC: Кроме лицензии, с помощью GCC имеет некоторые воспринятые проблемы. GCC не является совместимыми полностью-стандартами, и имеет много расширений, не найденных в стандарте ISO C. В более чем 3 миллионах строк кода это - также "один из самых сложных и бесплатных проектов / проектов программного обеспечения с открытым исходным кодом". Эта сложность делает модификацию кода уровня дистрибутива сложной задачей.
Технические преимущества: Лязг действительно имеет некоторые технические преимущества по сравнению с GCC. Самый известный намного более информативные сообщения об ошибках и явно разработанный API для IDE, рефакторинга и аналитических инструментов исходного кода. Хотя графики подарков веб-сайта Лязга, указывающие на намного более эффективную компиляцию и использование памяти, результаты реального мира являются довольно переменными, и широко в соответствии с производительностью GCC. В целом, Произведенные из лязга двоичные файлы, выполняемые более медленно, чем эквивалентные двоичные файлы GCC:
В то время как использование LLVM быстрее в строительных нормах и правилах, чем GCC... в большинстве экземпляров, которые созданные двоичные файлы GCC 4.5 выполнили лучше, чем LLVM-GCC или Лязг... в остальной части тестов, которыми производительность была или близко к тому из GCC или далеко позади. В некоторых тестах производительность сгенерированных двоичных файлов Лязга была просто ужасна.
Заключение: очень маловероятно, что эффективность компиляции была бы значительным фактором мотивации для взятия на себя существенного риска перемещения крупного проекта как FreeBSD к совершенно новому набору инструментальных средств компилятора, особенно когда двоичной производительности недостает. Однако ситуация не была действительно надежна. Учитывая выбор между 1) выполнением устаревшего GCC, 2) Перемещением в современный GCC и быть вынужденным использовать лицензию, несовместимую с целями проекта или 3) перемещением в стабильный BSD-лицензированный компилятор решение было, вероятно, неизбежно. Примите во внимание, что это только относится к основной системе и поддержке со стороны распределения; ничто не препятствует тому, чтобы пользователь установил и использовал современный GCC на их поле FreeBSD самостоятельно.
Я не эксперт, но мое понимание является Clang/LLVM, использует меньше ресурсов, чем GCC и более быстр.
http://clang.llvm.org/features.html#performance
При выполнении среды, где необходимо создать много материала, много времен, та производительность может превратиться в реальные сбережения в затратах на энергию и время. Если это реально.
Одна вещь достойная рассмотрения состоит в том, что FreeBSD в настоящее время использует GCC 4.2.1, как отмечено в ire_and_curses, отвечают таким образом, что сравнения производительности не имеют 4,5, или даже 4.6 не действительно относятся к проекту. Поэтому вопросы, которые необходимо задавать:
Каково увеличение производительности нового Лязга по сравнению с более старым GCC, который использует проект?
Как делают те же двоичные файлы, скомпилированные в GCC 4.2.1, выдерживают сравнение с новым Лязгом?
Из-за перемещения GCC к GPL v3 FreeBSD был вынужден остаться использовать GCC 4.2.1 (GPL v2), который был выпущенным путем назад в 2007 и теперь значительно устарел.
Если Лязг отстает от текущего GCC, но является все еще световыми годами перед реализованным GCC в проекте затем, их решение развиться хорошо гарантировано и действительно вдохновлено.
Даже при том, что GCC является GPLv3, получающиеся двоичные файлы, произведенные GCC никогда, не имели ограничения лицензии. В ясном можно использовать GCC для создания программного обеспечения, которое подпадает под лицензию, которую Вы хотите. Даже библиотека C, которая идет с GCC и это включено в двоичный файл, без лицензий. http://www.gnu.org/licenses/gcc-exception-faq.html
Разделите 2 из GNU GPLv3:
У Вас есть разрешение распространить работу Целевого Кода, сформированного путем объединения Библиотеки времени выполнения с Независимыми Модулями, даже если такое распространение иначе нарушило бы условия GPLv3, при условии, что весь Целевой Код был сгенерирован Имеющими право Процессами компиляции. Можно затем передать такую комбинацию в соответствии с условиями по Вашему выбору, согласовывающийся с лицензированием Независимых Модулей.
“Имеющий право” означает, что компиляция не включает и GCC и GPL-несовместимое программное обеспечение. Это не ограничение: BSD-лицензированное программное обеспечение может использоваться в процессе сборки, включающем GNU GCC.
Как Вы видите, вопреки тому, что было сказано выше, нет никакой РЕАЛЬНОЙ связанной с лицензией причины переехать от GCC, поскольку нет никакой несовместимости с использованием GCC в FreeBSD.
Настоящая причина позади этого изменения является политической и оппортунистической:
Эти факты создают возможность для FreeBSD, чтобы переехать от GCC и избавиться от него: они на самом деле по закону не вынуждены, поскольку они могли все еще использовать GCC для создания бесплатного или BSD-лицензированного программного обеспечения, но они хотят придерживаться лицензируемого программного обеспечения "всего BSD" философия.
license of compiler != license of end product
. Жалобы на лицензию компилятора не могут возможно быть релевантными, если пользователь не понимает лицензию.
– Brandin
06.09.2014, 11:42