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.


Powtórzę pytanie z LWN.net, bo jest dosyć interesujące:
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ń:
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:
Czytając to zawsze zadaje sobie pytanie: Czy filozofia GNU może negatywnie wpływać na styl/jakość programowania/programów?
I dobrze widać że groźba przegonienia ze strony clanga zmusiła ich do roboty .
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.
Bardziej chodziło mi o to, że Clang/LLVM napisany jest w większości w C++.
"Lukier składniowy"? Bezmyślne, dosłowne tłumaczenie każdego pojęcia to objaw upośledzenia umysłowego.
Zaproponuj lepsze.
Mnie się podoba określenie "lukier".
@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…
Tak? A co powiesz o tym?
http://www.tinyurl.pl?HsxiNIc1
Może to?
http://www.tinyurl.pl?HsxiNIc1
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.
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 :).
Coś w tym jest. Mi C++ też wydało się robione w sposób sztuczny i nieintuicyjny.
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.
@zk: Chociazby koniecznosc spacji miedzy "> >" w "costam<costam<meh> > foo;".
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.
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.
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ę.
> 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++.
Co nie zmienia faktu, że w pewnych zastosowaniach C++ jest bezkonkurencyjny.
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.
W pewnych zastosowaniach COBOL jest bezkonkurencyjny.
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.
@el.pescado: Podaj przyklad.
Mie C++ też jakoś nie leży. Jest mało czytelne do analizy kodu.
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 .
Stare i nieprawdziwe.
A można jakieś źródło potwierdzające to? Pytam na serio bo do tej pory myślałem że jest wiarygodny wywiad.
Tekst ze strony Bjarne'a wystarcza: http://www2.research.att.com/~bs/bs_faq.html#IEEE ?
No faktycznie, mój błąd. Link dostałem ze źródła które do tej pory uważałem za wiarygodne.
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.
Hehe ten żart żyje własnym życiem.
Niestety ten zart ma w sobie kupe prawdy.
Trudno o bardziej zasmiecony jezyk niz C++.
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/
To nie C++ jest zaśmiecone, tylko życie, samo życie…
Dobry żart :))
@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.
Seriously, man, whadafak ??
@mgol
Miałem chwilę słabości.
Mogliby jednak pozwolić na używanie jakiegoś przełącznika, który włącza ten mechanizm(albo atrybutu funkcji).
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 😛
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. =}
Do takich wyjątków zaliczają się też mikrokontrolery.
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.
Osoby nie będące chociaż średnimi programistami proszę o darowanie sobie komentarzy na temat danego języka programowania.
AWK znam świetnie. Skoro na Wikipedii piszą, że to język programowania to się nadaje? 😉
I zapomniałbym dodać: jestem wysokim, a nie średnim programistą – 190cm wzrostu…
No ba, nawet lepiej zarabiasz od programistów HTML/CSS http://gazetapraca.pl/gazetapraca/1,103345,778874…
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 🙂
Prędzej piekło zamaraznie.
@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.
@trasz: hmmm… powoli przypomina to mantrę. Ciągłe narzekanie na Linuksa- coś cię boli z jego powodu?
@Tomasz Woźniak: Zwykle uczuleniene na badziewnosc. Na PiS tez lubie ponarzekac. 😉
BeOS miał ponoć kernel w C++. Efekt były oszałamiające. Do tej pory niekiedy zwala ten system z nóg.
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ą… 😛
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?
Już tylko krok do C# 🙂
Wstecz…
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 🙂