GCC zacznie używać C++

Data: 1 czerwca, 2010

Ekipa kompilatora GCC w porozumieniu z FSF zdecydowała, że w jego kodzie zaczną się pojawiać wybrane elementy C++, a nie jak dotąd, prawie tylko C. Pozwoli to zwiększyć czytelność i niezawodność kodu.

Tradycjonaliści nie mają powodów do obaw, ponieważ chodzi tylko o konstrukcje upraszczające składnię, czyli tzw. lukier składniowy, a nie o zaawansowane mechanizmy C++. Dokładny zakres dozwolonych konstrukcji zostanie dopiero ustalony, ale wiadomo na przykład, że dopuszczony będzie standard C++98 wraz z typem „long long”, natomiast nie będzie można wykorzystywać możliwości jakie daje C++0x.

Mark Mitchell wyjaśnia, że są to na przykład rzeczy, które zmniejszają ilość wierszy kodu, pozwalają uniknąć pomyłek przy wywoływaniu funkcji różnych API, czy ułatwiają wymianę komponentów bez wpływu na resztę kodu.

Podobne wpisy

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone


  1. blinkkin pisze:

    Powtórzę pytanie z LWN.net, bo jest dosyć interesujące:

    LLVM effect?

    W każdym razie krok w dobrą stronę, tym bardziej jeśli ma być używany standard C++98. Ciekawie wygląda szkic na wiki dotyczący C++ w GCC – kilka ciekawszych zdań:

    C++ code must conform to the C++98 standard, with the addition that the long long type may be used if the host C++ compiler supports it. (The treatment of long long remains the same as it is today.)

    It is desirable that it be possible to build GCC with C++ compilers other than GCC itself. If testing reveals that reasonably recent versions of non-GCC C++ compilers can not compile GCC, then GCC code should be adjusted accordingly.

    Dotychczas było to GNU C – mieszanka ANSI C i C99 z dodatkami. Czepiam się do tego, bo jest to wyraźny syndrom NIH. Kilka cytatów z GNU Coding Standards:

    The GNU Project regards standards published by other organizations as suggestions, not orders. We consider those standards, but we do not “obey” them. In developing a GNU program, you should implement an outside standard's specifications when that makes the GNU system better overall in an objective sense. When it doesn't, you shouldn't.

    In the Unix world, “portability” refers to porting to different Unix versions. For a GNU program, this kind of portability is desirable, but not paramount.

    The primary purpose of GNU software is to run on top of the GNU kernel, compiled with the GNU C compiler, on various types of cpu. So the kinds of portability that are absolutely necessary are quite limited. But it is important to support Linux-based GNU systems, since they are the form of GNU that is popular.

    Czytając to zawsze zadaje sobie pytanie: Czy filozofia GNU może negatywnie wpływać na styl/jakość programowania/programów?

    1. krzabr pisze:

      I dobrze widać że groźba przegonienia ze strony clanga zmusiła ich do roboty .

      1. bies pisze:

        Eee, oryginalna propozycja Iana L. Taylora (Google) nie wspomina ani słowem ani o LLVM ani o Clang (są do znalezienia slajdy z Gcc Summit z 2008).

        Ogólnie to dość stara wiadomość. Teraz tylko zmieniono zasady na trunku.

        1. blinkkin pisze:

          Bardziej chodziło mi o to, że Clang/LLVM napisany jest w większości w C++.

  2. makakaa pisze:

    "Lukier składniowy"? Bezmyślne, dosłowne tłumaczenie każdego pojęcia to objaw upośledzenia umysłowego.

      1. Mieszko Kaczmarczyk pisze:

        Mnie się podoba określenie "lukier".

    1. DerDevil pisze:

      @makakaa zanim coś napiszesz to się zastanów bo jak na razie twoje objawy są gorsze.
      http://pl.wikipedia.org/wiki/Lukier_sk%C5%82adnio…

      1. makakaa pisze:

        Tak? A co powiesz o tym?
        http://www.tinyurl.pl?HsxiNIc1

      2. makakaa pisze:

        Może to?
        http://www.tinyurl.pl?HsxiNIc1

  3. BigBen pisze:

    Nie chcę tu siać wojny na temat wyższości języków programowania, ale uważam że warto zapoznać się z treścią tego linka (przynajmniej jako ciekawostkę):

    http://forum.msstudio.com.pl/c.php?tytul=Geneza%2…

    Jest to wywiad z 1998 roku z twórcą C++. Ze względu na swoją dość kontrowersyjną treść wywiad nie został wtedy opublikowany.

    W każdym razie z wywiadu wynika że wszelkie pułapki języka C++ zostały specjalnie stworzone żeby utrudnić życie programistom.

    1. grochu pisze:

      Dobre!!!

      Jakis czas temu chodzilem na kurs C++ i zastanawialem sie po co te wszystkie udziwnienia. Nawet jesli ww. wywiad to jakis dowcip, to widze, ze nie tylko mnie C++ nie zauroczylo :).

      1. BigBen pisze:

        Coś w tym jest. Mi C++ też wydało się robione w sposób sztuczny i nieintuicyjny.

        1. A konkretnie co jest sztucznego i nieintuicyjnego?
          Poza tym argument "nieintuicyjny" jest niepoważny: mechanika kwantowa i teoria względności są bardzo nieintuicyjne, tym niemniej są prawdziwe.

        2. trasz pisze:

          @zk: Chociazby koniecznosc spacji miedzy "> >" w "costam<costam<meh> > foo;".

        3. Silmethule pisze:

          Konieczność stawiania średnika po definicji klasy/struktury. Składnia szablonów. Ogólnie bzdury pozostawione dla wstecznej zgodności z C. Tego typu "błędy" naprawia D, tylko że zrywa tę zgodność z C.

        4. to<foo > to mały pikuś łatwy do obejścia (i już dziś sygnalizowany przez kompilatory), prosty do poprawienia w nadchodzącym nowym standardzie. Niepojęty jest np. algorytm rozstrzygania przeciążeń. Naprawdę wkurzający jest m.in. brak częściowej specjalizacji szablonów funkcji. Autorom specyfikacji z 1998 r. zabrakło wyobraźni, do czego ludzie mogą chcieć wykorzystywać szablony 🙂
          C++ jest językiem żywym, o specyfikacji dostosowywanej do potrzeb zaawansowanych użytkowników, którzy programowaniem zarabiają na życie.
          Stąd wrażenie bałaganu, ale i niesamowita siła ekspresji tego języka.
          Na dobrą sprawę c++ to metajęzyk w którym dopiero tworzy się użyteczne "instancje języka", np. Qt, CUDA, wxWidgets, Managed C++, CLI etc.
          Dopóki tego nie zrozumiesz, będziesz uważał C++ za dziwactwo.

        5. Konieczność stawiania średnika po definicji klasy/struktury – odziedziczona po C. Składnia szablonów jest odjazdowa, przyznaję, najbardziej wzruszające są konstrukcje .template i ->template, Domyślam się, że te "rozszerzenia" dodano post factum, gdy okazało się, ze życie przerosło pierwotny projekt. Jezyk D może jest piękny, logiczny, efektywny, ale nie jest zgodny z C. I to kończy dowód. C/C++ mają ogromny support dla kompilatorów, profilerów, debugerów, IDE, valgrind, jądro, manuale, niezliczone biblioteki, setki tysięcy przeszkolonego personelu. TANIEJ jest wymyślić rozszerzenie C/C++ (np. Qt, CUDA, Cg, CLI, MFC) w oparciu o istniejące środowisko niż konstruować WSZYSTKO od nowa. Aby pobić C/C++, język D musiałby być nie trochę, a o KLASĘ lepszy lub startować w innej kategorii (jak np. Python). Lub mieć wsparcie takiego potentata, jak MS, który stworzyłby i utrzymał niezbędną infrastrukturę.

        6. jarek pisze:

          > C++ jest językiem żywym, o specyfikacji dostosowywanej do potrzeb
          > zaawansowanych użytkowników, którzy programowaniem zarabiają na życie.

          Belkot. Na pythonie tez profesjonalisci zarabiaja na zycie
          a jest o lata swietlne przed C++ w temacie czytelnosci.
          Nawet java (uwaga, tez profesjonalisci z tego zyja!)
          jest czytelniejsza od C++.

        7. Theq pisze:

          Co nie zmienia faktu, że w pewnych zastosowaniach C++ jest bezkonkurencyjny.

        8. bies pisze:

          Jarek: mało Javy w życiu widziałeś. W szczególności niemożność jasnej deklaracji głębokiej kopii (clone()) lub kontraktu not null powoduje, że Java taka strasznie czytelna nie jest. Szczególnie jak doda się do tego poziom średniego programisty Javy.

        9. el.pescado pisze:

          W pewnych zastosowaniach COBOL jest bezkonkurencyjny.

        10. jarek pisze:

          W pewnych zastosowaniach nawet assembler okazuje sie bezkonkurencyjny.
          Jednak nie powiedzialbym, ze assembler czy C++ to sensowne
          jezyki programowania, nalezy ich unikac jak tylko sie da i tyle.

        11. trasz pisze:

          @el.pescado: Podaj przyklad.

      2. Mieszko Kaczmarczyk pisze:

        Mie C++ też jakoś nie leży. Jest mało czytelne do analizy kodu.

    2. krzabr pisze:

      W tym po**banym świecie wszystko jest możliwe . Mi język C nigdy się nie podobał , za to od razu polubiłem ADĘ w której jakoś mi wychodzi więc może coś w tym jest .

      Jakby nie było są tysiące języków programowania i każdy może wybrać coś dla siebie .

      1. BigBen pisze:

        A można jakieś źródło potwierdzające to? Pytam na serio bo do tej pory myślałem że jest wiarygodny wywiad.

        1. bies pisze:

          Tekst ze strony Bjarne'a wystarcza: http://www2.research.att.com/~bs/bs_faq.html#IEEE ?

        2. BigBen pisze:

          No faktycznie, mój błąd. Link dostałem ze źródła które do tej pory uważałem za wiarygodne.

        3. Aule pisze:

          Jako ktoś kto zna dość dobrze C++ muszę powiedzieć, że wywiad wygląda na spreparowany przez jakiegoś sfrustrowanego programistę C.
          Argumenty przeciwko C++ są w większości wytłumaczyć słabą znajomością C++ przez autora i jego marnym stylem kodowania.

    3. Theq pisze:

      Hehe ten żart żyje własnym życiem.

      1. jarek pisze:

        Niestety ten zart ma w sobie kupe prawdy.
        Trudno o bardziej zasmiecony jezyk niz C++.

        1. DerDevil pisze:

          Dla programistów C++ może bardziej przyjemniejszy okazać się jeżyk D tworzony przez Digital Mars
          http://www.digitalmars.com/d/index.html
          Zaś dla programistów C powstający GO od google.
          http://golang.org/

        2. To nie C++ jest zaśmiecone, tylko życie, samo życie…

    4. launchpad.net/~mgol pisze:

      @BigBen
      Nie no, sorry, ale żeby uwierzyć w prawdziwość takiego artykułu, trzeba mieć coś nie po kolei w głowie. Przecież takich rzeczy jest w internecie na pęczki (choćby zmyślony wywiad z Geremkiem na polonica.net).

      Facet najpierw przez wieeele lat nic nie mówi w temacie, potem nagle "wyjawia całą prawdę" w wywiadzie, który nie zostaje opublikowany, mimo że Stroustrupowi na tym zależało, bo przecież nie mógłby tego sam kiedyś powiedzieć na żywo, tylko musiał w wywiadzie. Seriously, jak można w coś takiego uwierzyć? Bo tego pojąć nie jestem w stanie.

      1. BigBen pisze:

        @mgol

        Miałem chwilę słabości.

  4. Sławek pisze:

    Mogliby jednak pozwolić na używanie jakiegoś przełącznika, który włącza ten mechanizm(albo atrybutu funkcji).

    1. kocio pisze:

      Chyba coś mylisz – kod GCC jest dla programistów GCC, nie dotyczy programistów programu kompilowanego. Im jest przecież wszystko jedno jaką składnią jest napisane narzędzie, którego używają.

      1. blinkkin pisze:

        @kocio: Chyba coś mylisz – kod GCC jest dla programistów GCC, nie dotyczy programistów programu kompilowanego. Im jest przecież wszystko jedno jaką składnią jest napisane narzędzie, którego używają.

        Nie do końca jest to prawda. Przypadkiem szczególnym są systemy operacyjne, gdzie kompilator jest integralną częścią. Faktem jest, że większość otwarto źródłowych OSów napisanych jest w czystym C.

        Temu m.in. wśród niektórych deweloperów OpenBSD i NetBSD widać niechęć wobec Clanga/LLVM (kompilatora, którego kod to głównie C++). Trudno oczekiwać od ludzi, którzy spędzili często pół życia programując w C, wielkiego entuzjazmu wobec C++.

        Bardziej problematyczne staje się nadsyłanie poprawek czy potencjalne forkowanie w nieprzewidzianej sytuacji – zawieszenie rozwoju kompilatora na daną platformę czy problemy licencyjne.

        Stąd zainteresowanie PCC (wśród deweloperów tych projektów), które w większości napisane jest w standardzie C99. Może i to margines, jeśli chodzi o statystyki. Jednak na rozwoju alternatywnych rozwiązań (większa konkurencja) zyskają prawdopodobnie wszyscy.

        W każdym bądź razie, otwarto źródłowe kompilatory to obecnie modny temat dyskusji. Oby tak pozostało – dynamiczny rozwój otwartego/wolnego oprogramowania w tej dziedzinie 😛

        1. kocio pisze:

          Oczywiście nie chodziło mi o tego typu implikacje w zaawansowanych przypadkach (tu oczywiście zgadzam się z tobą), tylko o ten nieszczęsny przełącznik do kodu GCC. =}

        2. BigBen pisze:

          Do takich wyjątków zaliczają się też mikrokontrolery.

      2. Sławek pisze:

        Ma to spore znaczenie:
        1. Są środowiska, gdzie wybierany jest kompilator ze względu na zgodność ze standardami. Oczywiście, to dodatkowe perełki nie powinny przeszkadzać, jeżeli wszystko pozostanie w zgodzie ze standardami. Jednak w niektórych środowiskach ktoś może np. przygotować moduł napisany z użyciem nowych możliwości(np. program na zaliczenie)

        2. Developerzy mogą pracować z różnymi narzędziami. Dobrze byłoby, gdyby istniało jakieś narzędzie posiadające tylko zaimplementowane niezbędne minimum, znaczy się standard, by móc łatwo ocenić przenośność kodu. Ma to wielkie znaczenie w przypadku projektów OpenSource.

  5. agent_J pisze:

    Osoby nie będące chociaż średnimi programistami proszę o darowanie sobie komentarzy na temat danego języka programowania.

    1. blinkkin pisze:

      AWK znam świetnie. Skoro na Wikipedii piszą, że to język programowania to się nadaje? 😉

      1. blinkkin pisze:

        I zapomniałbym dodać: jestem wysokim, a nie średnim programistą – 190cm wzrostu…

      2. Theq pisze:

        No ba, nawet lepiej zarabiasz od programistów HTML/CSS http://gazetapraca.pl/gazetapraca/1,103345,778874…

  6. Mikołaj pisze:

    Ciekaw jestem kiedy dopuszczą C++ do kernela. Wiadomo, że łatwiej napisać w C++ duży projekt i w ogóle jestem pełen podziwu, że można ogarnąć tak wielką ilość kodu napisanego w czystym C 🙂

    1. Theq pisze:

      Prędzej piekło zamaraznie.

    2. trasz pisze:

      @Mikołaj: W Linuksie pewnie niepredko, ale w Linuksie wiele rzeczy ma opoznienie. W Windows C++ w kernelu (wlasciwie to w sterownikach) jest "dopuszczone" od dawna; w OSX bez C++ (IOKit) zadnego sterownika nie napiszesz.

      1. Tomasz Woźniak pisze:

        @trasz: hmmm… powoli przypomina to mantrę. Ciągłe narzekanie na Linuksa- coś cię boli z jego powodu?

        1. trasz pisze:

          @Tomasz Woźniak: Zwykle uczuleniene na badziewnosc. Na PiS tez lubie ponarzekac. 😉

    3. Sławek pisze:

      BeOS miał ponoć kernel w C++. Efekt były oszałamiające. Do tej pory niekiedy zwala ten system z nóg.

    4. wojtekm pisze:

      Powtarzasz mity programistów C++. Poczytaj sobie jakie przejścia miał Carmack gdy postanowił przejść na C++ w Doomie 3. Jak można sądzić po ciągle przekładanej premierze Rage wciąż walczą… 😛

      1. mikolajs pisze:

        Czyli Ty programujesz w C? Dla mnie pisanie w języku proceduralnym to katorga. Jeżeli projekt jest duży to podejście obiektowe ułatwia znacznie pracę i nie jest to żaden mit. Jeżeli to mit to dlaczego inne języki (C#, Java, Scala, Python, a nawet PHP5) stawiają na programowanie obiektowe?

  7. koński_pytong pisze:

    Już tylko krok do C# 🙂

    1. mikolajs pisze:

      Tak jak ktoś ma ochotę to może sobie rozwijać open source'owy Singularity od Micriosoftu 😉 Ale skoro MS oddał to społeczności to chyba sam nie wierzy w sukces 🙂

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Newsletter OSnews raz w tygodniu. Bez reklam.