GCC w… C++

Pod koniec zeszłego miesiąca Ian Lance Taylor wprowadził do GCC nową gałąź kodu: gcc-in-cxx. Jak łatwo zgadnąć, chodzi o kompilację GCC w standardzie C++.

Nasuwa się pytanie, po co? Na to pytanie najlepiej odpowiedział autor gałęzi w swojej prezentacji “Write GCC in C++”. Ponieważ C90 (standard C przyjęty w GCC) jest z grubsza biorąc podzbiorem języka C++, to w większości chodzi o prostą konwersję konstrukcji do bardziej zwięzłej i czytelnej postaci.

Oficjalne przyjęcie tej eksperymentalnej obecnie gałęzi wymaga aprobaty komitetu sterującego i o to Ian zamierza się ubiegać. Nowa gałąź ma być prowadzona rozsądnie, tzn. bez wykorzystywania zbędnych konstrukcji z C++ i w taki sposób, aby opieka nad kodem nie nastręczała kłopotów.

żadnych reklam, sama wiedza.

Zarejestruj się na BEZPŁATNY NEWSLETTER i raz w tygodniu otrzymuj najważniejsze wiadmości
ze świata IT, nowych technologii i kryptowalut.

Bez reklam.

  1. Awatar skiter
    skiter

    "to w większości chodzi o prostą konwersję konstrukcji do bardziej zwięzłej i czytelnej postaci."

    No to jak sobie bigos zrobili to teraz nie bedzie bigosu w C++, ciekawa informacja :), mnie sie wydaje ze to przekladanie nalesnika na trzecia strone, czego tyczy sie:

    "Nowa gałąź ma być prowadzona rozsądnie, tzn. bez wykorzystywania zbędnych konstrukcji z C++ i w taki sposób, aby opieka nad kodem nie nastręczała kłopotów."

    Ze niby co, piszemy dalej w C, ale kompilujemy G++?, dosc ciekawe rozumowanie, naprawde sie zastanawiam co autor chce uzyskac przez 'nowego forka'.

    1. Awatar wmigda
      wmigda

      a zerknąłeś na cytowaną prezentację ? (http://airs.com/ian/cxx-slides.pdf)

  2. Awatar Mieszko Kaczmarczyk
    Mieszko Kaczmarczyk

    Dla mnie też jakieś zamieszanie – jeśli można (jak dotąd) dodawać komentarze "//" oprócz "/*—*/" to jest OK – ale jeśli będzie trzeba teraz robić np. tylko i wyłącznie jawne rzutowanie zmiennych to będzie duże utrudnienie.

    1. Awatar vampire
      vampire

      Przy rzutowaniu trzeba byc ostroznym. Szczegolnie z typu zmiennoprzecinkowego na typ calkowity.

      Poza tym czy najnowsza specyfikacja C++ wymaga jawnego rzutowania?

      1. Awatar Mieszko Kaczmarczyk
        Mieszko Kaczmarczyk

        No właśnie o tym napisałem – w C++ wymaga – w "C" niewymaga.

        Jedyna funkcja w "C" jaka wymaga rzutowania to jest (int) difftime.

        1. Awatar vampire
          vampire

          przegladam jakies streszczenie standardu i nie widze.

          kod:

          int test1;

          float test2=test1;

          sie kompiluje bez problemow.

          w druga strone z warning'iem ale to normalne.

          oczywiscie wszystkie funkcje zwracajace void* wymagaja rzutowania, ale to nic odkrywczego…

        2. Awatar vampire
          vampire

          oczywiscie test1 ma po drodze nadana wartosc.

    2. Awatar wmigda
      wmigda

      przecież uczestnictwo w tym projekcie jest dobrowolne. Jak nie jesteś deweloperem gcc i nie chcesz pomóc w przepisaniu części kodu gcc to ten news niewiele dla Ciebie znaczy.

    3. Awatar guzo
      guzo

      I tu nic się nie zmieni – niezależnie od tego, co zmienią "wewnątrz" kompilatora, dalej pozostanie on kompilatorem języka C.

      1. Awatar Vogel
        Vogel

        Od kiedy GCC jest *tylko* kompilatorem jezyka C?

  3. Awatar Maciej Mrozowski
    Maciej Mrozowski

    Pomysł jest ciekawy – choć nie wiem czy wart wysiłku. Projekt ma jak sądzę ma na celu głównie polepszenie jakości kodu i zwiększenie stąd jego bezpieczeństwa. Kompilator C++ jest zwykle bardziej czepialski, umożliwia wciąganie deklaracji zmiennych 'indeksujących' w 'for', umożliwia zawężanie zasięgu zmiennych lokalnych pozwalając deklarować je nie tylko na początku kodu funkcji (aczkolwiek gnu89, czyli ISO C90 z rozszerzeniami GNU już chyba też na to pozwala). Jeżeli tylko będą pisać w "better C", to czemu nie – większość kodu z wyjątkiem braku rzutowań i tak się skompiluje od razu.

  4. Awatar AdeBe
    AdeBe

    Kompilator C++ o wiele dokładniej wykonuje kontrolę typów, co pozwoli na wyeliminowanie części potencjalnych błędów już na poziomie kompilacji. Poza tym, niejawna konwersja może i ułatwia pisanie kodu, ale pogarsza jego czytelność i utrudnia debugowanie.

    Poza tym jest jeszcze kilka fajnych rzeczy w C++ 🙂

    Generalnie z tego co można wyczytać w necie wynika, że większość dev'ów przychylnie patrzy na ten projekt, no a kto jak kto, ale programiści kompilatorów mają najlepsze pojęcie o tym co robią.

    1. Awatar norbert_ramzes
      norbert_ramzes

      A od czego są komentarze?

  5. Awatar Mieszko Kaczmarczyk
    Mieszko Kaczmarczyk

    W "C" ISO_C90 też możesz zawężać zakres zmiennych lokalnych:

    void procedura()

    {

    int a;

    jakaś_instrukcja(a);

    {

    float a;

    jakaś_instrukcja(a);

    }

    }

    Wg mnie całe to zamieszanie z C++ to zwykła moda na C++, obiektowość, itp.

  6. Awatar yoshi314
    yoshi314

    skomplikowana kwestia bedzie teraz etap bootstrapowania sie gcc (make bootstrap), domyslnie stosowana podczas instalacji gcc w gentoo.

    obecnie jest tak, ze podczas bootstrapowania gcc buduje minimalny kompilator C (xgcc/stage1), nastepnie za jego pomoca buduje sam siebie,w kompletnej wersji (stage2), i za pomoca tego co mu wyszlo buduje wersje finalna.

    to wydawalo mi sie naturalne. zreszta minimalna paczka z gcc ma tylko wsparcie dla C. obsluga dodatkowych jezykow programowania (c++, fortran, ada, java, kto wie co jeszcze) jest w osobnych paczkach.

    spodziewam sie ze to drastycznie wydluzy lub skomplikuje ten tryb dzialania gcc. do tej pory wystarczal przyzwoity kompilator C zeby w taki sposob zbudowac gcc. teraz bedzie trudniej.

    1. Awatar bies
      bies

      Teraz będzie potrzebny przyzwoity kompilator C++ (dokładniej, założenie jest takie aby gcc budował się z g++ 3.4 i wyżej — czyli np. odpowiedni icc).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *