Kategorie:
36

GCC zacznie używać C++

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 (RSS)

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

zwiń wątek blinkkin  1 czerwca 2010 o godz. 14:22 #
Gravatar

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?

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek krzabr  1 czerwca 2010 o godz. 16:39 #
Gravatar

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

zwiń wątek bies  1 czerwca 2010 o godz. 17:36 #
Gravatar

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.

zwiń wątek blinkkin  1 czerwca 2010 o godz. 20:39 #
Gravatar

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

 
 
 
 
zwiń wątek makakaa  1 czerwca 2010 o godz. 15:14 #
Gravatar

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

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek maq  1 czerwca 2010 o godz. 15:27 #
Gravatar

Zaproponuj lepsze.

zwiń wątek Mieszko Kaczmarczyk  2 czerwca 2010 o godz. 13:14 #
Gravatar

Mnie się podoba określenie "lukier".

 
 
zwiń wątek DerDevil  1 czerwca 2010 o godz. 17:09 #
Gravatar

@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

zwiń wątek makakaa  1 czerwca 2010 o godz. 17:46 #
Gravatar

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

 
zwiń wątek makakaa  1 czerwca 2010 o godz. 17:47 #
 
 
 
zwiń wątek BigBen  1 czerwca 2010 o godz. 16:33 #
Gravatar

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.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek grochu  1 czerwca 2010 o godz. 16:15 #
Gravatar

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 :) .

zwiń wątek BigBen  1 czerwca 2010 o godz. 17:17 #
Gravatar

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

zwiń wątek zk  1 czerwca 2010 o godz. 19:01 #
Gravatar

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.

 
zwiń wątek trasz  1 czerwca 2010 o godz. 19:30 #
Gravatar

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

 
zwiń wątek Silmethule  1 czerwca 2010 o godz. 20:33 #
Gravatar

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.

 
zwiń wątek zk  1 czerwca 2010 o godz. 20:35 #
Gravatar

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.

 
zwiń wątek zk  1 czerwca 2010 o godz. 20:50 #
Gravatar

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ę.

 
zwiń wątek jarek  2 czerwca 2010 o godz. 8:33 #
Gravatar

> 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++.

 
zwiń wątek Theq  2 czerwca 2010 o godz. 8:47 #
Gravatar

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

 
zwiń wątek bies  2 czerwca 2010 o godz. 11:08 #
Gravatar

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.

 
zwiń wątek el.pescado  2 czerwca 2010 o godz. 12:16 #
Gravatar

W pewnych zastosowaniach COBOL jest bezkonkurencyjny.

 
zwiń wątek jarek  2 czerwca 2010 o godz. 12:53 #
Gravatar

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.

 
zwiń wątek trasz  2 czerwca 2010 o godz. 14:37 #
Gravatar

@el.pescado: Podaj przyklad.

 
zwiń wątek jarek  2 czerwca 2010 o godz. 21:48 #
Gravatar

@bies: pokaz gdzie napisalem, ze java jest czytelna?

Napisalem, ze jest czytelniejsza niz C++, lapiesz roznice?

 
zwiń wątek el.pescado  3 czerwca 2010 o godz. 0:08 #
Gravatar

@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;)

 
zwiń wątek bies  3 czerwca 2010 o godz. 8:20 #
Gravatar

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.

 
zwiń wątek Theq  3 czerwca 2010 o godz. 8:45 #
Gravatar

@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ść.

 
zwiń wątek bies  3 czerwca 2010 o godz. 8:53 #
Gravatar

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

 
zwiń wątek jarek  3 czerwca 2010 o godz. 9:07 #
Gravatar

@bies: tu masz sciagawke:

"Nawet java (uwaga, tez profesjonalisci z tego zyja!)

jest czytelniejsza od C++."

No wiec gdzie napisalem, ze java jest czytelna?

 
zwiń wątek bies  3 czerwca 2010 o godz. 9:14 #
Gravatar

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…

 
zwiń wątek marcinsud  3 czerwca 2010 o godz. 10:33 #
Gravatar

@Theq FEAR miał coś w C# napisane nie zgłębiałem się dokładnie co, ale był nawet niezłym fpsem

 
zwiń wątek el.pescado  3 czerwca 2010 o godz. 12:23 #
Gravatar

@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#.

 
zwiń wątek Theq  3 czerwca 2010 o godz. 23:05 #
Gravatar

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 :P Jak nie ma potrzeby rozwijania tego, to mogą sobie utrzymywać. Spolskiego czytam, dziękuje.

 
zwiń wątek Królik  4 czerwca 2010 o godz. 11:21 #
Gravatar

@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();

}

};

 
zwiń wątek Królik  4 czerwca 2010 o godz. 11:24 #
Gravatar

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

 
zwiń wątek bies  4 czerwca 2010 o godz. 19:12 #
Gravatar

Królik: skoro chcesz zapewnić, że obj jest zawsze obecny to użyj referencji. A teraz pokaż odpowiednik referencji w Javie.

 
zwiń wątek Sankozi  4 czerwca 2010 o godz. 21:02 #
Gravatar

Czyżby?

int *x = NULL;

int& y = *x;

lub

int *x = new int(7);

int& y = *x;

delete x;

 
zwiń wątek Królik  5 czerwca 2010 o godz. 14:11 #
Gravatar

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.

 
zwiń wątek Królik  5 czerwca 2010 o godz. 14:18 #
Gravatar

@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.

 
 
zwiń wątek Mieszko Kaczmarczyk  2 czerwca 2010 o godz. 13:16 #
Gravatar

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

 
 
zwiń wątek krzabr  1 czerwca 2010 o godz. 16:44 #
Gravatar

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 .

zwiń wątek kernel_loops  3 czerwca 2010 o godz. 15:59 #
Gravatar

@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.

 
 
zwiń wątek mech  1 czerwca 2010 o godz. 16:55 #
Gravatar

Stare i nieprawdziwe.

zwiń wątek BigBen  1 czerwca 2010 o godz. 17:15 #
Gravatar

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

zwiń wątek bies  1 czerwca 2010 o godz. 17:37 #
Gravatar

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

 
zwiń wątek BigBen  1 czerwca 2010 o godz. 18:03 #
Gravatar

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

 
zwiń wątek Aule  1 czerwca 2010 o godz. 18:08 #
Gravatar

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.

 
 
 
zwiń wątek Theq  1 czerwca 2010 o godz. 17:20 #
Gravatar

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

zwiń wątek jarek  1 czerwca 2010 o godz. 18:27 #
Gravatar

Niestety ten zart ma w sobie kupe prawdy.

Trudno o bardziej zasmiecony jezyk niz C++.

zwiń wątek DerDevil  1 czerwca 2010 o godz. 18:32 #
Gravatar

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/

 
zwiń wątek zk  1 czerwca 2010 o godz. 18:59 #
Gravatar

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

 
 
 
zwiń wątek Mikołaj  1 czerwca 2010 o godz. 22:13 #
Gravatar

Dobry żart :) )

 
zwiń wątek launchpad.net/~mgol  2 czerwca 2010 o godz. 7:31 #
Gravatar

@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.

zwiń wątek mor  2 czerwca 2010 o godz. 9:10 #
Gravatar

Seriously, man, whadafak ??

 
zwiń wątek BigBen  2 czerwca 2010 o godz. 16:19 #
Gravatar

@mgol

Miałem chwilę słabości.

 
 
 
zwiń wątek Sławek  1 czerwca 2010 o godz. 17:44 #
Gravatar

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

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek kocio  1 czerwca 2010 o godz. 19:45 #
Gravatar

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ą.

zwiń wątek blinkkin  1 czerwca 2010 o godz. 21:20 #
Gravatar

@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 :P

zwiń wątek kocio  2 czerwca 2010 o godz. 7:33 #
Gravatar

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. =}

 
zwiń wątek BigBen  2 czerwca 2010 o godz. 17:01 #
Gravatar

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

 
zwiń wątek bies  2 czerwca 2010 o godz. 19:33 #
Gravatar

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.

 
zwiń wątek BigBen  2 czerwca 2010 o godz. 20:17 #
Gravatar

@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)

 
zwiń wątek bies  2 czerwca 2010 o godz. 20:24 #
Gravatar

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.

 
zwiń wątek sadi  3 czerwca 2010 o godz. 0:45 #
Gravatar

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).

 
zwiń wątek bies  3 czerwca 2010 o godz. 8:31 #
Gravatar

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…

 
zwiń wątek kocio  4 czerwca 2010 o godz. 3:57 #
Gravatar

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).

 
 
zwiń wątek Sławek  2 czerwca 2010 o godz. 13:48 #
Gravatar

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.

 
 
 
zwiń wątek agent_J  1 czerwca 2010 o godz. 21:30 #
Gravatar

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

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek blinkkin  1 czerwca 2010 o godz. 21:54 #
Gravatar

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

zwiń wątek blinkkin  1 czerwca 2010 o godz. 21:58 #
Gravatar

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

 
zwiń wątek Theq  2 czerwca 2010 o godz. 8:50 #
Gravatar

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

 
 
 
zwiń wątek Mikołaj  1 czerwca 2010 o godz. 22:22 #
Gravatar

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 :)

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek Theq  2 czerwca 2010 o godz. 8:53 #
Gravatar

Prędzej piekło zamaraznie.

 
zwiń wątek trasz  2 czerwca 2010 o godz. 10:14 #
Gravatar

@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.

zwiń wątek Tomasz Woźniak  2 czerwca 2010 o godz. 14:21 #
Gravatar

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

zwiń wątek trasz  2 czerwca 2010 o godz. 15:36 #
Gravatar

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

 
 
 
zwiń wątek Sławek  2 czerwca 2010 o godz. 13:49 #
Gravatar

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

zwiń wątek DerDevil  2 czerwca 2010 o godz. 20:54 #
Gravatar

W BeOS kernel był w c i asemblerze a reszta była w c++

 
 
zwiń wątek wojtekm  2 czerwca 2010 o godz. 14:28 #
Gravatar

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ą… :P

zwiń wątek mikolajs  2 czerwca 2010 o godz. 15:41 #
Gravatar

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?

zwiń wątek trasz  2 czerwca 2010 o godz. 18:03 #
Gravatar

@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.

 
zwiń wątek wojtekm  2 czerwca 2010 o godz. 18:28 #
Gravatar

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).

 
zwiń wątek bies  2 czerwca 2010 o godz. 19:23 #
Gravatar

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ł…

 
zwiń wątek Mikołaj  3 czerwca 2010 o godz. 22:07 #
Gravatar

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 :)

 
zwiń wątek Królik  4 czerwca 2010 o godz. 13:38 #
Gravatar

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…

 
zwiń wątek mv  4 czerwca 2010 o godz. 14:11 #
Gravatar

void* to dla Ciebie lukier składniowy nie mający znaczenia dla dużych projektów?

 
zwiń wątek Królik  4 czerwca 2010 o godz. 14:50 #
Gravatar

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*? :D

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.

 
zwiń wątek bies  4 czerwca 2010 o godz. 15:48 #
Gravatar

Wojenne opowieści Michał, podaj przykład… Kod znaczy się.

 
 
 
zwiń wątek blinkkin  2 czerwca 2010 o godz. 19:51 #
Gravatar

Wracając do tematu, warto wiedzieć co Linus Torvalds sądzi o C++ – <a href="http://harmful.cat-v.org/software/c++/linus&quot; rel="nofollow">dyskusja dotyczyła Gita. Nie są to zbyt miłe słowa, ocenę pozostawiam wam.

zwiń wątek bies  2 czerwca 2010 o godz. 19:55 #
Gravatar

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.

 
 
 
zwiń wątek koński_pytong  2 czerwca 2010 o godz. 10:07 #
Gravatar

Już tylko krok do C# :)

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek bies  2 czerwca 2010 o godz. 13:02 #
Gravatar

Wstecz…

 
zwiń wątek mikolajs  2 czerwca 2010 o godz. 15:33 #
Gravatar

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 :)

zwiń wątek JSwirus  2 czerwca 2010 o godz. 17:51 #
Gravatar

Zróbmy im na złość.

 
 
 
zwiń wątek putrycy  2 czerwca 2010 o godz. 17:37 #
Gravatar

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++.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek krzabr  2 czerwca 2010 o godz. 19:11 #
Gravatar

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ą .

 
zwiń wątek bies  2 czerwca 2010 o godz. 19:58 #
Gravatar

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).

zwiń wątek putrycy  7 czerwca 2010 o godz. 14:21 #
Gravatar

ale kernel zupełnie inaczej implementuje "obiektowość".. ja nie mówię o "rozszerzeniach" C !!

 
 
zwiń wątek trasz  3 czerwca 2010 o godz. 13:34 #
Gravatar

@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.

zwiń wątek Mikołaj  3 czerwca 2010 o godz. 22:19 #
Gravatar

Chyba wybiórczo podajesz przykłady. Sam mam wrażenie, że to Windows jest wtórny w stosunku do Linuksa i MacOS.

zwiń wątek trasz  4 czerwca 2010 o godz. 7:39 #
Gravatar

@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.

 
zwiń wątek putrycy  7 czerwca 2010 o godz. 15:42 #
Gravatar

.. 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ć.

 
 
zwiń wątek putrycy  7 czerwca 2010 o godz. 14:24 #
Gravatar

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..

 
 
 
zwiń wątek Mikołaj  3 czerwca 2010 o godz. 22:17 #
Gravatar

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.

(Poniżej tego poziomu komentarze nie będą zagnieżdżane)
zwiń wątek putrycy  7 czerwca 2010 o godz. 14:29 #
Gravatar

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ł..

zwiń wątek putrycy  7 czerwca 2010 o godz. 14:37 #
 
 
 

Uwaga! Niektóre komentarze, m.in. te dodane przez niezalogowanych i nowych użytkowników, są ręcznie moderowane. Jeśli Twój komentarz nie ukaże się od razu, nie dodawaj go ponownie, tylko cierpliwie poczekaj na akceptację.

W komentarzach możesz używać prostych znaczników HTML. Przykłady:
  • Link: <a href="http://osnews.pl">OSnews: niusy IT</a>,
  • Wytłuszczenie: <strong>tekst pogrubiony</strong>,
  • Kursywa: <em>tekst pochylony</em>,
  • Przekreślenie: <strike>tekst przekreślony</strike>,
  • Kod: <code>printf("blok kodu");</code>,
  • Cytat: <blockquote>cytat</blockquote>
Uwaga: jeśli dodasz nieznany znacznik, będzie on niewidoczny, gdyż system filtruje takie znaczniki.

Wszystkie autorskie niusy w serwisie publikowane są na licencji Creative Commons Uznanie autorstwa 2.5 Polska.

Twoja sugestia