EGCS
-=-=-=
A computer without COBOL and Fortran is like a piece of chocolate
cake without ketchup and mustard.
EGCS je nová vývojová větev GNU překladače. Od "oficiální"
verze GCC se liší ve vývojovém modelu. GCC používá katedrální
model - k vývojovým verzím překladače má přístup pouze omezená
skupina vývojářů (každý, kdo se takovým vývojářem chce stát, musí
se přihlásit do mailing listu apod.). Ostatní mají přístup pouze
k poslední stabilní verzi překladače.
O verzi 2 GCC se stará Richard Kenner. Ten ale velmi dlouhou
dobu nevydal novou verzi. (verze 2.7.2 byla vydáva v roce 95 a verze
2.8.0 až v prosinci 97). Přesto, že GCC i ve dva roky staré verzi
bylo schopné konkurovat ostatním novějším překladačům, některé věci
chyběly. Až do konce roku 97 GCC nepodporovalo optimalizace pro
Pentia, GPP už neodpovídalo nejnovějším draftům standardu C++ a mělo
problémy s podporou templates.
Mnoha lidem to vadilo. Vznikl například projekt vytvářející
Pentiové GCC optimalizace (PGCC), který začal sám Intel ale později
to vzdal, protože PGCC bylo velmi nestabilní. Bylo mnoho sporů
na mailing listech a začalo se diskutovat o změně vývojového modelu
na otevřený. V otevřeném modelu má k vývojovým verzím přístup každý.
A i o zařazování změn do oficiílních zdrojových kódů se může starat
více lidí. To umožní, aby více lidí otestovalo vývojové verze
a zapojilo se do vývoje. Tento model používá například jádro Linuxu.
Odpůrci otevřeného modelu ale říkali, že GCC je velmi komplikovaný
program a je velmi snadné do něj zanést chyby, které se pak budou
špatně hledat, a nebo některé věci naprogramovat tak, že později
přinesou mnoho komplikací. Katedrální vývojový model funguje
spolehlivě u mnoha projektů (například FreeBSD).
A proto vzniklo EGCS, které používá otevřený vývojový model.
O jeho vývoj se stará skupina programátorů z Cygnusu. EGCS vychází
z vývojové verze 2.8.0 a jsou do něj přidávány věechny změny
z vývoje GCC. Navíc je ale otevřenější radikálnějším změnám (jako
jsou nové optimalizace apod.), které mohou dočasně znestabilnit
překladač. Verze 1.0 je z prosince 97 a obsahuje následující změny
oproti GCC:
- Vylepšený exception handling
- Změny v optimalizacích
- Nový Haifa scheduler s lepší podporou superskalárních procesorů
- Dwarf 2 (formát informací pro debugování)
- gcov pro profilování po jednotlivých blocích (nejenom funkcích)
- nové přepínače:-f_stack_check (kontrola přetečení zásobníku
na architekturách, kde není hlídán automaticky), -Wundef,
-Wno-undef (varuje o používání nedefinovaných symbolů v #if),
15-Wimplicit (varuje o používání deklarací (jako register i)),
-Wsign-compare (varuje o porovnánání signed a unsigned hodnot)
- Podporuje nové architektury:
Embedded target m32r-elf.
Embedded Hitachi Super-H ELF.
RTEMS real-time system na mnoha CPU.
nové procesory: ARC, NEC Vářé, Matsushita MN10200 a MN10300
a další
Sparc and PowerPC s VxWorks.
Podpora pro glibc 1 i 2 na GNU/Linuxu.
- Scheduling pro Pentium a Pentium Pro.
V příštích verzích EGCS se plánuje zařazení nekterých změn
z PGCC (lepší podpora Riscových architectur) a lepší podpora
superskalárních procesorů. GCC nebylo navrhováno pro superskalární
procesory a jeho popis architektury je neumožňuje správně popsat.
Superskalární procesory se vyznačují tím, ze mají více pipeline
a tak mohou zpracovat více instrukcí zároveň. Problém ale je, že ne
každá pipeline podporuje všechno. Například na Pentiu je pipeline
U a V, kde pipeline V podporuje pouze "jednoduché" instrukce -
například add, ale neumí například instrukce s prefixem. U novějších
procesorů je situace ještě komplikovanější. Navíc v případě, že
jedna pipeline zpracovává hodnotu, kterou potřebuje instrukce v jiné
pipeline, musí druhá pipeline počkat. A tak hodně záleží na tom,
jak je kód seřazen. O správné seřazení kódu se stará scheduler.
Nejedná se ale pouze ale o přerovnání instrukcí. Někdy se vyplatí
vygenerovat úplně jiný kód. Proto má scheduler více průchodů.
Scheduler v GCC nebyl navrhován pro takto komplikovanou situaci
a tak nepodává nejlepší výsledky. EGCS obsahuje nový experimentální
scheduler Haifa. Ten má nový průchod po alokaci registrů. Umí take
interblock scheduling a další vymoženosti. Problém ale je, že jeho
výsledky zatím nejsou spolehlivé. Na některých architekturách tento
scheduler zrychluje (HP-PA) na jiných (Intel) jsou jeho vysledky
různorodé a někde zpomaluje. Častečně je to způsobeno tím, že není
ještě správně doladěn a také tím, že machine description neumpožňuje
správny popis těchto procesorů a tak jsou napsány tak, že sice
částečně překladači lžou ale podávají většinou dobré výsledky.
S Haifa schedulerem se ale situace změnila a tak tyto machine
description budou muset být přepsány.
Plánuje se i mnoho dalších změn a tak se obě verze budou asi
stále vzdalovat a čas ukáže, který z přístupů je lepší. Domácí
stránka EGCS se nachází na www.cygnus.com/egcs
- HH -
hubicka@freesoft.cz
výheň