den-run-ai / mipt-course

Automatically exported from code.google.com/p/mipt-course
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

Добавить поддержку компиляции C++11 кода в наш проект #52

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
Вешаю на Дмитрия допзадачу за его 
похвальное желание воспользоваться фичами 
C++11 в рамках своего семестрового кода.

Background:
До недавнего времени в Google C++ Style Guide были 
запрещены все фичи C++11, но сейчас разрешены 
auto и другие
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=C++11#C++
11

Плюс, C++11 позволяет использовать unordered_map 
без приставки tr1::

Для того чтобы включить C++11 в нашем проекте, 
нужно
1) немного поколдовать с CMakeLists
2) убедиться что это всё работает на:
 а) Ubuntu 12.04 (рекомендованная ОС для студентов, она же на боте),
 б) Ubuntu 10.04 (желательно - она стоит у меня дома, переставлять времени сейчас нет; плюс она ещё LTS. Там g++4.4.3)
 в) У большинства студентов
3) закоммитить

Насчёт пункта (в) - как вариант, можно 
создать в репозитории небольшой отдельный 
файл cpp11test.cpp, в котором будет по одному-два 
раза использоваться все разрешённые 
кодстайлом фичи C++11.
Затем этот файл нужно будет попросить 
собрать всем-не-Ubuntu-12.04-студентам через "g++ 
-std=c++0x test.cpp", чтобы убедиться что разрешение 
C++11 в нашем проекте не сделает их версию g++ 
непригодной.

С пунктом (б) я готов помочь на стадии ревью, 
если будет готов тест для (в).

Идеи?

Original issue reported on code.google.com by timurrrr on 9 Dec 2012 at 11:08

GoogleCodeExporter commented 9 years ago
Отписываюсь по поводу полученного e-mail:
- Версия ОС: Debian GNU/Linux testing (wheezy)
- Версия g++: 4.7.2

Original comment by aleksand...@phystech.edu on 9 Dec 2012 at 11:45

GoogleCodeExporter commented 9 years ago
- Ubuntu 11.04
- g++ 4.5.2

Original comment by adech...@gmail.com on 9 Dec 2012 at 3:00

GoogleCodeExporter commented 9 years ago
Fedora 16
g++ 4.6.3

Original comment by frmz...@gmail.com on 9 Dec 2012 at 3:00

GoogleCodeExporter commented 9 years ago
Debian GNU/Linux 6.0.6 (squeeze)
g++ 4.4.5

Original comment by artem.sh...@gmail.com on 9 Dec 2012 at 5:56

GoogleCodeExporter commented 9 years ago
ArchLinux
g++ 4.7.2

Original comment by ONPonomarev on 9 Dec 2012 at 6:09

GoogleCodeExporter commented 9 years ago
Ubuntu 11.10
g++ 4.6.1

Original comment by prosto.k...@gmail.com on 10 Dec 2012 at 5:48

GoogleCodeExporter commented 9 years ago
Мысли вслух ниже.

----

Есть минимум две "классические" стратегии 
решения этой проблемы.

Стратегия "Мы официально поддерживаем 
всевозможные дистрибутивы и компиляторы" 
(1).
Если придерживаться этой стратегии - надо 
перед включением C++ протестировать каждую 
возможную систему.
Моё мнение - ужасно, куча работы 
(найти/установить каждую ОС); при этом не 
понятно насколько нужной и непонятно 
насколько даёт coverage (всевозможные ОС 
проверить в любом случае).

Страгетия "Мы официально поддерживаем 
только Ubuntu 12" (2).
Решение становится проще:
можно подготовить патч "включить С++11 в 
нашем проекте + тест"
и отправить всем в этой issue на "попробовать".
С сопроводительным текстом "как 
попробовать" и "что должно быть если
всё ок" и словами "если всё не ок - пишите мне 
полный вывод". (*)
И даётся таймаут на N дней.
Если за N дней не получаешь ни одного "у меня 
не работает" - то ок, можно коммитить.
Если кто-то не подписан на issue (а я просил на 
рассылке) - "кто-то сам виноват" (**).
Если не попробовал - см (**).
Если на дистрибутиве Х проблема очевидна и 
решается очевидно - ок, хорошо, исправляем, 
goto (*).
Есле неочевидно см пункт (2), а далее (**).

----

Как вариант, упрощающий переход на C++11:
Можно сделать новую папку sandbox11 для C++11 
кода/тестов, чтобы у пользователей 
экзотических ОС/компиляторов не сломалась 
сборка sandbox_tests.

Original comment by timurrrr on 13 Dec 2012 at 7:33

GoogleCodeExporter commented 9 years ago
Было решено остановиться на последнем 
варианте --- создать папку sandbox11, и все 
проекты, использующие C++11 хранить и 
собирать там.

Original comment by dmitriy.borodiy on 13 Dec 2012 at 9:10

GoogleCodeExporter commented 9 years ago
Ты кое-что забыл сделать

Original comment by timurrrr on 12 Jan 2013 at 8:07