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ň