Porównanie kompilatorów GCC i Open Watcom

W Linuxie i nie tylko kompilator GCC to rozbudowany, wszechstronny kompilator wspierający wiele języków programowania (C, C++, Fortran, Ada, Go itp.) i standardów, dominujący w systemach UNIXopodobnych, podczas gdy Open Watcom jest kompilatorem historycznym i niszowym, skupionym na starszych architekturach i systemach operacyjnych (DOS, OS/2, M$) oraz mniej bogatym w funkcje i języki. 

Kluczowa różnica to ich zastosowanie: GCC to nowoczesne narzędzie do tworzenia oprogramowania, a Open Watcom narzędzie historyczne do odtwarzania i tworzenia oprogramowania na starsze platformy.

GCC (GNU Compiler Collection)

  • Wsparcie dla wielu języków: GCC obsługuje szeroki zakres języków programowania, w tym C, C++, Objective-C, Fortran, Ada, Go, a także wspiera standardy takie jak OpenMP. 
  • Wszechstronność: Jest podstawowym kompilatorem w systemach uniksopodobnych, takich jak Linux, i odgrywa kluczową rolę w budowie jądra Linuksa. Na prawdę wieloplatformowy kompilator, wspiera architektury ARM.
  • Rozwój i standardy: Jest stale rozwijany, zapewniając wsparcie dla najnowszych standardów językowych, takich jak C++17. 
  • Licencja: Dystrybuowany na licencji GPL i LGPL, jest projektem o otwartym kodzie źródłowym. 
  • Wsparcie dla instrukcji SIMD: GCC generuje kod z użyciem SIMD (np. przez flagi -O3, -march=native).

Open Watcom 

  • Historyczny i niszowy: To starszy zestaw kompilatorów, skupiony na tworzeniu oprogramowania dla starszych architektur i systemów operacyjnych, takich jak DOS, OS/2 i M$.
  • Specyfika: Używa jednego kompilatora dla każdej docelowej architektury procesora (nadal wspiera 16-bitowe i 32-bitowe docelowe platformy, czyli dzisiaj brzmi jak przyjazny tematom „retro”!), a system operacyjny jest określamy przez flagę kompilacji. Specyfikacja jest tutaj.
  • Ograniczone zastosowanie: Jest to narzędzie o bardzo ograniczonym zastosowaniu w porównaniu do nowoczesnych kompilatorów, takich jak GCC, i nie jest powszechnie używane do tworzenia współczesnego oprogramowania. Open Watcom nie obsługuje ARM ani platform typu Raspberry Pi w sensie natywnej kompilacji – to może stanowić potężne ograniczenie dzisiaj!
  • Brak wsparcia dla instrukcji SIMD: Należy pamiętać, że Open Watcom nie ma żadnej wiedzy na temat instrukcji SIMD. Potrafi optymalizować tylko procesory do Pentium Pro. Nowe wersje Open Watcom mogą posiadać te zmiany, warto sprawdzić przed użyciem!

Porównania i benchmarki

Tutaj jest dostępny ciekawy test z liczbami na temat wydajności tych dwóch kompilatorów.

W tym miejscu inna perspektywa porównawcza.

Instalacja kompilatorów na Linux Ubuntu

GCC

$ sudo apt install build-essential

Oto działanie kompilatora GCC po zainstalowaniu:

$ gcc main.c 
$ ./a.out 
Hello, world from poznajlinuxa.pl!
$ file ./a.out 
./a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b1825aad62ec89f9b5048d7a8b5371a722ee4830, for GNU/Linux 3.2.0, not stripped

Open Watcom

$ sudo snap install open-watcom --beta
  • Po instalacji widać, że mamy do dyspozycji szeroki wybór poleceń pod różne systemy operacyjne w Open Watcom:
    • open-watcom.owcc
    • open-watcom.owcc-dos4g
    • open-watcom.owcc-os2
    • open-watcom.owcc-win16
    • open-watcom.wmake
    • open-watcom.owcc-dos
    • open-watcom.owcc-linux
    • open-watcom.owcc-os2v2
    • open-watcom.owcc-win32

Oto działanie kompilacji Open Watcom w praktyce pod różne platformy:

$ open-watcom.owcc-linux main.c 
21:57:14 º 12 | bieli open-watcom $  ▶ ./a.out 
Hello, world from poznajlinuxa.pl!
$ file ./a.out 
./a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, with debug_info, not stripped

$ open-watcom.owcc-dos main.c
$ file ./a.out 
./a.out: MS-DOS executable, MZ for MS-DOS

$ open-watcom.owcc-win16 main.c 
$ file ./a.out 
./a.out: MS-DOS executable, NE for MS       3.x (EXE)

$ open-watcom.owcc-win32 main.c 
$ file ./a.out 
./a.out: PE32 executable (console) Intel 80386, for MS      

Podsumowanie

Jeśli jesteś fanem retro, starszym komputerów i programów lub chcesz napisać coś pod starsze komputery, na pewno Open Watcom wspomoże Ciebie w tym procesie. Dla przykładu w/w program skompilowany przy pomocy Open Watcom pod DOS, uruchomiłem w DosBox i działał bez zarzutów.

Jeśli jednak potrzebujesz napisać wydajne, zoptymalizowane procesy lub tworzysz oprogramowanie pod serwery i wydajność oraz użycie najnowszych instrukcji procesorów jest dla ciebie kluczowe, zdecydowanie polecam używać GCC.

Jak widzisz, oba kompilatory mają swoje cechy, dobieraj narzędzia programistyczne rozsądnie i zgodnie z potrzebami 😉 i wracaj na poznajlinuxa.pl aby więcej poczytać na programistyczne tematy!

TUX - maskotka systemu Linux

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.