Eu preciso de uma opinião. O GCC sempre foi um compilador muito bom, mas recentemente está perdendo "apelo". Acabei de descobrir que no Windows GCC não há std::thread
suporte, forçando os usuários do Windows a usar outro compilador porque o recurso mais interessante ainda está faltando.
Mas por que realmente o GCC ainda não tem suporte para threads no Windows? Problemas de licença? Incompatibilidades ABI? (Bem, já existem várias bibliotecas de plataforma cruzada usando multithreading: boost, POCO, SDL, wxwidgets etc. Não seria simples usar o código já existente e licenciado pelo MIT / libpng para atender a esse buraco, em vez de enviar versões do GCC sem suporte de thread?)
Recentemente, observando comparações de compiladores, o GCC tem o suporte mais amplo para os recursos do C ++ 11 em relação a outros compiladores, exceto pelo fato de que no Windows isso não é verdade porque ainda não temos atômicos, mutexes e threads: /
Gostaria de saber mais sobre esse tópico, mas a única coisa que posso encontrar são pessoas pedindo ajuda porque:
"thread" não existe no namespace std
Observando o rastreamento de tickets e discussões por correio do GCC / TDM-GCC, houve pedidos de suporte de encadeamento desde 2009. É possível que, após 4 anos, ainda não haja solução? O que realmente está acontecendo?
fonte
Respostas:
Eu entendi que o GCC está desvalorizando porque as pessoas que o mantêm se tornaram um pouco arrogantes, e agora que o LLVM está aqui (e é muito bom), as pessoas estão votando com os pés.
Slashdot discutiu sobre o novo suporte do LLVM para C ++ 11 . _merlin diz:
que concorda com sua observação sobre o atraso de quatro anos.
fonte
std::thread
em Windows, que é suportada no VS2012 EE)thread_local
variáveis)A popularidade e usabilidade do GCC não são questionáveis.
Mas uma consideração importante é a Licença.
Outras considerações importantes
Em http://clang.llvm.org/comparison.html#gcc
De http://www.linuxquestions.org/questions/slackware-14/gcc-vs-llvm-931034/
conectado e usado, por exemplo, para criar ferramentas estáticas de análise de código, o que se torna cada vez mais importante ()
De http://clang.debian.net/
fonte
-ftrack-macro-expansion
, agora ativado por padrão :)foo
emoo
são ponteiros para diferentes tipos de estrutura, ambos com campobar
como parte de sua sequência inicial, a escrita*&foo->bar
e a leitura*&moo->bar
devem resultar na leitura da gravação, pois o único tipo eficaz usado em qualquer acesso é o tipo debar
. O GCC, no entanto, parece filtrar o*&
e, portanto, penetra os tipos defoo
emoo
... #A razão pela qual leva muito tempo é porque é preciso muito trabalho para obter uma base sólida para construir os cabeçalhos. A maneira como o mingw-w64 parece bo é criar uma sólida biblioteca semelhante a pthreads no Windows. Há menos mal-humorado do que introduzir uma dependência no encadeamento nativo da API do Windows.
implementa
<thread>
o mingw-w64 e os outros cabeçalhos do C ++ 11 em cima de sua própriawinpthreads
biblioteca. Isso deve estar disponível para teste nas distribuições Mingw-builds e rubenvb da cadeia de ferramentas mingw-w64. Eu recomendaria seguir as listas de discussão mingw-w64 se você quiser rastrear onde a maior parte do trabalho no trabalho nativo do Windows GCC é feita.O Projeto Qt tem uma página wiki detalhando sua recomendação atual e uma visão geral das cadeias de ferramentas do GCC no Windows, consulte esta página wiki do Projeto Qt .
fonte