GCC zacznie używać C++
- Dodano: 1 czerwca 2010
- Wprowadził: kocio
- Komentarze: 107
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.
Więcej informacji: https://lwn.net/Articles/390016/
Znalazłeś literówkę? Zgłoś ją używając formularza!
Jeśli uważasz, że ten nius jest nieobiektywny, przedstawia nieprawdziwe wydarzenie, jest spamem lub nie spełnia standardów serwisu, napisz raport.
Niusy na podobny temat:
Komentarze są prywatnymi opiniami dodających je osób. Prosimy o zachowanie kultury wypowiedzi. Komentarze obraźliwe oraz obniżające poziom serwisu będą usuwane. Więcej w regulaminie komentowania.
107 komentarzy
Wszystkie autorskie niusy w serwisie publikowane są na licencji Creative Commons Uznanie autorstwa 2.5 Polska.


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.
@bies: pokaz gdzie napisalem, ze java jest czytelna?
Napisalem, ze jest czytelniejsza niz C++, lapiesz roznice?
@trasz: W przypadku stuletnich aplikacji biznesowych, których nikt już nie rozumie a są kluczowe do działania wszystkiego, COBOL jest niezastąpiony. Po coś się kupuje te wszystkie mainframy od IBM;)
Jaruś: widzę, że Tobie trzeba jak ,,krowie na miedzy'':
void some_function(const some_class &always_exists);
vs.
public static void someFunction(SomeClass theHellIKnowIfItsNotNull);
Łapiesz różnicę czy pojęcie kontraktu (i ogólnie design by contract) jest Ci obce.
@el.pescado: tyle, że te aplikacje są/będą szybciej lub wolniej przepisywane. Czy inaczej, można je bez problemu zrobić w nowszych językach i to by było lepsze od tego co jest. A w Javie, C# czy Pythonie nie napiszesz lepszego FPSa. Przynajmniej ja tak rozumiem bezkonkurencyjność.
Theq: nie będą (przynajmniej tak mi mówi moje doświadczenie). Albo przy okazji jakiejś fuzji/przejęcia będzie migracja na rozwiązanie dominanta albo będą utrzymywane w COBOL-u do końca Świata. Za dużo osobo-lat w nie włożono. Piszesz ,,bez problemu'' i pomijasz olbrzymie koszty.
Poczytaj np. http://www.joelonsoftware.com/articles/fog0000000…
@bies: tu masz sciagawke:
"Nawet java (uwaga, tez profesjonalisci z tego zyja!)
jest czytelniejsza od C++."
No wiec gdzie napisalem, ze java jest czytelna?
Jejku, nawet poziom ,,krowy na miedzy'' jest za wysoki…
Tam powyżej masz przykład dwóch funkcji, w C++ i Javie. I Java, w oczywisty sposób, jest mniej czytelna. Jeszcze raz: Java jest mniej czytelna od C++. I jeszcze raz: Java jest mniej czytelna od C++. I jeszcze raz: Java jest mniej czytelna od C++.
A może potrzebujesz tak: JAVA JEST MNIEJ CZYTELNA OD C++? W licencjach przechodzi…
Nie sądziłem, że ktoś może być aż tak…
@Theq FEAR miał coś w C# napisane nie zgłębiałem się dokładnie co, ale był nawet niezłym fpsem
@Theq: skoro w Haskellu dało się napisać FPS-a (czy dobry, nie wiem, nie gram od dawna), to w C# tym bardziej się powinno.
A że tego się nie robi – to dokładnie tak samo jak z aplikacjami księgowymi w COBOL-u. Istnieje dużo silników w C++, więc taniej jest przystosować istniejący w C++ niż pisać od nowa w C#.
Bzdura, aplikacje w COBOL-u nie mają nic wspólnego z wymagającymi grami. C# się po prostu do tego nie nadaje, nie ma to związku z tym czy "tak jest taniej". O grach na konsolę nawet nie będę wspominał. Co do tego FPSa w Haskellu to pewnie się tnie
Poza tym pisanie silnika w języku czysto funkcyjnym to masochizm. Co dalej, kernel? Może za 15-20 lat to się zmieni, ale wątpię.
@bies
pominąłem koszty bo dyskusja tego nie dotyczy i szczerze mało mnie obchodzą cobolowe zabawki na 10 warstwach emulacji
Jak nie ma potrzeby rozwijania tego, to mogą sobie utrzymywać. Spolskiego czytam, dziękuje.
@bies: jeżeli brak sprawdzania w trakcie kompilacji NPE to ma być zarzut wobec Javy względem C++, to co powiedzieć o braku sprawdzania poprawności wskaźników przez C++ w trakcie kompilacji **ORAZ** w trakcie wykonania?
class X {
private:
Y* obj;
public:
void doSomething() {
obj->toSegfaultOrNotToSegfault();
}
};
A co do gier, to te mniej wymagające, np. na poziomie Quake 2 w C# na pewno można. Skoro w Javie się dało i NIE WIDAĆ RÓŻNICY*, to w C# tym bardziej.
*) http://bytonic.de/html/benchmarks.html
Królik: skoro chcesz zapewnić, że obj jest zawsze obecny to użyj referencji. A teraz pokaż odpowiednik referencji w Javie.
Czyżby?
int *x = NULL;
int& y = *x;
lub
int *x = new int(7);
int& y = *x;
delete x;
To, że czegoś w języku nie ma, to czasem jest zaleta a nie wada.
Np. semantyka przekazywania argumentów w Javie/Scali jest jedna: pass-reference-by-value. W C++ jest tych semantyk więcej:
- pass-by-value
- pass-by-reference
- pass-by-const-reference
- pass-pointer
- pass-pointer-to-const
Jak pokazują liczne przykłady innych języków, brak tego wyboru oznacza jedno: brak straconego czasu na zastanawianie się, którą z nich wybrać przy projektowaniu API. I brak straconego czasu na późniejsze zmienianie.
@bies: Java 7 będzie mieć @NotNull, Scala not-null nie potrzebuje, bo nie ma nulli i ma type-safe Option[] zamiast tego, a co do głębokiej kopii, to jeśli gdzieś jej potrzebujesz, to znaczy, że masz gdzieś mutowalny współdzielony stan. Czyli wtopiłeś totalnie znacznie wcześniej i powinieneś kod przeprojektować a nie robić prowizorkę na głębokim clone.
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 .
@krzabr
Ale faktycznie w tym programujesz, czy tylko hobbystycznie, dla zabawy?
Pytam z ciekawości, ciekawi mnie czy ten język ma jeszcze szanse na zdobycie jakiejś popularności.
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.
Jeśli tylko mieści się runtime C++ (nawet obcięty z wyjątków) to na uC używa się C++(*). Naprawdę głupoty typu konstruktory/przestrzenie nazw/proste szablony przydają się wszędzie. Zapytaj na pclc — tam są ludzie którzy to robią.
(*) Przyznaję, ja używałem C ale dlatego, że nie był jeszcze dostępny runtime C++ na dany uC. Jeśliby był nie zastanawiałbym się ani chwili.
@bies
Na upartego uC można programować w Pascalu. Z tego co znalazłem to C++ nie używa się w uC ze względu na braki w porównaniu do C.
W C masz więcej gotowych przykładów, bibliotek itp.
Tak przy okazji możesz mi podać adres strony WWW z jakimś kompilatorem c++ na uC AVR. Szukałem ale nie znalazłem nic na szybko (na elektrodzie piszą o jakimś avr-g++ ale żadnych konkretów, a w repo jest tylko avr-gcc)
Elektroda to jest super forum jak trzeba naprawić pralkę albo zmontować jakąś płytkę drukowaną. Ale, na $DEITY, nie ucz się tam programować bo będą przez Ciebie kłopoty.
A avr-g++ to wynik kompilacji gcc z –enable-languages=c++ na avr.
Mikrokontroler mikrokontrolerowi nierówny. Na PIC, czy AVR pisze się praktycznie tylko w asemblerze i C (co więcej zadziwiająco często w tym pierwszym), C++ nie ma w nich większego sensu – C++ wzbogaca C o rzeczy przydatne na kompach, ale praktycznie bezużyteczne na małych uK. No, ale to są uK 8-bitowe i rządzą się swoimi prawami. Na 32-bitowych to możecie sobie już odpalić Linuksa i właściwie programować w czym chcecie (nawet i w Pythonie jeśli macie taki kaprys).
Sadi: tia…
Przykład (Numeric to klasa/struktura do operowania na liczbach fixed-point):
Numeric a = b * c;
vs.
struct Numeric a
Num_mul(&a, &b, &c);
Jasne, w ogóle nie przydatne…
Wątek chyba dryfuje, choć skądinąd jest ciekawy.
Przypomnę, że chodzi o język kompilatora. W szczególnych przypadkach oczywiście może to interesować programistów kompilujących nim swój kod, ale nie bardzo sobie wyobrażam po co miałby być przełącznik do włączania "mechanizmu C++" w samym kompilatorze (a nie do kodu, który on kompiluje).
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.
W BeOS kernel był w c i asemblerze a reszta była w c++
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?
@mikolajs: Ale zdajesz sobie sprawe, ze w jezyku proceduralnym tez mozesz pisac obiektowo, wystarczy troche pomyslec? To nie jest tak, ze jak piszesz w C, to obowiazkowo wychodzi ci spaghetti bez enkapsulacji.
A co do programowania obiektowego – rownie dobrze moznaby stwierdzic, ze pisanie obiektowe bez klikanego IDE nie ma sensu, bo wszyscy uzywaja klikanych IDE.
Programuje w różnych językach C i C++ też. Moje doświadczenia zawodowe w projektach, które przedkładały metodologię nad rzeczywistymi potrzebami czyli generalnie preferującymi C++ nad C bo "C++ jest fajne i obiektowe" sprowadzają się do stwierdzenia, że C++ bardziej szkodzi niż pomaga, szczególnie właśnie w dużych projektach, bo gdy okazuje się, że projektowanie hierarchii klas nie odpowiada realiom (a okazuje się tak prędzej czy później w 90% przypadków, bo nie wszystko można przewidzieć i rzadko jest czas na prototypowanie), to zamiast skupić się na doimplementowaniu albo zmianie problematycznego kodu trzeba się wozić z całym tym bałaganem w niewłaściwie zaprojektowanych interfejsach klas i nierzadko bardziej się opłaca napisać dużą ich część klas od nowa.
Jak ktoś ma czas i pieniądze proszę bardzo, ale mnie argumenty ideologiczne zupełnie nie przekonują. Osobiście bliżej mi do podejścia Data Driven Programming, niż OOP. Podejścia te różnią się w swych założeniach diametralnie. OOP stawia na modelowanie i naśladownictwo, co jest intuicyjne ale często mało efektywne zarówno wydajnościowo jak i implementacyjnie.
DDP stawia na dotarcie do istoty problemu czyli ustalenie jak się mają dane wejściowe do wyjściowych i co w tym wszystkim najistotniejsze, a często zupełnie pomijane w OOP, jaka forma danych na wejściu i wyjściu jest najbardziej efektywna oraz jak powinno być zorganizowane ich przetwarzanie.
Często w praktyce okazuje się, że to co w OOP się rozdziela "bo tak to ładnie można zamodelować" w DDP realizuje się razem, niejako patrząc całościowo na problem, "bo nie ma sensu wprowadzać sztucznych interfejsów powodujących wąskie gardła albo nieefektywny przepływ sterowania".
Wbrew pozorom, zwięzłość tak napisanych aplikacji często też skutkuje dużo łatwiejszym ich utrzymaniem i zrozumieniem.
Nie muszę chyba dodawać, że prostota C w stosunku do C++ dodatkowo temu sprzyja (nie trzeba się np. w każdym miejscu zastanawiać czy aby na pewno "+" jest plusem przy czytaniu kodu).
Podsumowując: nie znasz C++ i pracowałeś z ludźmi którzy C++ nie znają (wnoszę po założeniu: C++ => OOP => hierarchia klas).
,,Prostota C'' tia…
void MTLIB_mul_matrix_3_3(struct MTLIB_Matrix_3_3 *result, const struct MTLIB_Matrix_3_3 *one, const struct MTLIB_Matrix_3_3 *two);
Albo lepiej:
int MTLIB_mul_matrix(void *out, const void *one, const void *two);
To dopiero jest szał…
Jakoś mam wrażenie że niektórym po prostu nie chce się opanowywać C++ i mają do tego prawo, ale dorabiają do tego różne wyjaśnienia.
GObject nie wydaje mi się prosta w porównaniu do C++.
Zapewne też C jest wydajniejsze gdy napisze się optymalnie, ale najpierw trzeba mieć na to czas, a ja zwykle zbyt dużo go nie mam
Niektórym nie chce się tracić 10 lat na naukę jak w C++ obchodzić problemy stworzone przez język, tylko wolą skupić się na rozwiązywaniu realnych problemów.
@bies: cały czas przytaczasz jakieś pierdułki dotyczące "lukru składniowego" mające niewielkie znaczenie przy realizacji dużego projektu. Dużo większe znaczenie ma np. to, czy programiści nawzajem są w stanie zrozumieć swój kod. W przypadku C++ może być problem, bo programistów, którzy znają >80% języka jest bardzo niewielu. W praktyce każdy wybiera sobie jakiś podzbiór (jeden będzie fanem Modern C++ Design, a inny będzie używał jak C z klasami). Łączenie kodu C++ pisanego przez różnych programistów w różnym czasie to masakra. Jak to ktoś powiedział ładnie: "C++ is platform-portable, but not programmer-portable". Dlatego wcale się nie dziwię Linusowi…
void* to dla Ciebie lukier składniowy nie mający znaczenia dla dużych projektów?
Niestety void* to jest broń obosieczna. System typów w C++ jest na tyle nieelastyczny, że programiści albo szaleją z rzutowaniami jawnymi (nawet na void*) albo szaleją z template'ami. Jedno i drugie często kończy się źle.
BTW: Co powiesz o niejawnej konwersji const char* i do char*?
W innym wątku o iPhone było: wolisz mieć brak zabezpieczeń czy zabezpieczenia, które często nie działają? To C i C++ analogia pasuje jak ulał. C++ niby chroni programistę przed samym sobą, oprócz tych momentów, kiedy nie chroni.
Wojenne opowieści Michał, podaj przykład… Kod znaczy się.
Wracając do tematu, warto wiedzieć co Linus Torvalds sądzi o C++ – <a href="http://harmful.cat-v.org/software/c++/linus" rel="nofollow">dyskusja dotyczyła Gita. Nie są to zbyt miłe słowa, ocenę pozostawiam wam.
A co tu oceniać. Linus nie zna C++, pokazywał to dostatecznie często. Z Monotone wziął większość pomysłów na Gita…
Dlatego też nie wierzę w rychłe przejście Linuksa na C++, za duży opór deweloperów z Linusem na czele.
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
Zróbmy im na złość.
Mówienie, że linux jest w czymkolwiek opóźniony zakrawa o żart. Wg. mnie, jest o milion lat do przodu w stosunku do choćby takiego MS. Każdy kto kiedykolwiek przez dłuższy czas zajmował się developerką jądra wie ile powstaje projektów, ile z tych projektów udaje się kończyć sukcesem. Jakie jest ich spektrum.
Co do C++ w kernel-ach. Moim zdaniem używanie C w kernelu ma swoje racje. Żeby uzyskać obiektowość, niektóre systemy operacyjne implementują "podejście" obiektowe na bazie C. Przynajmniej niektórych fragmentów. Nie mówię, że jest to bardzo łatwe i intuicyjne w obsłudze, ale jako, że jest to narzędzie wyspecjalizowane, ma znacznie lepszą wydajność w stosunku do mechanizmów C++, które są stosunkowo wolne. Poza tym używanie konwencji stylistycznych (patrz Freebsd: man style) na prawdę znacząco ułatwia połapaie się w kodzie proceduralnym, który może być znacznie bardziej czytelny niż C++.
Przy obecnym kierunku rozwoju bardzo dobrze to widać .
Setki fs'ów , dziesiątki narzędzi na poziomie jądra , dziesiątki gałęzi jąder , celowy , sensowny rozwój pełną gębą .
Bzzz, źle! Ma niższą wydajność. Porównaj sobie kiedyś dla sportu implementację f. wirtualnych w C (na wskaźnikach) do tej z C++ którą kompilator _umie_ zoptymalizować (PGO).
ale kernel zupełnie inaczej implementuje "obiektowość".. ja nie mówię o "rozszerzeniach" C !!
@putrycy: Bo nie masz pojecia o tym, co ludzie robia z Windows. Dosc powiedziec, ze tam, gdzie jest teraz ext4, NTFS byl w 2002 roku. Sensowna implementacje watkow, ktorej Linux dorobil sie w 2003, taki na przyklad Solaris mial w 1992 (Solaris 5.2, jesli dobrze patrze); Windows NT mialo ja od pierwszego wydania. I tak dalej, i tak dalej.
Chyba wybiórczo podajesz przykłady. Sam mam wrażenie, że to Windows jest wtórny w stosunku do Linuksa i MacOS.
@Mikołaj: W stosunku do MacOS – owszem, na przyklad w kwestii GUI. W stosunku do Linuksa trudno byc wtornym, bo ciezko podac przyklad czegos, co w Linuksie bylo wczesniej niz w jakims innym systemie i nie jest bugiem.
.. to podam taki przykład jak pełna przezroczystość okienek, która weszła do Windowsa zdaje się dopiero od wersji Vista. Nota bene działała okropnie. W tym czasie w Linuxie było już milion innych "wodotrysków". Żeby było jasne — ja się tymiż nie podniecam, podaje je jako przykład, który jest dość jaskrawy. Co do MacOSX .. nigdy go nie używałem i nie miałem okazji się zapoznać.. nie wypowiadam się, chociaż szczerze mówiąc.. ciężko mi w to uwierzyć.
Widocznie nie wiem, boć i nie rozumiem co znaczy "sensowna implementacja wątków". Z tego co mi wiadomo, w Linux-ie wątki są i były od zarania; przyznaję, że nie śledzę na bierząco wszystkich zmian kernela, bo sorry, ale musiałbym cały dzień czytać tylko to. Czy "sensowna" implementacja wątków znaczy "wydajna" ? Bo jeśli tak, to chyba dawno nie używałeś linuksa.. Znacznie dłużej niż 2010-2003..
Patrząc na taki benchmark jak http://shootout.alioth.debian.org raczej trudno uwierzyć w aż tak dużo większą wydajność C. A szybkość pisania aplikacji jest często ważniejsza. Być może właśnie C sprawdza się w pisaniu kernela, bo pisze go bardzo wielu ludzi którzy od dawna używają tylko C. Taki Microsoft nie mógł by sobie pozwolić na zatrudnienie tylu pracowników aby ogarnąć projekt kernela napisanego w C.
Skoro tak, to postaw na C# lub Javę. C++ WCALE nie jest prostsze i szybsze w kategoriach czasu "developmentu". Dodatkowo opanowanie C++ w stopniu umożliwiającym "development" kernela, to w większości przypadków co najmniej kilka lat..Wierz mi. A benchmarki mają to do siebie, że są zwykle za mało wyspecjalizowane. Co do developmentu kernela w C++.. cóż.. nigdy tego nie robiłem, więc nie będę się wypowiadał..
http://harmful.cat-v.org/software/c++/coders-at-w…