C lepsze od C++?

0

Przeczytałem w jednej książce na wstępie, że C jest lepsze od C++, bo w C napisane jest wszystko i od niego się wszystko zaczęło. (wypowiedź jest oczywiście skrócona przeze mnie)
Jak to wygląda naprawdę? Czy C++ jest następcą C? Czy tylko dodatkiem do niego, rozszerzeniem? Czy wymagane są podstawy C, żeby umieć pisać w C++? Może dla niektórych odpowiedź jest oczywista, ale dla amatora (np mnie) może mieć znaczenie.

6

Przeczytałem w jednej książce na wstępie, że C jest lepsze od C++, bo w C napisane jest wszystko i od niego się wszystko zaczęło.

Proponuje żebyś wyrzucił tą książke skoro już na wstępie takie bzdury autor wypisuje.

7

Popieram @n0name_l
To co jest lepsze: C czy C++, to jest typowy durny flame typu: konsole vs PC, PS vs XBox, PiS vs PO, itd
C++ powstało z irytacji na C, że pewne rzeczy trzeba dziergać w kółko. Z drugiej strony nadmierny automatyzm C++ potrafi irytować.
Tam, gdzie potrzeba jest większa kontrola nad tym co się dzieje w każdej linijce stosuje się C (np sterowniki), tam gdzie potrzebna wydajność a poziom skomplikowania projektu jest większy stosuje się C++.

0

C jest lepsze od C++, a .NET 2.0 jest lepszy od .NET 4.5.

0

@Madaoo: Oczywiście, że takie wpisy/artykuły można znaleźć w internecie, chodziło mi o odpowiedź bardziej w stylu @n0name_l i @MarekR22. Dzięki za konkretne odpowiedzi.

0

Trochę flame'a:

Kiedy C będzie lepsze?
C może być lepsze jeśli programujesz w duchu tego języka lub gdy jest jedynym dostępnym językiem wysokiego poziomu na danej platformie.
Proste algorytmy bazujące na wbudowanych typach danych przy odpowiedniej implementacji - gdy dokładnie wiesz co robisz - możliwe że będą szybsze w C.
Poza tym ten język robi tylko to co mu powiesz (bo to jeden z najniższych poziomów programowania).
Czyli jeśli zależy Ci na stabilnym oprogramowaniu (ale niekoniecznie czytelnym lub wydajnym) to wybierz C.

C jest językiem wybranym przez twórcę jądra Linuxa - Linusa z kilku powodów:
http://harmful.cat-v.org/software/c++/linus

Kiedy C++ jest lepsze?
W zastosowaniach nie-systemowych. Kiedy robisz aplikacje (GUI, HPC/MPI, przetwarzanie numeryczne i graficzne).
Dlaczego? C++ zawiera masę wysokopoziomowych struktur danych, obsługę wyjątków, konstrukcji (lambda, for-each) i (nareszcie) standardowe wątki (na każdej platformie takie same).

Można się nauczyć C++ nie znając C. Chociaż C++ wynurzył się z C i będzie ciężko pracować z nie-swoim kodem C++ bez znajomości całego języka (w tym konstrukcji C).

0

Czyli można to tak podsumować?
C jest trudniejszy, ale daje większe możliwości.
C++ łatwiejszy i jest lepszy do dużych aplikacji.

1

Zupełnie nie.
Łatwiejsze jest C, ale poziomy abstrakcji trzeba wymyślać i tworzyć samemu.

0

Wygląda że C jest trochę szybsze od C++ http://benchmarksgame.alioth.debian.org/u64q/c.php
Pytanie w stylu, czemu czaty napisane przy użyciu html lub flasha są szybsze od tych w javie.

0

Ekstrapolując linię popularności tych języków widać, że C++ za 5 lat praktycznie zniknie z rynku, a C się utrzyma.
źródło: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

0
Wybitny Młot napisał(a):

A Jave promuje wszędzie NSA ze swoim projektem – językiem Wyvern.
http://www.dobreprogramy.pl/Wyvern-zamiast-HTML-i-JavaScriptu-bezpieczne-programowanie-aplikacji-webowych-wedlug-NSA,News,57066.html

Ale przecież już powstał jeden język do wszystkiego: JavaScript.

0

https://www.gnu.org/fun/jokes/unix-hoax.html

A tak serio to C raczej długo nie zniknie ze względu na użycie na über niskim poziomie. Co innego C++ gdzie kolejka na następców jest już długa. IMHO jedynym "konkurentem" na poletku C, który się pojawił jest IMHO Rust, ale raczej będzie on pracował obok C niż go wyprze. Zwłaszcza ze względu na komunikację z innymi językami, która cały czas oparta jest o nazewnictwo oraz kolejność argumentów z C. C++ z kolei w pewnym momencie będzie miał problem z ciężarem kompatybilności wstecznej i brakiem modułów, który odstraszy programistów, którzy przyjdą z wyższego poziomu abstrakcji. Dlatego teraz jest taki wielki hype na Go i Rusta, bo są kompilowane do natywów przy zachowaniu "zwinności" z wysokiego poziomu.

0

Ale C chyba tylko pozostanie wśród programistów którzy piszą systemy operacyjne, sterowniki, kompilatory, maszyny JVM i jakieś mikro kontrolery. Oraz RedHat dalej będzie pisał okienka Gnome-Shell i GTK3 w nim. A C++ do gier i szybkich programów desktopowych, gdzie wypiera go C# pod windowsem. Wydaje mi się, że gdyby nie rozbudowana biblioteka standardowa C++, to C jest trochę trudniejszy aby się go nauczyć niż C++. Ale C++11, 14, 17 się szybciej rozwija od C/ANSI. Poza C++ pod Linuksem nie ma obecnie kompilowanego języka w którym się szybko pisze programy okienkowe.

0

@Wybitny Terrorysta jest taki język, Vala. Jest tłumaczona na C i kompilowana, a składnię ma podobną do C#.

0

C++ trzyma pewną kompatybilność z językiem C i przejmuje po nim wiele grzeszków, które bez wymuszonej kompatybilności wstecznej może nie miały by miejsca. To jest też pewnie powodem dla którego Delphi ma teraz takie problemy z wprowadzaniem zmian i eliminacją zdeprecjonowanych konstrukcji. Bo po co np. część interface gdy jest to w dużej mierze redundantną informacją zawartą w części definicyjnej - to samo może wygenerować IDE jeśli koniecznie chcemy widzieć klasy na mniejszym poziomie abstrakcji (przykładem jest c#). Problem w tym jednak, że chcąc czy nie chcąc c/c++ przez WinApi determinuje użycie przestarzałego języka - projektując nowy jesteś skazany na przetłumaczenie wszystkich plików nagłówkowych bibliotek, konwencje wywołań, niebezpieczne zarządzanie pamięcią i innych takich historii. Piszę przez pryzmat Delphi gdyż ten język jest mi bliższy. Poznałem kilka innych języków i przez to widzę w jakim stopniu Delphi odstaje od pozostałych (nowoczesnych) języków pod względem składni.
Lekarstwem jest na to następca i o ile w kwestii wysokopoziomowej, jako język ogólnego przeznaczenia wybija się JAVA i C# to nie ma alternatywy na niższym natywnym poziomie dotykającym wstawek assemblera.
RUST? a kto o tym słyszał? Ja dziś i obiecuje się temu poprzyglądać. Ilu programistów o nim nie słyszało...?
Cały czas wysłuchiwałem jakie to C++ ma zaawansowane ficzery i jaki to nie oh ach wypicowany język. Jednak król jest nagi. Cała otoczka C++ jest oparta na tym, że świat nie chciał wypróbować alternatyw. W czasach świetności był głaskany z minimalistyczną składnią - dla mnie over, ale zgoda, składni uczysz się raz. Ważne by się nie naklepać. Ile zalet daje code completion ten tylko się dowie kto nie klepie w notepadzie jak pan Bug przykazał.
A jeśli rozważymy ten problem z tej strony okazuje się, że nagle długie nazwy funkcji dają więcej niż komentarz. Nagle zaklepanie deklaracji klasy to raptem kombinacja kilku klawiszy. Dlaczego do dziś każdy nowy język małpuje pod względem składni po C? Bo jest popularny... Lamus jak zobaczy składnie podobną do C jest w niebo wzięty. Kit z tym że JavaScript to nie C i rządzą tam całkowicie inne reguły - jest fajny bo składnie znam... Zmuszę się (bo muszę) i będę kodził w stylu "C z dwoma plusami" (taki termin usłyszałem w pewnej księgarni) w języku o innym paradygmacie -,-. Świat idzie na przód a C/C++ na dno. Do niedawna istniało przekonanie, że GUI klepane w designer'rze to zuuuo. Prawda jednak taka, że twoje klepanie buttonów da się równie szybko załatwić WYSIWYG'iem i wcale nie będzie to gorszy kod - jak to zawsze było zarzucane osobom piszącym w Delphi. "Język dla idiotów", "nawet lamer może napisać aplikację okienkową przy pomocy Drag&Drop". Może. Bo może.
Po to właśnie było tworzone Delphi i temu zdobyło dużą rzeszę użytkowników. Do dziś widzę pewne upośledzenie C/C++ pod względem zarządzania stringami. Czy w następcy C zostało to naprawione? Partially ale nigdy tak przyjemnie jak w Delphi. Być może są teraz dostępne lepsze języki operujące na napisach choćby Perl albo Python. Cieszę się z tego, że w tej dziedzinie jest postęp. Kiedyś UI w DOSie trzeba było zakodować własnymi łapkami. Jest w tym pewien urok, ale fanbojstwo wymierających technologii to Zuuuuuooooo, trzeba spojrzeć szerzej a nie brnąć w shit bo jak się raz powie się "A" trzeba później powiedzieć "Beee" i taki jest właśnie dla mnie "Ceee". Słowem jeśli ktoś nie wyjdzie poza kręg C/C++ (wrzucam to do jednego wora być może nie słusznie) to będzie się poruszał tylko w comfort zone tego języka. Na uczelni spotkałem mózgowca pod względem C, no normalnie omnibus kolejka priorytetowa w kilka minut. Ale jak przyszło do zakodzenia czegoś w ASP .NET (co było dla mnie taką samą nowością jak dla niego) tylko ja potrafiłem wyjść za mój komfort zone i znaleźć w dokumentacji metodę odwracającą napis albo przekazującą zmienną po sesji a nie przez "static" (- ważne do resetu serwera), to już było za dużo.

TL TR?
sry, że tak się rozpisałem IMHO przeskocz o pewien poziom i jeśli nie jest to twoim językiem docelowym olej, a weź się za coś przyszłościowego. Uczenie się tego skansenu to tylko respirowanie umarlaka.

0

O kurde, dzięki za tyle odpowiedzi.
Ale czy może ktoś mi powiedzieć w 2-3 zdaniach, co lepiej się uczyć na początku, C czy C++? Czy to nie ma znaczenia?

1

Żadnego. Najpierw należy nauczyć się angielskiego. Jak już umiesz to ja polecę SICPa. Potem możesz wybrać język dowolny i nie będziesz już pytał, którego się zacząć uczyć.

0
fornakter napisał(a):

Ale czy może ktoś mi powiedzieć w 2-3 zdaniach, co lepiej się uczyć na początku, C czy C++? Czy to nie ma znaczenia?

C jest prostszy i mniej pokręcony. C++ jest sens się uczyć tylko jeśli chce się być programistą tego języka.

1

C jest prostszy i mniej pokręcony. C++ jest sens się uczyć tylko jeśli chce się być programistą tego języka.

często najłatwiej zrobić coś w tzw. "C with classes" nielubianym przez szpeców od C++, a to IMHO dobre podejście: trzymać się mniej-więcej C, ale tam gdzie w C trzeba coś robić na piechotę to wykorzystać np. kontener z C++.
nie trzeba od razu używać wszystkich cudów na kiju które są och jakie fajne, ale zupełnie niezrozumiałe dla przeciętnego programisty.

0

Może kiedyś powstanie coś ulepszonego na bazie C , gdzie nie będzie wymagana kompatybilność wsteczna z C jak to jest w przypadku C++.
Powinien powstać ++C ,większość książek o Javie pewnych autorów zaczyna się takim kawałem, że nawet nazwa w C++ jest zła i powinna brzmieć ++C.

0

Jeszcze co do pytania autora, jeżeli chcesz się nauczyć kompilowanego języka w stylu C/C++ w miarę nowoczesnego który jest ich następcą to jest jeszcze język D. https://pl.wikibooks.org/wiki/D

0

Ja z kompilowanych (do użytku opensource/domowego) polecił bym "Vala" i "Genie"

2

nie znam C, ale wiem że C++ jest za trudny dla leniuchów,

ludzie, z którymi uczęszczałem na kurs w korpo (wtedy nie dorastałem im do pięt) 3 lata temu, są teraz za mną lata świetlne, nikomu nie chce się uczyć nowinek, c++11 to juz za trudna sprawa a już jest c++14

z C++ jest jak z medycyną, ciągle jest coś nowego i trzeba wkuwać, aby być na topie

edit:

z tego co wiem C też jest rozwijany i ma swoje indywidualne twory jak c11

0
gośćabc napisał(a):

nie znam C, ale wiem że C++ jest za trudny dla leniuchów,

Może coś w tym jest, wszakże lenistwo sprawia, że nasza cywilizacja się rozwija.

z C++ jest jak z medycyną, ciągle jest coś nowego i trzeba wkuwać, aby być na topie

Tak, tylko zmiany w medycynie dotyczą nowych terapii, leków i metod diagnostycznych, a nie zmian w anatomii człowieka. W C++ za to pięty nagle wyrastające z pleców i nerki na czołach nie budzą zdziwienia.

W jednym aspekcie C++ na pewno bije pozostałe języki razem wzięte. W liczbie fanbojów.

5

Zastanawiające jest to, że najwięcej do powiedzenia na temat danego języka (w tym wypadku C++) mają ci, którzy wcale albo prawie wcale go nie znają/w nim nie piszą.

1

Kierując się trochę tym rysunkiem
http://cdn2.carlcheo.com/wp-content/uploads/2014/12/which-programming-language-should-i-learn-first-infographic.png
Zacznę się uczyć C i Pythona
Dzięki za wypowiedzi :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1