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ň