Thursday, August 25, 2011

gсс 4.6+ и венда

Почитывая "C++ Concurrency in Action", осознал, что пользоваться установленной в универе MS VC++ 2010 буду неспособен. Во-первых, потому что в GCC 4.6+ уже реализовали порядка половины стандарта C++0x, включая атомарные типы, мьютексы, потоки и т.п. Во-вторых, потому что терпеть не могу проприетарщину.

Возможных решений вырисовывалось несколько:
  • Cygwin: преимущество перед прочими вариантами - gcc, vim и прочие привычные штуковины из мира UNIX в одном флаконе. Только вот в его репозиториях даже в experimental лежит лишь gcc 4.5. Фэйл. Нет, ну не совсем фэйл: можно было кое-как собрать свежий gcc из исходников. Однако, как выяснилось, у меня не настолько прямые руки...
  • Mingw-w64: форк полудохлого mingw. В разделе Automated builds можно скачать свежие сборки. Однако, чтобы заработали std::thread, std::mutex и тому подобные няшки, нужно, стоя на одной руке, почесать левой ногой за правым ухом. Я даже пробовал, но как-то не вышло :'-(
    (Точнее говоря, с помощью вот этого вот совета мне удалось заставить работать std::thread, но не std::mutex, без которого использовать многопоточность - тот ещё маразм. При попытке заюзать мьютексы g++ плевался чем-то вроде "error: there are no arguments to '__gthread_mutex_timedlock' that depend on a template parameter, so a declaration of '__gthread_mutex_timedlock' must be available")
  • И вот сегодня я внезапно наткнулся на вот это: http://code.google.com/p/mingw-builds/ Обсуждение сборок здесь. Все многопоточные фичи вроде работают. В общем, человеку под ником niXman - респект и уважуха :-)
    А поскольку everything just works, то и говорить особо не о чем. Единственное, что можно отметить: читайте "Description" на гуглокоде во избежание недоразумений. Например, в текущем snapshot-е GCC 4.7.0 для работы std::thread надо компилять сорцы с флагом -static.
  • Ещё, наверное, возможен вариант в виде Live USB с линухом. Однако ну его на фиг, ибо наш препод, как выяснилось в прошлом году, даже Vim/GVim ни разу не видел.
В итоге я, ясен пень, остановился на mingw-builds. И вам советую во избежание плясок с бубном)