LINUX.ORG.RU

Dovecot переходит на CLang

 , , ,


0

0

Автор популярного IMAP/POP3 сервера Dovecot давно хотел перейти на CLang, но многие важные проверки на возможные ошибки не были реализованы, например проверка на корректность формата в printf() из-за этого и использовался GCC.

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

Были проведены тесты, которые показали, что код собранный CLang работает на 7% быстрее.

Похоже, что это первый из наиболее крупных проектов, которые официально сказали что CLang/LLVM это mainstream.

>>> Оригинал

★★★★★

Проверено: isden ()

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

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

Тяжело писать по стандарту, больно не переносимый он, местами. Опять же, visual studio например не умеет ll в printf :(

catap ★★★★★
() автор топика

У автора водянка?

Dovecot поставляется в виде исходников - чем хочешь (точнее чем можешь) тем и собирай (GCC/PCC/Clang/ICC). Вообще, кто здесь использует самособранный Dovecot? 1%?

Завтра они скажут, что переходят на MSVC/ICC, ибо там невероятное увеличение скорости ещё на ... 0.5% Прикажете всем дистрам срочно выкинуть GCC и пересобирать всё MSVC/ICC?

Куда катится мир.

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

>Похоже, что это первый из наиболее крупных проектов, которые официально сказали что CLang/LLVM это mainstream.

Looks like clang still isn't ready, back to gcc :(


Это пять.
Сколько пафоса, и все впустую.

nnz ★★★★
()

catap, иди спать лучше - скоро на работу! :)

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

~ # CC=clang CXX=clang-c++ emerge -1Bva dovecot

These are the packages that would be built, in order:

Calculating dependencies... done!
[ebuild N ] net-mail/dovecot-1.2.11-r2 USE=«bzip2 ipv6 maildir mysql pam ssl zlib -berkdb -caps -cydir -dbox -doc -kerberos -ldap -managesieve -mbox -postgres -sieve -sqlite -suid -vpopmail» 0 kB

...

Completed installing dovecot-1.2.11-r2 into /var/tmp/portage/net-mail/dovecot-1.2.11-r2/image/



сборка прошла успешно и даже без предупреждений

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

Dovecot поставляется в виде исходников - чем хочешь (точнее чем можешь) тем и собирай (GCC/PCC/Clang/ICC).

Просто однажды придет день, когда он соберется только силэнгом :)

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

> http://llvm.org/bugs/show_bug.cgi?id=6667

чувак хочет «Each undeclared identifier is reported only once for each function it appears in», и это мелочь, на которую противополжные взгляды могут быть

http://llvm.org/bugs/show_bug.cgi?id=6668

Doug fixed this in r 98898.

http://llvm.org/bugs/show_bug.cgi?id=6675

это да, хотя они обещают сделать

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

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

если я правильно понял автора, то его интересуют отнюдь не расширения языка, а удобство и диапазон статических проверок; тут он вправе компилировать чем хочет

ну и скорость тоже

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

>лучше бы писали по стандартам
Значит автор dovecot пусть пишет по стандартам, а то что все остальное (ядро, glibc) заточено под gcc это нормально ?

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

Да, это нормально. glibc - это часть проекта GNU, собираться неГНУ инструментарием оно не обязано никому. Про ядро много говорилось, фактически оно тоже часть проекта, потому что работает в основном в гнушном окружении, а значит нет смысла собирать его сторонними компиляторами.

В общем не надо сравнивать системные компоненты GNU с обычными, относительно кросплатформенными приложениями:)

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

А ничего что сторонним приложениям приходится инклутить заголовочные файлы из glib ? в которых дохрена gcc-specific кода. Тоесть можешь собирать любым - но будет работать только с gcc. Офигеть позиция ;-)

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

оно по идее должно инклудить только glibc

а оно на самом деле достаточно кроскопилируемое

namezys ★★★★
()

7% - это не серьёзно и ничего не доказывает. На одном процессоре оно может быть на 7% быстрее, зато на другом на 10% медленнее.

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

>Простите, вы идиот?

Нет, надеюсь :) Но таким методом отлаживать программы, особенно играя с синтаксисом и по этому параметру выбирая какой компилятор лучше, ИМХО, говорит о некомпетентности разработчика, раз он не может фильтровать входные и исходящие данные. По мне, автор просто хочет или очень надеется, что якобы компилятор должен «телепатически» узнавать все «тонкости» авторского кодинга. За одну такую мысль уже стоит задуматся о надежности такого кода.

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

>я думаю стандарт *не кто* специально ломать не буедт

никто

ппц

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

>вы до сих пор думаете, что в скорости дело?

Ну а в чём же ещё? Чтобы говорить, что оно действительно бытрее, надо протестировать на всех моделях (и даже ревизиях) поддерживаемых процессоров. Это на бумаге они все стандартизированы, а там инженеры могли таких подводных камней понапихать...

kranky ★★★★★
()

r00t@r00t:~$ cat /etc/slackware-version
Slackware 12.2.0
r00t@r00t:~$ clang
-bash: clang: command not found
r00t@r00t:~$

вывод: ФФТОПКУ!!!
не хватало мне только стороннее какое-то поделие устанавливать (а то и собирать) ради какого-то-там довекота.

Слава Хаосу, в GNU достаточно мыльниц (с разумными разработчиками) и без этого поделия.

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

r00t@r00t:~$ cat /etc/slackware-version
Slackware 12.2.0
r00t@r00t:~$ clang
-bash: clang: command not found
r00t@r00t:~$

вывод: ФФТОПКУ!!!

Я смотрю ты прям полномасштабное исследование провел, ага.

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

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

> Но таким методом отлаживать программы, особенно играя с синтаксисом и по этому параметру выбирая какой компилятор лучше, ИМХО, говорит о некомпетентности разработчика, раз он не может фильтровать входные и исходящие данные. По мне, автор просто хочет или очень надеется, что якобы компилятор должен «телепатически» узнавать все «тонкости» авторского кодинга. За одну такую мысль уже стоит задуматся о надежности такого кода.

Видите ли какое дело, людям свойственно ошибаться. Поэтому чем больше будет возможностей отлавливать ошибки в коде автоматически — тем лучше. То, что автор заботится об этом, как раз положительно характеризует его. Насчет «не может фильтровать входные и исходящие данные» — не понял.

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

>> вы до сих пор думаете, что в скорости дело?

Ну а в чём же ещё?

1. лицензия

2. глубина статического анализа

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

Молодой человек, о Вашем уровне (не)компетенции (нужное - подчеркнуть) говорит Ваш блог вообще и конкретно пост от 16.01.10. В котором Вы хвалитесь тем фактом, что таки сумели освоить mod_rewrite (честь Вам и хвала!).

У меня же почтовый сервер в пике обрабатывает до 200 писем в секунду. И, хотя на этом сервере dovecot работает уже 1.5 года (и, кстати, аптайм сервера сейчас 482 суток), меня совершенно не радует заманчивая перспектива пользоваться нестабильным и плохо оттестированным софтом, которым CLang, без сомнения, является: хотели «как лучше», а получилось «как всегда». В настоящий момент я не вижу альтернативы GCC.

И если Вам (от безделья или школьных понтов) сильно хочется покрасоваться перед девочками и выпендриться, то лично мне хочется, чтобы хорошо сделанный, отлаженный и стабильный софт просто работал.

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

http://zi.fi/shots/clang.png

однозначно позитивный скриншот

кстати, приведу еще позитивчика:

gcc:
test2.cxx:12: error: ‘struct Alias<n, D>::Arr’ is not a type

clang:
test.cpp:12:63: error: missing 'typename' prior to dependent type name 'Alias<n, D>::Arr'
template<uint n, class D> float scalar_product( Array<D>& x,  Alias< n, D >::Arr& y ) { return 0; }
                                                              ^~~~~~~~~~~~~~~~~~
                                                              typename 

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

Dovecot не без причины считается лучшим и секурным IMAP-сервером, а красноглазить не стоит. Пусть автор юзает для разработки то, что ему удобно, если это приносит такой результат.

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

>Насчет «не может фильтровать входные и исходящие данные» — не понял.

I actually wanted to start using clang a long time ago, but it didn't give enough warnings. Many important warnings, like not verifying printf() parameters, were completely missing. So I kept using gcc..


Не спорю о профессионализме, но отладка параметров функции решается многими методами, авторский путь мне не ясен по своей нелогичности. Во-первых, можно взглянуть во внутрь clang/gcc и обратится прямо к нужным функциям, можно _подумать_ головой о том, какие же я данные собираюсь отдать в функцию?
То чем занимается автор больше подходит на «хакинг» clang'а и его дебаг в поисках уязвимых мест, за это конечно респект. Но вот на основе этого выбирать компилятор для своей программы, вместо рефакторинга кода, включения дополнительных проверок и т.п., мне видимо не понять.

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

Тут уже нарисовали приколов из CLang'а.
И, подозреваю, ещё больше косяков вылезет, если ЭТО попробовать собрать под х86_64 (или вообще под отличную от х86 архитектуру).

Dovecot не без причины считается лучшим и секурным IMAP-сервером


Нууу. Далеко не всё так хорошо в Датском Королевстве. Тем не менее, для сельской местности сойдет.

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

особый прикол в том, что ж++, говоря «‘struct Alias<n, D>::Arr’ is not a type», врал мне в глаза — он *являлся* типом, т.к. других специализаций просто не было; да, ж++ имел по стандарту полное право об этом не знать, но зачем же врать?

а вот clang насчет typename прав на 100%

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

у меня нет не почтового сервера, не толком http

не мои это задачи и жутко мне не интересные

clang уже используется apple как инструмент статического анализа (да, это пока еще не компилятор, который к продакшену)

с другой стороны должно быть очевидно, что в условиях линукса отказ от gcc будет равнозначен уходу с linux. Поэтому, если даже автор лично будет пользоваться clang, это не будет значит, что он не будет собираться с помощью gcc (тем более clang более чист, в плане стандарта)

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

> И, подозреваю, ещё больше косяков вылезет, если ЭТО попробовать собрать под х86_64 (или вообще под отличную от х86 архитектуру).

clang вообще от архитектуры независит

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

> Во-первых, можно взглянуть во внутрь clang/gcc и обратится прямо к нужным функциям

Это как? Вот есть форматная строка с стиле printf, есть код, который вызывает этот printf. Требуется чтобы компилятор проверил корректность этой строки. Куда вы собрались глядеть?

можно _подумать_ головой о том, какие же я данные собираюсь отдать в функцию?

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

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

А сервера у Вас, Великий и Могучий Системный Администратор, тоже на слаке? В любом случае, не вижу ни одной причины использовать это поделие вообще где-то. Тем более, с Вашей-то позицией.

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

Похоже, что это первый из наиболее крупных проектов, которые >официально сказали что CLang/LLVM это mainstream.


Автор не совсем в теме. Apple - главный спонсор, «говорит» об этом уже
несколько лет.
мои две копейки в топку (LLVM C++ interpreter):
http://cern.ch/onuchin/LLVM/

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

> у меня нет не почтового сервера, не толком http

Выучите уже русский, пожалуйста. Читать противно. В данном предложении нужно использовать частицу «ни» вместо «не» в обоих случаях.

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

>Apple - главный спонсор, «говорит» об этом уже несколько лет.

Они уже собирают ним свою макось? Нет? Почему же? Не готово для продакшена?

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

>А есть тут умельцы, собравшие clang'ом генту?

Как успехи?


отдельные второстепенные пакеты собирала им, прекрасно работает, пока без нареканий, целиком - не пробовала

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

У меня позиция достаточно ясная:
если система проходит аудит PCI DSS, значит оно вполне приемлемо.

Slackware, как раз, входит в список рекомендованных ОС для PCI DSS.

А вот будет ли входить в тот список собранный CLang'ом софт - лично для меня большая загадка. И, почему-то, есть мнение, что не будет.

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

Хм. Окей. Я бы попробовал, но там пока плюсы только в транке, AFAIK. Как-то даже лениво шевелиться. Но раз им уже и boost почти собрали, и qt - скоро можно будет.

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

> У меня позиция достаточно ясная: если система проходит аудит PCI DSS, значит оно вполне приемлемо.

и каким образом слака или Dovecot к PCI DSS?

(прочел оттуда 5. Use and regularly update anti-virus software on all systems commonly affected by malware... глубоко задумался...)

www_linux_org_ru ★★★★★
()

Новость непонятно о чём. Эмоциональное что-то кого-то, кто хочет побыстрее закопать gcc.

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