C++, kompilatory

0

Cześć ;)

Jak wiadomo, do kompilowania C++ mamy szeroką gamę kompilatorów, najpopularniejsze to gcc, clang, od Microsoftu. Którego kompilatora ( i dlaczego) używa się programując zawodowo? Wiem, że odpowiedź może być: to zależy ( w takim razie pytanie brzmi od czego to zależy i którego używa się najczęściej?)

1

gcc, ze względu na zgodność ze standardami i dostępność na różnych systemach. Chętnie bym też używał clanga, ale pod windowsem na razie ciężko.

1

gcc, bo

  • jest open source,
  • działa na wielu platformach,
  • kompiluje na wiele platform,
  • jest bezpłatny,
  • ma całkiem niezły optymalizator,
  • dzięki fladze -pedantic możemy pisać przenośny kod, który mamy pewność, że skompiluje każdy kompilator zgodny ze standardem,
  • bardzo popularny,

clang za to jest niezły ze względu na jego statyczna analizę kodu, która całkiem nieźle działa, ale jeszcze nie jest tak dojrzały i przetestowany jak gcc.

1

GCC jest chyba najlepiej rozwiniętym kompilatorem, wspiera wiele systemów, głównie uniskowych ale też i Windowsa ale trochę słabiej, nie jest oficjalnym portem. Wspiera multum architektur, ARM, AVR i inne :P Jest GPL - jest free as freedom, nie tylko open source to różnica na duży plus.
https://gcc.gnu.org/install/specific.html

Clang jest wpierany przez Apple i jest używany w systemach tej firmy. Jest lepszy w założeniach od GCC czyli będzie szybszy i zużywający mniej pamięci podczas kompilacji. Clang nie jest jeszcze w pełni gotowy.
Jest na licencji BSD, open source, tylko to według mnie jego wada bo może zostać oprogramowaniem zastrzeżonym.
http://www.phoronix.com/scan.[...]item=gcc-61-clang39&num=2

Kompilator Microsoftu wspiera tylko Windows, to tak jak intel c++ compiler wspiera lepiej procesory Intel niż AMD. Nie polecam niczego od Microsoftu z systemem włącznie.

Jeżeli chcesz stworzyć aplikację którą będziesz mógł przekompilować na inne systemy czy architektury wybierz GCC
Bardzo sobie cenie ten kompilator.

0

Będzie trochę offtop, przepraszam, ale what the hell

kacper546 napisał(a):

Clang nie jest jeszcze w pełni gotowy.

Że co?

mlyszczek napisał(a):

clang za to jest niezły ze względu na jego statyczna analizę kodu, która całkiem nieźle działa, ale jeszcze nie jest tak dojrzały i przetestowany jak gcc.

Każdy kolejny kompilator jest i będzie z automatu gorszy bo został wydany po gcc?

Na linuxie nie widzę żadnego powodu by nie używać clang'a. Mniejsze binarki wynikowe (sam porównywałem tylko dwa systemy powyżej 50k wierszy, ale mi to wystarczy), świetne komunikaty błędów, toolset które otrzymujesz "out of the box" bez dodatkowego szperania po sieci, nazewnictwo flag pokrywające się z gcc... Nie ma absolutnie żadnego powodu by nie linuxie nie używać clanga, chyba że skompilowałeś swój system gcc i clangiem i przetestowałeś, że kod wynikowy od gcc dla Twojego systemu jest szybszy.

1

Chodzi o to, że gcc jest na rynku już blisko 30 latT To jest 30 lat testowania, bugfixingu przez naprawdę wiele osób - w tym duże firmy. etc, a clang jest na rynku raptem 8 lat i nie jest jeszcze tak dobrze przetestowany. Ja nie mówię, że clang jest zły, ale osobiście na dzień dzisiejszy nie zamieniłbym gcc na clanga w moich projektach.

0

@mlyszczek: OpenSSL jest na rynku przez blisko 20 lat i jest dobrze wytestowany, bugfixowany i... oh wait. :)

Jak potrzebujesz kompilatora, który potrafi wygenerować naprawdę wydajny kod, to chyba tylko ICC od Intela. Do tego masz bajery, których nie ma w clangu/gcc domyślnie (OpenMP, Cilk) + zoptymalizowane biblioteki do numeryki + IPP + niezły profiler (VTune).

0

@kapojot ICC nie jest jednoznacznie lepszy od darmowych narzędzi, powiedziałbym że istnieje raczej dość wąski przedział zastosowań gdzie można by mniemać, że ICC wygeneruje wydajniejszy kod. Jestem też absolutnie pewien, że dla niektórych systemów binarka od ICC będzie wolniejsza od tej wygenerowanej przez gcc.

A VTune jest zajebisty, serio, najprzyjemniejszy profiler z jakim pracowałem, drogi ale wart każdego grosza. Tylko, że można go sobie kupić osobno i nie trzeba kompilować ICC żeby go używać.

0

@several: ICC lepiej robi chociażby wektoryzację kodu. Zwykle, żeby dogonić to, co ICC zrobiło ze średnio zoptymalizowanego kodu w C, w gcc musiałem już używać intrinsiców i niemalże ręcznie wszystko optymalizować. Czy wygeneruje szybszy kod do aplikacji "ogólnego przeznaczenia" - nie wiem, nigdy go do tego nie używałem.

0

Ehmmm @kapojot ale jak ja skompiluję za pomocą ICC kod na jakiegoś cortex'a, albo avr'a:) ICC wspiera chyba tylko swoje procki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0