Potrzebuję opinii. GCC zawsze był bardzo dobrym kompilatorem, ale ostatnio traci „atrakcyjność”. Właśnie odkryłem, że w Windows GCC nie ma std::thread
wsparcia, zmuszając użytkowników Windows do korzystania z innego kompilatora, ponieważ najbardziej ekscytująca funkcja wciąż jest niedostępna.
Ale dlaczego tak naprawdę GCC nadal nie obsługuje wątków w systemie Windows? Problemy z licencją? Niezgodności ABI? (Cóż, istnieje już kilka bibliotek wieloplatformowych używających wielowątkowości: boost, POCO, SDL, wxwidgets itp. Czy nie byłoby łatwo używać już istniejącego i licencjonowanego kodu MIT / libpng, aby dopasować ten otwór zamiast wysyłania wydań GCC bez obsługi wątków?)
Ostatnio, patrząc na porównania kompilatorów, GCC ma najszersze wsparcie dla funkcji C ++ 11 w porównaniu z innymi kompilatorami, z wyjątkiem faktu, że w Windowsie nie jest to prawdą, ponieważ wciąż brakuje nam atomów, muteksów i wątków: /
Chciałbym dowiedzieć się więcej na ten temat, ale jedyne, co mogę znaleźć, to ludzie proszący o pomoc, ponieważ:
„wątek” nie istnieje w standardowej przestrzeni nazw
Patrząc na śledzenie biletów i dyskusje mailowe GCC / TDM-GCC, od 2009 r. Pojawiły się prośby o wsparcie wątków. Możliwe, że po 4 latach wciąż nie ma rozwiązania? Co się naprawdę dzieje
źródło
Odpowiedzi:
Zrozumiałem, że GCC spada z łaski, ponieważ utrzymujący go ludzie stali się nieco aroganccy, a teraz, gdy LLVM jest tutaj (i jest bardzo dobry), ludzie głosują nogami.
Slashdot rozmawiał o nowym wsparciu LLVM dla C ++ 11 . _merlin mówi:
które wpisują się w twoją obserwację dotyczącą 4-letniego opóźnienia.
źródło
std::thread
systemu Windows obsługiwanego w VS2012 EE)thread_local
zmiennych)Popularność i użyteczność GCC nie jest wątpliwa.
Ale ważnym czynnikiem jest Licencja.
Inne ważne uwagi
Od http://clang.llvm.org/comparison.html#gcc
From http://www.linuxquestions.org/questions/slackware-14/gcc-vs-llvm-931034/
interfejsować i wykorzystywać na przykład do tworzenia statycznych narzędzi do analizy kodu, co staje się coraz ważniejsze ()
Od http://clang.debian.net/
źródło
-ftrack-macro-expansion
domyślnie włączoną teraz :)foo
imoo
są wskaźnikami do różnych typów struktur, z których oba mają polabar
jako część swojej początkowej sekwencji, zapis*&foo->bar
i odczyt*&moo->bar
powinny spowodować, że odczyt zobaczy zapis, ponieważ jedynym skutecznym typem używanym w obu dostępach jest typbar
. Wydaje się jednak, że GCC odfiltrowuje*&
i przenika typyfoo
imoo
...Powodem, dla którego zajmuje to dużo czasu, jest to, że uzyskanie solidnego fundamentu do zbudowania nagłówków wymaga dużo pracy. Sposób, w jaki mingw-w64 wydaje się być bo, polega na zbudowaniu solidnej biblioteki podobnej do pthreads w systemie Windows. Jest mniej zrzędliwego upstream niż wprowadzenie zależności od natywnego wątkowania Windows API.
Implementuje mingw-w64
<thread>
i inne nagłówki C ++ 11 nad własnąwinpthreads
biblioteką. Powinno to być dostępne do testowania zarówno w kompilacjach Mingw, jak i dystrybucjach rubenvb zestawu narzędzi mingw-w64. Polecam śledzenie list mailingowych mingw-w64, jeśli chcesz śledzić, gdzie wykonuje się większość pracy nad natywną pracą Windows GCC.Projekt Qt ma stronę wiki opisującą ich aktualne rekomendacje oraz przegląd łańcuchów narzędzi GCC w systemie Windows, patrz strona wiki projektu Qt .
źródło