среда, января 11, 2006

Советы по написанию портируемого кода от разработчиков Мозиллы

Набрела тут на мозилловские C++ Portability странички. Кому лучше знать про написание портируемого кода, чем разработчикам кроссплатформенного браузера.
Чего они хотели добиться: чтобы код компилировался без приключений в различных версиях одного и того же компилятора, также чтобы он компилировался разными компиляторами, на разных платформах. Они предупреждают, что портируемый код не бесплатен. Он требует большего объема тестирования, более глубоких знаний от программиста. Также накладывается ограничение на использование библиотек.

Чего собственно советуют: следовать стандарту, иметь копию стандарта при себе. Избегать "темных углов": нестандартных библиотек, специфических фич любимого компилятора. Знать о дефектах языка. Обращать внимание на ворнинги и исправлять их.
Из библиотек рекомендуют только STL и boost.

Один из разработчиков, Скотт Коллинз, рассказывает какие они приняли решения для обеспечения портируемости кода, какие из них оказались хорошими, а какие не очень.
Из плюсов Скотт упоминает регулярное тестирование кода на различных платформах, на различных компиляторах. Также они изобрели тулзы для поддержки портируемости. Это, например, XUL - язык описания интерфейсов.
Из минусов: не использовали исключения, не использовали STL, не использовали темплейты. Написали аналог COM'а, кроссплатформенный COM, XPCOM (Cross Platform Component Object Model). Сам по себе XPCOM не такой уж и плохой, однако, по мнению Скотта, его использование было оправдано в весьма небольшом количестве специфических мест, а его где только не использовали, включая места где это было совершенно не нужно.

В процессе разработки Мозиллы был составлен C++ portability guide. Это сборник правил, которыми руководствовались разработчики Мозиллы для обеспечения портируемости кода. Он составлен по результатам портирования кода на 25 разных машин и около дюжины компиляторов. Он несколько устарел, правила там драконовские. Как сказано выше, один из его составителей, Скотт Коллинз, признал, что некоторые из них, например отказ от исключений и от STL, были ошибочными.

Ссылки по теме:
Домашняя страничка Скотта Коллинза
Блог Скотта Коллинза

7 коммент.:

Ivan Sagalaev комментирует...

XUL это все таки не "тулза для поддержки портируемости". Причем никаким боком. Это язык описания интерфейсов, при придумывании которого одной из первых задач было то, чтобы он мог описывать интерфейсы на разных платформах. Сам он ничего не делает, поэтому он не тулза. Он только представляет собой уровень абстракции GUI и тем самым дает возможность писать GUI кроссплатформенно.

Alena комментирует...

XUL это все таки не "тулза для поддержки портируемости".

Угу, возможно не совсем корректно. В оригинале там было "invented tools".

Alex Ott комментирует...

хорошую работу по переносимости на куче платформ сделали в ACE - тоже стоит посмотреть на их документы, почему и как они делают.

Анонимный комментирует...

Если б не запретили ексепшены с STL'ем - до сих пор бы сидели в большой попе.

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

Анонимный комментирует...

Лично мое, никого не интересующее мнение, мнение программного тролля, блуждающего в ночи - за ексепшены, STL и темплейты вообще надо сажать на кол...
За такие вот рассуждения надо сажать на кол

Alena комментирует...

Тема посадки на кол закрыта.

Анонимный комментирует...

Портируемость не позволяет "выжать" максимум из платформы. Хотя кого в наше время это волнует :)