Jump to content
MrGrj

If C++ is the most powerful, why isn't it the most popular?

Recommended Posts

  • Active Members

Cateva raspunsuri interesante, numa' bune pentru lectura de dimineata:

With great power comes great responsibility. - Uncle Ben

This pretty much sums it up.

But C++ isn't the most powerful, not even by a long shot. Most powerful in what ?

C++ is incredibly powerful because it is very close to the CPU. It makes your code real fast but you have to write loads of code. Doing multi threads or async programming with C++ is nightmare of the worst kind. It is very hard to use. But almost all operating systems in use today are written in C++. Almost all drivers on your computer are written in C++.

C++ used to be one of the most popular languages in a world. But like it is said, when all you see is a nail, all your problems are solved by a hammer. Just a 20-30 years ago, almost all problems were nails. Most software written was not databases, finance, games or word processors. They were operating systems, bioses, drivers and when your app was running, it was pretty much the only thing that ran on it at that time. When you made a word processor, you had to make drivers for all printers. People did pick your software above someone else, because it supported their graphics card and printer, all of which you had to write, your self.

Then things changed. CPU's became multi core and today you can have 12 cores on 1 cpu, but each core runs way slower than earlier models. So to get good speed, you must write multi threaded code. This is one reason why C++ is less popular today than it was. Another reason is that we have way more programmers today than we did 20-30 years ago. People are not making operating systems and drivers that much anymore. We are making websites, calorie counters, star maps, games, puzzles, databases, finance apps just to name a few variations. These apps do not have to run fast as they spend 99% of their time just waiting for input from the user and also because computers are quite fast. You do not have to go through the steps in doing a C++ program from scratch. But you can. There are frameworks out there today that make C++ look like a normal programming language, to do normal applications. You can write any app without doing a single pointer linked list or ever doing a bitwise operation, but it is there if you need it.

C++ is powerful because you can enter it at any level. You can be a complete beginner or you can be an astro physicist with 40 year programming experience and C++ will be exactly what you are after. There are just cases where new languages and tools are better to solve your problem in way less time. All your problems are not nails anymore, so pick the right or right-ish tools for the job. But know this, most of the tools you use today to make apps and solutions are built in C++.

A tool does not need to be popular to be good

It's like a Bugatti Veryron, it's unsuitable for some terrains and most people just cannot afford it.

C++ is powerful but comes at the cost of much harder code for achieving the same result as other dedicated to a task languages. Also it's freedom gives you the responsibility for handling all the cases by yourself (no garbage collector but smart pointers, no smart recover but exceptions, no event loop but threads, mutex, atomic variable etc…).

In summary what might be achieved in a line in another language might require tenth in C++. Powerful but also a longer time to market, harder dev, harder support, harder cross-platform support, and harder debugging in most of the cases.

Thanks for A2A. This is a polarised and long subject to me.

I’ve used C/C++, C#, Javascript in projects that have run in actual commercial environment. I use Python for quick proof-of-concept modelling (especially in networking area) . I know PHP, Java with a level that would be sufficient for common tasks perhaps.

C and C++ are my preferences and I simply talk about them as a single set of language C/C++ (I will explain later why I use C/C++).

I think C# is very reliable for production environment.

My opinion below is personal and possibly biased.

I-Popularity

If treating a programming language as a product (tool) for developer (user), when it comes to popularity, I think we should consider its usability and its development eco system.

Tools:

First thing I remember when I started C++ is that it was so difficult to find an IDE for starter. Sure, there are great & bad C/C++ IDEs, but how many are there for that have an easy access for HelloWorld program without more or less having the “exponential” dependency of configuring Linux environment, Cygwin, Toolchain, Gdb?

Comparing similar context with other languages such as C#, Java or Python, I really appreciate their accessibility.

C++ Debug:

I don’t know about others but it is always painful for me to inspect a string, or an item inside a container (vector or unordered_map). By the way, I could use some hints for this part if you have any.

I have extended monitor (2 monitors); guess what? typename can sometime run across the two monitors.

How easy it is to maintain stability:

Before C++11, with the introduction of of smart pointers, memory management was much more error-prone.

Trends:

From what I see, web technology & mobile development areas are most demanding now. Knowing an employable programming language is probably a significant measurement for the majority of students and people who look for job in IT industry. What are these? - PHP, Java, Javascript, C#, Objective-C, Swift (This is from my observation at my place).

So what are C/C++ significances?

Google V8 Javascript engine (which is Node.js foundation) is written in C/C++

Mozilla SpiderMonkey Javascript engine is written in C/C++

Apache is written in C/C++

Objective-C is built on C.

PHP, OpenSSL, OpenSSH, SQLite, PostgreSQL, MySQL drivers are written in C

Game engines

A bit controversy, although syntaxes are different, C# and C++11 have similar mindset (at least for me).

And so on ...

So as you see, C/C++ is tricky & picky right from the start but it does have its footprints in the foundation of many greater things.

II-Stating a language powerful can be vague judgement

For me, there are several ways to tell whether a language is powerful. I think C# is powerful. Why? It uses automatic reference counter pointer (from my observation and speculation). C# IDE - Visual Studio is extremely well designed (Xamarin - Mono version is also good). C# user can deliver their work to end-user quickly through .NET technology. The road between C# engineer and end-user is a smooth high-way and well serviced. But sorry, I don’t always prefer C#, I like my things runnable on various platforms (not just Microsoft). My point here is that powerful or not, it depends on one’s specific measurement. For me, it is more important to be able to provide the right & profitable solution, with the right tool. All of my setback moments in engineering career so far have been moments when a solution failed.

When it comes to “powerfulness” of C++, for me, it has these two characteristics: less abstraction & platform-dependent layers and ability of customising memory allocators.

Complexity:

When it comes to efficiency, we talk about O-notation. So, when our inputs get sufficiently large, program efficiency is scaled out to O-notation measurements such as O(n), O(nlogn), O(n^n), O(n^n^n) and so on, you get the point. So we have removed all of the coefficient “k” when input is large.

How about when N is 1, I just want to GET a single row that has details of a customer. This loading is now O(k1) on average (O(kN) worst-case) if we use hashed-map. The constant k, which represents abstraction & platform layers now really has its role. C/C++ should have smallest k in this contest. Now, this is my speculation from work experience (I don’t have any proof). I’d like to hear your thought.

C is language of choice for native library engineers, and C++ is OOP language, suitable for larger scale projects, compile natively with C libraries. This is my simple reason for why C/C++ has smallest k. It is also why I treat them as a single set C/C++ and use it first place.

C++ has customisable (memory) allocator:

I leave this part to a game engine C++ expert.

As always, feel free to point out any error/mistake.

Edit:

- Updated hashed-map complexity

- Updated C++ has customisable (memory) allocator

- Updated Apache

- Replaced "significantly" with "sufficiently"

- Added OpenSSL/OpenSSH/SQLite

Mai multe puteti citi aici.

Link to comment
Share on other sites

Pai iti spun eu parerea mea.

Ca sa faci un lucru in C++ te doare mintea.

Ca sa faci in Delphi sau framework este mult mai practic.

C++ este pentru lucrurile de finete gen manipulare de fisiere sau structura PE ori asemenea.

Nu este practic pentru aplicatii cotidiene. Si este si greu de programat. Doar daca ai lucrat numai in el ti se va parea simplu.

Link to comment
Share on other sites

Pai iti spun eu parerea mea.

Nu este practic pentru aplicatii cotidiene. Si este si greu de programat. Doar daca ai lucrat numai in el ti se va parea simplu.

Adevarat :D Si pe langa asta mai este problema cu diferentele dintre platforme, compilere, arhitecturi. Sa nu mentionez bibliotecile (am vazut ca se face mofturi pentru "librarii") Si cu cat doresti sa lucrezi cat mai aproape de hardware cu atat devine mai dificil.

Bineinteles, daca te limitezi la programe simple (consola) si folosesti C++ doar de dragul <iostream> (nici macar lucrurile utile gen <vector>, <memory>), esti de parere ca extensia .cpp face fisierele sa arate mai sexy. Si cand auzi la cineva cuvantul "templates" te duci cu gandul la proiecte predefinite in MSVC. Atunci normal ca nu ti se pare complicat.

Dar noile imbunatatiri aduse fac viata putin mai usoara. Parerea mea.

Link to comment
Share on other sites

Bineinteles, daca te limitezi la programe simple (consola) si folosesti C++ doar de dragul <iostream> (nici macar lucrurile utile gen <vector>, <memory>), esti de parere ca extensia .cpp face fisierele sa arate mai sexy.

Pa mine nu ma intereseaza sa fie sexy ca daca sunt sexy inseamna ca sunt curve.

Pe mine ma intereseaza sa fie practice si usor de programat. Sa serveasca cat mai facil scopului pentru care le utilizez.

Link to comment
Share on other sites

De ce e "powerfull" C++:

1. cross-platform - Compilatoare atat open-source cat si comerciale

2. optimizat - Un limbaj interpretat nu va ajunge niciodata la viteza sa

3. capabil - Pointeri, mostenire, polimorfism si tot ce ti-ai putea dori de la un limbaj de programare

4. biblioteci - STL, Boost, OpenSSL si multe alte biblioteci sunt create pentru a fi folosite din C++

5. stabil - Standard vechi, bine definit, implementat si inteles

De ce nu e popular?

1. Nu e pentru cei slabi de inima.

  • Thanks 1
Link to comment
Share on other sites

De ce e "powerfull" C++:

1. cross-platform - Compilatoare atat open-source cat si comerciale

2. optimizat - Un limbaj interpretat nu va ajunge niciodata la viteza sa

3. capabil - Pointeri, mostenire, polimorfism si tot ce ti-ai putea dori de la un limbaj de programare

4. biblioteci - STL, Boost, OpenSSL si multe alte biblioteci sunt create pentru a fi folosite din C++

5. stabil - Standard vechi, bine definit, implementat si inteles

De ce nu e popular?

1. Nu e pentru cei slabi de inima.

1. Asa este.

2. Perfect de acord.

3. Nu este adevarat. Sunt si alte limbaje care fac asta.

4. Bibliotecile sunt in general multilimbaj (de regula C si Delphi)

5. Asa este.

De ce nu e popular?

Nu ai dreptate. Daca vrei poti coda in ASM si e mai complicat decat C++.

Problema nu se pune de slab de inima sau nu ci de productivitate. In multe domenii nu este productiv si nu este folosit deloc.

Ca o concluzie din experienta mea de reverser.

Limbajul cel mai folosit pentru aplicatii este de departe Delphi (peste 90%).

C sau C++ este folosit in aplicatiile care trebuie sa manipuleze structura fisierelor sau trebuie sa stea aproape de hardware.

Aplicatiile pentru productivitate nu folosesc niciodata C sau C++.

Mai nou totul se muta in PHP si SQL.

Link to comment
Share on other sites

1. Asa este.

2. Perfect de acord.

3. Nu este adevarat. Sunt si alte limbaje care fac asta.

4. Bibliotecile sunt in general multilimbaj (de regula C si Delphi)

5. Asa este.

De ce nu e popular?

Nu ai dreptate. Daca vrei poti coda in ASM si e mai complicat decat C++.

Probelema nu se pune de slab de inima sau nu ci de productivitate. In multe domenii nu este productiv si nu este folosit deloc.

Ca o concluzie din experienta mea de reverser.

Limbajul cel mai folosit pentru aplicatii este de departe Delphi (peste 90%).

C sau C++ este folosit in aplicatiile care trebuie sa manipuleze structura fisierelor sau trebuie sa stea aproape de hardware.

Aplicatiile pentru productivitate nu folosesc niciodata C sau C++.

Mai nou totul se muta in PHP si SQL.

3. Nu am spus ca e singurul. Alte limbaje au binding-uri/wrappere, un overhead de performanta.

4. La fel ca mai sus, au diverse binding-uri/wrappere. In plus, fiind scrise in C/C++, tipurile de date ale parametrilor si valorilor returnate sunt cele din C/C++. In alte limbaje trebuie sa te adaptezi la aceste cerinte.

Da, ai dreptate cu productivitatea, insa folosind diferite biblioteci poti avea productivitate. Vezi boost, are tot ce iti trebuie, cross-platform.

"Limbajul cel mai folosit pentru aplicatii este de departe Delphi (peste 90%)." - Nici pe departe. Zi-mi 2-3 aplicatii mari scrise in Delphi. Cele mai folosite limbaje: Java, PHP, C++ (ordinea nu conteaza).

Exemple: Microsoft Office, Google Chrome, Firefox, VLC, Antivirusi si extrem de multe altele - totul in C++ (sau C).

Link to comment
Share on other sites

  • Active Members

3. Nu este adevarat. Sunt si alte limbaje care fac asta.

Intr-adevar, sunt si altele, dar ideea era ca e greu sa mai gasesti un limbaj care are toate cele 5 caracteristici mai sus mentionate

Limbajul cel mai folosit pentru aplicatii este de departe Delphi (peste 90%).

Specifica ce fel de aplicatii. Probabil nu te referi la ceva large-scale.

Aplicatiile pentru productivitate nu folosesc niciodata C sau C++.

Ce intelegi prin productivitate ?

Majoritatea browserelor folosesc cel putin 80% C/C++

Tot ce tine de drivers implica exclusiv C ( mai putin C++)

Apache web server - la fel, e facut in C/C++

Exemplele pot continua (Boost, FastFormat, Loki, Pantheios, POCO, Qt, STLSoft) etc.

Mai nou totul se muta in PHP si SQL.

Gresit. Mai nou totul se muta in Cloud dar nu despre asta e vorba. E o diferenta intre Desktop Apps si Web Apps, iar in topicu' asta ne referim strict la C++.

This is just my poor opinion.

Edited by MrGrj
Link to comment
Share on other sites

O sa fac o lista de aplicatii privind productivitatea dar asta (lista) nu cred ca e asa important.

Antivirusul sau browserul nu sunt aplicatii pentru productivitate. (mai) Toate aplicatiile MS sunt scrise in C sau C++.

Imi vin in minte doar cateva aplicatii mari de arhitectura care erau scrise in Delphi dar nu imi aduc aminte si numele pe moment (vorba amicului meu LCF-AT - o data cu varsta creierul devine o sita).

Ca sa accesezi cloud utilizezi PHP si o derivata a SQL.

Driverele nu sunt produse de productivitate (aici cred ca incurci un pic borcanele) si citeste ce am scris mai sus (C si C++ sunt folosite in produse care se apropie de hardware). Driverele sunt aproape de hardware si de kernelul (ring0) O.S.

Productivitatea inseamna produse software care sunt folosite la lucruri curente in munca cu PC de zi cu zi si aduc plusvaloare (manipulare fisiere ex. Total Commander (Delphi), aplicatii design, aplicatii de manipulare imagine, aplicatii de protectie a fisierelor sau programelor (Enigma, Themida - toate Delphi), aplicatii de scanare si OCR (Scan2Pdf 17 PRO), programe legislatie (Lex Expert), etc. )

Link to comment
Share on other sites

1. Asa este.

2. Perfect de acord.

3. Nu este adevarat. Sunt si alte limbaje care fac asta.

4. Bibliotecile sunt in general multilimbaj (de regula C si Delphi)

5. Asa este.

De ce nu e popular?

Nu ai dreptate. Daca vrei poti coda in ASM si e mai complicat decat C++.

Problema nu se pune de slab de inima sau nu ci de productivitate. In multe domenii nu este productiv si nu este folosit deloc.

Ca o concluzie din experienta mea de reverser.

Limbajul cel mai folosit pentru aplicatii este de departe Delphi (peste 90%).

C sau C++ este folosit in aplicatiile care trebuie sa manipuleze structura fisierelor sau trebuie sa stea aproape de hardware.

Aplicatiile pentru productivitate nu folosesc niciodata C sau C++.

Mai nou totul se muta in PHP si SQL.

Cum am putea ajunge si noi la fel de buni ca si tine in reversing ? Care sunt pasii exact de urmat ? Ma refer la foarte buni, nu newbie adica te uiti la niste tutoriale pe tut4you+youtube si gata. Vad ca voi astia foarte buni stiti mult mai mult decat ce e pe forumuri/internet in general.

Link to comment
Share on other sites

@razvandragos29

Interesanta opinie si in general adevarata. Eu sunt economist insa si lucrez contabilitate. Deci cam departe de demeniul reversingului. Unul care lucreaza la BitDefender, spre exemplu, normal ca e beton in IDA si C++. La mine insa nu este obligatoriu.

Singurul meu proiect de anvergura este Acte Auto Pro 2015 (Acte Auto Pro - Solutie profesionala pentru birourile de acte auto - Urmatorul pass in business) unde am codat cred ca peste 1000 ore. In rest subtirel. Daca vreti sa ma ajutati faceti-mi reclama la acest program ca sa pot castiga si eu cate ceva sa ma pot tine in domeniu altfel este greu sa te tii cu tehnologiile si ce e nou in conditiile in care nu ai venituri corespunzatoare timpului alocat pentru un anumit domeniu. De regula cam ce castig de aici il bag in reversing. Spre exemplu calculatorul meu este un Q6660 cu 6 Gb DDR800. Pana anul trecut am avut un Athlon XP 2000+ cu 3Gb DDR400.

@Che

Multumesc pentru apreciere dar cred ca ma incadrez la nivelul mic spre mediu.

Puteti ajunge cu foarte multa rabdare si repetarea unor lucruri. Dar prima data trebuie sa inveti teoria altfel nu stii ce o sa faci pe acolo.

Gen:

Va trebui sa investesti ceva in resurse hardware, sa cumperi si sa citesti carti de specialitate si cel mai important sa exersezi ce vezi in carti ca sa intelegi ce faci de fapt.

Eu unul am inceput in 1999 cu decompilarea programelor in FoxPro 2.6.

Pe forumuri normal ca se pune informatia care nu mai este utila si este depasite. Reversingul se face in avangarda si informatiile se tin secrete pana sunt desuete.

Eu multe lucruri nu le pun la liber deoarece am constatat urmatorul lucru:

Dupa ce pui la liber sunt foarte multi care ia ce pui tu si vand imediat.

Spre exemplu s-a milogit chiar unul de aici de la voi de pe forum sa il deprotejez un anume client de joc (Metin sau ceva de genul) ca ii trebuie etc (miloaga efectiv) ca sa aflu de la un user pe Skype (din afara) ca respectivul i-a vandut fisierul deprotejat cu 350 EUR. Ii despachetasem 3 versiuni anul asta. Moka. El l-a vandut imediat cu 350*3=1050 EUR (~4600 LEI). Tipul se laudase ca el l-a facut si ca a fost greu etc... iar cel din afara a muscat.

Din aceasta nefericita intamplare mi-am dat seama ca nu e bine sa fac astfel de lucruri si nu mai dau nimic gratis sau pun scripturi pentru deprotejare la liber. Adica eu iau un SSD (~400 lei) in rate de la Altex ca nu imi permit si altii castiga mii de lei furand munca mea. Mai am un exemplu cand am facut un crack la un program de contabilitate caci inteleg ca nu mai se produce si tipul avea nevoie de el pe alta statie alta decat pe cea care fusese licentiat si intermediarul mi-a dat mie o suma si el i-a cerut beneficiarului final de doua ori suma mea, beneficiarul final nestiind ca asta ma pacaleste si s-a dat drept persoana care cumparase licenta. Am foarte mult exemple...

Discutia e lunga dar retine ca fara multa munca nu ajungi bun.

Success!

Edited by giv
Link to comment
Share on other sites

@giv

Scuze de intrebare dar eu nu-s chiar asa de la curent cu noutatile din domeniul crackingului. De ce zici ca trebuie sa investesti in resurse hardware ? Nu e de ajuns OllyDbg, IDA Pro sau ce dubugger o mai fi plus alte programe auxiliare, scripturi etc. ?

Link to comment
Share on other sites

Reverseul e mai complicat azi ca se pun frameworkuri peste librarii peste nebunii pana iese un cluster fuck. Apoi se baga si gigi Windows si dupa ce ca era cluster fuck, iese un shit storm :) Te apuci si zdrang iti crapa din cine stie ce bug, de nici nu stii de unde sa il apuci, de la driver, de la windows, vre-o protectie, de la soft...

Da, c++ e bun si sunt aplicatii de top scrise in el. Insa nu va spune nimeni ca programatorii aia de c++ care au scris aplicatiile sunt si ei de top in lume. Nu sunt freelanceri de pe Elance:) E ca si cum esti mecanic la Ferrari...

Link to comment
Share on other sites

@giv

Scuze de intrebare dar eu nu-s chiar asa de la curent cu noutatile din domeniul crackingului. De ce zici ca trebuie sa investesti in resurse hardware ? Nu e de ajuns OllyDbg, IDA Pro sau ce dubugger o mai fi plus alte programe auxiliare, scripturi etc. ?

Deci cracking<>reversing

Eu nu ma ocup de cracking.

Eu doar am ca obiect de studiu inversarea schemelor de protectie software (Themida, Enigma, ExeCryproc, PcGuard, Armadillo etc.). Eu scot fisierul original ca inainte de incapularea in stratul protectorului. Mai departe sa sparg programul nu ma bag.

De ce trebuie resurse.

Spre exemplu daca folosesti OllyDbg sa zicem (1.1) si analizezi un fisier de cativa MB (functia analyse) cu un procesor bun stati cateva zeci de secunde iar cu unul prost zeci de minute datorita complexitatii taskului.

Sau daca folosesti IDR al lui Crypto pentru Delphi la fel. Pe un PC slab stai zeci de minute cea ce face ca treaba sa fie nefezabila. Nu poti sta ore doar sa analizeze un program cateva functii, se poate cateodata sa ai nevoie sa reanalizezi codul de mai multe ori in cadrul unei sesiuni de studiu.

Spre exemplu daca o valoare trebuie obtinuta prin bruteforce iti tebuie un sistem bun etc.

Un script se ruleaza repede pe un PC bun si foarte incet pe unul slab. Ca sa faci un script bun trebuie sute sau mii de rulari pana iti iese cum trebuie (vezi ce nu e bine, corectezi etc.)

Link to comment
Share on other sites

@giv

Eu sincer te admir, as vrea sa fiu asa de bun ca tine si sa stiu ce stii tu.

Referitor la programul pe care-l vinzi trebuie sa insisti pe anumite chestii daca vrei sa ti-l cumpere cineva (sau cat mai multi):

1. Trebuie sa zici clar ce anume face programul si asta sa afle vizitatorul chiar de pe prima pagina.

2. Trebuie sa zici, sau mai bine zis sa explici cat mai clar si mai usor de inteles de ce ar trebui cineva sa-ti cumpere programul tau si nu alt program (daca exista pe piata) sau ce avantaje exista comparativ cu faptul daca nu l-ar cumpara.

3. Cat mai multe poze si eventual 2-3-5 videouri in care arati cum se foloseste programul. Eu cand caut un program, chiar si free, caut mai intai sa vad cum arata acel program ca daca nu-mi place cum arata sau daca altul mi se pare ca ar avea mai multe functii, atunci nici nu-l mai descarc. Intre doua programe care fac acelasi lucru il aleg pe ala care are poze si arata cum anume e programul, nu sa stau eu sa-l descarc si sa-l instalez si pe urma sa vad ca e nasol sau nu e ceea ce cautam.

Poti sa ai si o reclama platita la google pentru "acte auto" sau ce ar cauta un om obisnuit si il poate ajuta programul tau.

Acuma ONTOPIC:

Cred ca C++ nu e popular fiindca e cam greu de invatat. E mai simplu un VB.NET in care toate sunt cu Object.proprietate si cateva chestii mai complicate. Pentru C++ mai ai nevoie si de google, si cam des.

Link to comment
Share on other sites

Off

Daca imi permiteam apelam la un specialist de creat site web sau publicitate (toti cer un buget de minim 50 lei/zi pentru reclama). Eu nu imi permit 1500 lei/luna numai pentru reclama. Siteul e facut de mine.

O sa incerc sa tin cont de sugestiile tale.

ON.

Nu e chiar greu de invatat. E alambicat el ca structura.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...