Gdzie C++ jest niezastąpiony?

1

Uzywam innych jezykow do pracy. Juz wiele razy slyszalem od ludzi nie zwiazanych z C++, ze umiera itp. itd. W co osobiscie szczerze watpie. Poza tym patrzac chwile na CppCon i, ze 'modern' c++ to duzy postep do w ogole nie wydaje sie by C++ sie gdzies wybieral. ( a przeciwko Cpp stawiaja Rust )

Wiec gdzie Waszym zdaniem C++ jest nie zastapiony?

  • gry AAA?
  • HFT?
  • 'backendy' dla innych jezykow VM itp. np. node.js?
  • okolo systemowo?
  • wszedzie tam gdzie najwazniejszy jest performance?
  • IoT?
  • embedded?
  • i tak juz w tym tyle kodu powstalo, ze nie da sieuciec? ;)
5

Psychologicznie zjawisko "X już umiera" (za X podstaw sobie dowolny język lub technologię), często powodowane jest mechanizmem racjonalizacji stanu "nie wiem, nie rozumiem więc spróbuję to jakoś usprawiedliwić". Warto wtedy pytać daną osobę jakie języki czy technologie zna i na podstawie ich różnorodności (a bardziej różnic w oferowanych podstawowych paradygmatach oferowanych przez technologię), oceniać autorytatywność odpowiedzi o śmierci technologii. Taki mechanizm jest często podświadomy.
Po zapoznaniu się z 3-4 technologią, osoba która programuje rozumie że język programowania to narzędzie i to tylko narzędzie. Ma zakres zastosowań gdzie się sprawdza i zakres w którym mniej. Co do analogii, równie dobrze mogę stwierdzić że: "Czas drabin już przemija. Przecież są podnośniki." Zresztą zawsze pojawi się ktoś kto będzie twierdził że wymianę rynny można zrobić z użyciem Jet pack'a i.. ba ... jest to "jedynie słuszne współczesne rozwiązanie". :-)
Inną sprawą jest to że IMHO języka nie można "się nauczyć i stosować do końca swojego żywota zawodowego". Nauka jest procesem ciągłym a praca w tym zawodzie ma immanentnie wpisaną naukę technologii dzień po dniu.
Podsumowując. C/C++ i Fortrana jeszcze bym nie uśmiercał :-)

1

Tak naprawdę niezastąpiony to obecnie chyba tylko w grach AAA. A konkretniej w silnikach tychże gier. W innych punktach, które wymieniłeś C++ trzyma się mocno, ale niezastąpiony nie jest

  • W HFT oprocz C++ dość mocno trzyma się Java
  • Języki programowania implementuje się w C, OCaml'u, Haskell'u, Lisp'ie
  • Około systemowo programuje się jeszcze w C
  • Jeśli chodzi o performance to zależy jaka działka, szybki serwer można napisać w Go, do obliczeń można użyć C. Do zadań ogólnych szybki kod napiszesz też w OCamlu.
  • IoT to C
  • Embedded to C oraz specjalne wersje Javy oraz C#

Tak jak napisałem, wybór C++ w każdej z tych kategorii byłby dobrym wyborem, ale na pewno nie można stwierdzić, że nie ma alternatyw.

1

W sumie moze zle postawilem pytanie. 'Dobrze sie trzyma' to w sumie good enough. ;) A o C to bym sie nie martwil wcale. Sam najwiecej siedze w Javie, w ktorej zakochany nie jestem, i ktora nie jest w sumie ani troche niezastepowalna a jakos czesta w uzyciu. Sam oczywiscie od ludzi z JS w kolko slysze jak to Java umiera...

...a od Javowcow chyba najwiecej slyszalem takich opinii o Cpp. Dla mnie to bardzo krotkowzroczne i chyba nie rozumieja, ze CRUDy to nie tylko to co sie programuje w swiecie ;)

0

Noo ja w sumie trochę przeceniłem znaczenie Cpp w niektórych zastosowaniach. W okołosystemowych zastosowaniach Cpp jest obecny, ale na pewno nie tak silny jak C. Obecnie w HFT java też jest bardziej dominująca niż Cpp.

Ale jeśli chodzi Ci o umieranie i temu podobne dyskusje, to Cpp nie umrze dopóty, dopóki łatwiej będzie znaleźć programistę C++ niż OCaml'a, Go itp. Duża i całkiem oddana społeczność, dojrzałość kompilatorów i narzędzi trzymają język przy życiu.

0

@bialy Mlecarz no prosze Cie...
Akurat Java ma dużo innych zalet do pisania czegos innego niż CRUDy, np.
1)Garbage Collector (tak wiem, są Smart Pointery w C++)
2)Bardzo dobre wsparcie dla wielowątkowości
3)Dużo bibliotek
4)Od Javy 9 modularyzacja

Generalnie oczywiście zgadzam sie że Java nie zawsze jest najlepsza, ale nie jest to język powolny albo tylko do CRUDów

0

Jesli chodzi o gry to jednak tez jest chyba dosc niszowe zastosowanie. Podejrzewam, ze o ile.znajomosc c++ jest wymagana to rzadko sie cos w nim pisze. Bo kto moze korzysta jednak z gotowych game engines. A najwiecej rzezbia pewnie przy top tytulach.

Ciekaw jestem co bedzie z Rust
http://www.jonathanturner.org/2017/10/fun-facts-about-rust-growth.html
Ale troche ludzi narzeka, ze jest zbyt skomplikowany.

0

@scibi92: ja nic takiego nie napisalem i zdaje sobie sptawe z zalet. chodzilo mi o LUDZI, ktorzy poza CRUD nigdy nie wyszli.

3

Ja mam 3 zarzuty, które imho pozwalają innym językom (takim jak rust czy go) wygryzać C++ po troszeczku w różnych miejscach:

  1. Przy templatkach to co produkuje kompilator mówi głównie, że jest jakiś błąd. Tego nie da się czytać. Kod w C++ może wyglądać naprawdę pięknie gdy jest naszpicowany template'ami ale co z tego skoro jeden mały błąd i jesteśmy zdani na siebie?
  2. Odziedziczone po C UB. Smutne jest to, że to prawdopodobnie zostanie z nim już do samego końca.
  3. Brak modułów. Serio, 2 lub więcej plików per 1 klasa (.hpp i .cpp)? serio?
0

@scibi92: Go to ma dobre wsparcie dla wielowatkowosci ;)

Takie Go niby bezposrednio nie konkuruje z Java czy C++ z C wcale ale w wielu moejscach bedzie 'good enough' by sobie poradzic. A jego popularnosc jednak mocno wzrasta.

5
Bialy mleczarz napisał(a):

ze 'modern' c++ to duzy postep

Mam ogólną awersję do nazywania czegokolwiek ”modern”, zwłaszcza dlatego, że co jest modern a co nie jest to zmienia się w czasie, i zależy też od własnego punktu widzenia.

0
Bialy mleczacz napisał(a):

Jesli chodzi o gry to jednak tez jest chyba dosc niszowe zastosowanie. Podejrzewam, ze o ile.znajomosc c++ jest wymagana to rzadko sie cos w nim pisze. Bo kto moze korzysta jednak z gotowych game engines.

Tylko, że jeżeli chcesz zrobić coś mniej standardowego niż to co oferuje gotowy engine, to trzeba będzie to zrobić po stronie natywnej. Albo np. w takim UE4 niby poza C++ masz Blueprints Visual Scripting, w którym błyskawicznie można oskryptować ciekawy gameplay, tyle tylko że performance'owo to to leży. Koniec końców, w UE4 na samych blueprintach robi się tylko bardzo proste gry, bo cokolwiek choć trochę rozbudowanego będzie miało sporo kodu w C++ (szczególnie, jeżeli jest to tytuł na konsole).

0
spartanPAGE napisał(a):
  1. Przy templatkach to co produkuje kompilator mówi głównie, że jest jakiś błąd. Tego nie da się czytać.

To po pierwsze wina kompilatora a nie samego języka (no może języka w tym sensie, że jego złożoność powoduje że jest BARDZO trudno zgadnąć o co programiście chodziło i wypluć sensowny komunikat).

A po drugie, to z wersji na wersję poszczególnych kompilatorów jest jednak coraz lepiej.

  1. Odziedziczone po C UB. Smutne jest to, że to prawdopodobnie zostanie z nim już do samego końca.

Wiele przypadków UB dałoby się zlikwidować bezboleśnie.
Na przykład nie widzę sensu dla którego UB miałyby być wyrażenia takie jak x = x++ czy x++ + ++x.
Wystarczyłoby jednoznacznie określić kolejność operacji. C# przykładowo ma kilka łatwych do zapamiętania reguł.

W C++ problematyczne jest nawet coś takiego: cout << foo() << bar(). Okazuje się, że (przed C++17) nie ma gwarancji, że funkcje foo() i bar() wykonają się w tej kolejności, co może się zemścić jeśli funkcje mają skutki uboczne. Dopiero C++17 nakazuje że foo ma się wykonać przed bar.

Co innego jednak próba odczytania czy zapisu pamięci przy użyciu nieprawidłowego wskaźnika. To musi pozostać UB (i jest to UB nawet w C#, tyle że w nim wskaźników używa się bardzo rzadko).

  1. Brak modułów. Serio, 2 lub więcej plików per 1 klasa (.hpp i .cpp)? serio?

Moduły już miały być dawno, ale chyba nie mogą dojść do porozumienia. I chyba celem modułów nie jest zlikwidowanie podziału na .h i .cpp.
Zresztą sensowne IDE powinno mieć przełączanie między implementacją a nagłówkiem pod jednym klawiszem funkcyjnym.

0

Jako, że C i C++ ma kod portowany na wszystkie procesory, to można to łatwo zamknąć w libce i programować w pythonie, a przed instalacją modułu zainstaluje się dla odpowiedniego procesora.

Dobrze można dla jednego procesora sobie moduł naklepać i go używać w jakimś języku co teoretycznie ten język zastąpi.

Np. bajtkod javy opakujesz w jakieś fajne moduły i potem sobie wywołania systemowe wywołujesz z pythona, a resztę możesz na pythonowej wersji, którą na dany system zaistalujesz, ale wtedy tak jakby i jave i pythona musisz mieć zainstalowanego.

0
Azarien napisał(a):
Bialy mleczarz napisał(a):

ze 'modern' c++ to duzy postep

Mam ogólną awersję do nazywania czegokolwiek ”modern”, zwłaszcza dlatego, że co jest modern a co nie jest to zmienia się w czasie, i zależy też od własnego punktu widzenia.

Mam podobne zdanie (patrz słynny "Pont Neuf"), ale niestety ten termin już powstał i zdaje się jest aktualnie całkiem sensowny.
Nie wiem co będzie za kilka lat, ale póki co hasło "modern C++" daje całkiem niezłe wyniki (z pominięciem "Modern C++ Design" z 2001r).

A co do głównego tematu - C++ (a nawet C) jest obecnie niezastąpione np. w HPC/PC.
Zwłaszcza w niestandardowych konstrukcjach typu "Xeon Phi".
Nie wiem jak z HPC na FPGA.

0

Jedynie w grach jeszcze wojuje, nowoczesne systemy teraz powstają w Rust (RedoxOS, TickOS). Go, Swift może przebić popularnością D, ale do gier i tworzenia nowych silników gier wybrał bym teraz Rust.

1
Bialy mleczacz napisał(a):

Ciekaw jestem co bedzie z Rust
http://www.jonathanturner.org/2017/10/fun-facts-about-rust-growth.html
Ale troche ludzi narzeka, ze jest zbyt skomplikowany.

Moim zdaniem, jeśli porównać go z C++ to wcale nie jest bardziej skomplikowany. Ma zdecydowanie inne podejście do współdzielenia kodu (Rustowe traity vs klasy C++owe), ale np to co robi borrow checker w Ruście (wymuszając na programiście dobrze zaprojektowany kod) programista C++ musi zrobić sobie ręcznie, bo np w pewnych sytuacjach używanie sprytnych wskaźników z C++ daje UB. Z mojego punktu widzenia Rust jest właśnie prostszy niż C++, bo od razu dostaję od kompilatora informację czy dobrze korzystam z referencji. Z drugiej strony Rusta uczę się od niedawna, więc jeszcze nie miałem okazji połamać na nim palców.

0

Ja zycze Rust jak najlepiej. Ale jak dobrze wiemy moze byc super jezykiem a i tak sie nie przyjmie z roznych przyczyn.

Ale mysle, ze C++ i jego projektaci podejma rekawice, by troche zniwelowac przewage Rust. Ale nie wiem czy bedzie to latwe.

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