Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Cum sa aleg intre C si C++

- - - - -
  • Please log in to reply
54 replies to this topic

#1
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
We all talk about using the right tool for the job in the context of programming items. But which job? And what's the right tool for it?
I want your help in determining the answer for this.

Punctele forte si punctele slabe ale lui C: http://hammerprincip...ghttool/items/c

Punctele forte si punctele slabe ale lui C++: http://hammerprincip...ttool/items/c-2

Comparatia intre cele doua http://hammerprincip...ool/items/c/c-2

Si ca sa eliminam confuzia pentru elevi: in scoli nu se face C++, ci doar C-ul din C++. Unii au norocul de a auzi cuvantul "clasa C++", si cei pasionati studiaza individual C++.

C++ inseamna:
  • Casts
  • Flexible Declarations
  • 'struct' and 'union' Tags
  • 'const'
  • The :: Operator (namespaces, classes)
  • 'new' and 'delete'
  • References
  • Function Overloading
  • Polymorphism
  • Generic Programming (templates)
  • (Pure) virtual methods (interfaces)
Acest subiect este un articol. Completari, corecturi, întrebari, critica constructiva sau multumiri sunt ca de obicei binevenite.
Dupa ce s-a ajuns la o concluzie finala, discutia va fi stearsa si concluzia mutata în postul initial. Asa se poate pastra totul într-un loc si este usor de urmarit si de citit de oricine viziteaza aceasta arie aproape saptamânal, cât si de cei care citesc acest topic pentru prima oara.


#2
dan-s

dan-s

    Active Member

  • Grup: Banned
  • Posts: 1,699
  • Înscris: 02.07.2013

View PostOriginalCopy, on 17 mai 2014 - 06:16, said:

Si ca sa eliminam confuzia pentru elevi: in scoli nu se face C++, ci doar C-ul din C++. Unii au norocul de a auzi cuvantul "clasa C++", si cei pasionati studiaza individual C++.
Ca să elimin și eu alte confuzii: asta e părerea ta. Eu am făcut în liceu C++ iar în manualul de liceu din clasa a XI-a ni s-a prezentat și clase precum și Borland C++ Builder 1.0 (manualul de aceiași editură și de aceiași autori am folosit toți cei 3 ani de liceu).

View PostOriginalCopy, on 17 mai 2014 - 06:16, said:

We all talk about using the right tool for the job in the context of programming items. But which job? And what's the right tool for it?
I want your help in determining the answer for this.

Punctele forte si punctele slabe ale lui C: http://hammerprincip...ghttool/items/c
Punctele forte si punctele slabe ale lui C++: http://hammerprincip...ttool/items/c-2
Comparatia intre cele doua http://hammerprincip...ool/items/c/c-2

Crede-mă că cei care ajung să aibă nevoie să aleagă între C și C++ vor ști foarte bine diferențele. Pentru problemele care se fac în școli diferențele nu se prea observă.

Edited by dan-s, 17 May 2014 - 06:54.


#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postdan-s, on 17 mai 2014 - 06:54, said:

Ca să elimin și eu alte confuzii: asta e părerea ta. Eu am făcut în liceu C++ iar în manualul de liceu din clasa a XI-a ni s-a prezentat și clase precum și Borland C++ Builder 1.0 (manualul de aceiași editură și de aceiași autori am folosit toți cei 3 ani de liceu).

"Ni s-au prezentat" suna pasiv. Iar clasele nu sunt totul in C++, ci doar inceputul.

#4
dan-s

dan-s

    Active Member

  • Grup: Banned
  • Posts: 1,699
  • Înscris: 02.07.2013

View PostOriginalCopy, on 17 mai 2014 - 07:07, said:

"Ni s-au prezentat" suna pasiv. Iar clasele nu sunt totul in C++, ci doar inceputul.
Clasele folosind keyword "class" nu există în C. În afară de programare generică cam toate acele noțiuni enumerate de tine le-am găsit în manualul de liceu (și ținând cont că era vorba de anul 2003 cred că se înțelege de ce nu s-a prezentat la liceu programarea generică). Am folosit și operatorii new și delete când am studiat alocarea dinamică. Așa cum e mai simplu pentru mulți să folosească cout și cin în loc de printf și scanf e mai simplu să folosească new și delete decât funcțiile C pentru alocare și eliberare de memorie (pe care nici acum nu le știu care sunt).

Spun că ni s-a prezentat deoarece clasa în care am fost era praf la C++. Eram clasă de informatică și în afară de mine și un coleg ceilalți erau bâtă în programare (mulțumită sistemului de învățământ din acea perioadă și a faptului că exista în mintea multor părinții că toți copiii buni la școală trebuie să se ducă la informatică chiar dacă nu au chemare pentru așa ceva). În clasa a XI-a cred că a stat profesoara aproape un semestru să îi facă pe colegi să priceapă listele simplu/dublu înlănțuite. Se înțelege că apoi nu a mai fost timp de OOP. Dar eu am citit acele lecții deoarece mi-a plăcut programarea. De asta spuneam "ni s-a prezentat în manual". Poate dacă clasa era mai bună în programare ajungeam să facem și OOP la liceu. Acum nu mai țin minte dacă ne-a zis și profesoara ceva de OOP sau doar am citit eu din manualul de informatică (asta a fost acum vreo 10 ani). Dar asta nu prea contează.

Edited by dan-s, 17 May 2014 - 07:52.


#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007

View Postdan-s, on 17 mai 2014 - 06:54, said:

Eu am făcut în liceu C++ iar în manualul de liceu din clasa a XI-a ni s-a prezentat și clase precum și Borland C++ Builder 1.0 (manualul de aceiași editură și de aceiași autori am folosit toți cei 3 ani de liceu).

Tu, poate, dar uita-te la codul de pe arie si vei vedea ca marea majoritate nu fac altceva decat sa foloseasca cout/fstream si gata, se cred in lumea C++.

#6
dan-s

dan-s

    Active Member

  • Grup: Banned
  • Posts: 1,699
  • Înscris: 02.07.2013
Pentru că majoritatea problemelor sunt de clasele IX-X. După cum am spus, lecția despre clase era pusă cam prin ultimele capitole din clasa a XI-a. Iar cum în clasa a XII-a se studiază SGBD e clar că nu prea sunt șanse să vezi probleme care să aibă concepte specifice C++ pe aria aceasta.

Ideea principală în liceu e să te învețe să înțelegi programarea și logica din spatele acesteia. Concepte mai avansate ce le găsești în limbaje cum e C++ le faci prin facultate sau pe cont propriu. Totuși să nu uităm că e vorba de niște copii care au prima lor întâlnire cu modul de gândire algoritmic. E nevoie de timp până ce ajung să înțeleagă cum trebuie programarea. Mai ales că se pune un mare accent pe dezvoltarea de algoritmi și dezvoltarea gândirii și mai puțin pe limbaj.

Edited by dan-s, 17 May 2014 - 07:56.


#7
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Ce bine ar fi prins accesarea unui SGBD din C/C++ daca tot se predau in a 12-a.

#8
dan-s

dan-s

    Active Member

  • Grup: Banned
  • Posts: 1,699
  • Înscris: 02.07.2013
Eu personal cred că mai bine era dacă se studia C și să îți dea bazele de a programa un mouse sau de a face programare grafică, etc. în C în loc de atâtea probleme de matematică. Așa măcar rămâneai de la liceu cu o idee în legătură cu modul în care funcționează multe chestii ce le luăm ca normale dar nici nu avem habar cum funcționează (mai ales că orice puști e fascinat de ideea de a programa jocuri pe PC).

View Postdani.user, on 17 mai 2014 - 07:57, said:

Ce bine ar fi prins accesarea unui SGBD din C/C++ daca tot se predau in a 12-a.

Ai mare dreptate. În loc să te pună să tocești ca prostu' niște comenzi Fox Pro puteai să înveți mai corect ce înseamnă o bază de date și cum te poți conecta la ea și să faci operații cu ea. La prima mea întâlnire cu bazele de date mi-a fost foarte, foarte greu că nu puteam înțelege ideea din spate. Și mi-a trebuit ceva timp până m-am prins puțin (știe cel mai bine laurențiu că el tot îmi spunea câte o chestie și eu făceam niște tâmpenii mai mari ca mine).

Edited by dan-s, 17 May 2014 - 08:05.


#9
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Cum sa alegi intre C si C++? Simplu: alegi C++.
"C++ is a better C". Nu exista nimic din ce poti face in C sa nu poata fi facut, cel putin la fel de usor, in C++. Chiar refuzand sa folosesti orice facilitate suplimentara a C++-ului, cat de mica, si tot beneficiezi de sistemul de type checking. Programand procedural, si tot vei gasi mici chestii foarte utile.
"C++ supports data abstraction, object-oriented programming, template programming". Suplimentar, ai la dispozitie un set imens de facilitati, din care iti poti alege ce-ti va face viata mai usoara; nimeni nu te forteaza insa sa folosesti vreo chestie anume. Nu exista "nu programezi in C++ daca nu e orientat obiect"; esti liber sa alegi sa o faci, sau sa nu. Partea frumoasa, libertatea asta vine fara vreun cost ascuns (e.g. de performanta).

Imi pare rau, dar comparatia de pe hammerwhatever este BS. Hai sa nu promovam o imagine falsa a C++-ului, ok? Voturile a 9000 de pseudoprogramatori valoreaza fix zero.

De exemplu, reiese ca C ar avea avantaje ca limbaj low level, control, eficienta, pentru aplicatii embedded si real time.
Acestea sunt exact o parte dintre criteriile de proiectare ale C++-ului. Trebuie sa nu cunosti limbajul ca sa spui ca C++ sta mai prost.

Chestia cu scrisul codului mai elegant in C ar fi amuzanta, daca n-as fi vazut tone de cod "elegant" scris in C. Presupun ca multora le place sa abuzeze de macrouri...

Cireasa de pe tort, cica "THIS LANGUAGE IS LIKELY TO BE A PASSING FAD". O, da.

Pentru nelamuriti, recomand cartea lui Stroustup: The Design and Evolution of C++
http://www.amazon.co...p/dp/0201543303

#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostTS030, on 17 mai 2014 - 10:26, said:

Partea frumoasa, libertatea asta vine fara vreun cost ascuns (e.g. de performanta).
Aici te inseli. http://programmers.s...-c-and-c-over-c

Nu este deloc de neglijat punctul "you need to interact with other languages that can only interact with C". D-asta nu prea ai sa vezi alte limbaje scrise in C++, majoritatea sunt scrise in C sau in ele insesi.

Nici sistemele de operare (si implicit drivere) nu sunt scrise de obicei in C++.

Si da, atata timp cat eviti sa folosesti posibilitatile pe care le ofera C++ dintr-un anumit motiv, nu mai programezi in C++ idiomatic, ci in altceva, de obicei C.

#11
xyv123

xyv123

    Member

  • Grup: Members
  • Posts: 439
  • Înscris: 01.03.2012
Un aspect demn de mentionat este faptul ca daca vrei sa scrii o biblioteca careia sa-i faci binding-uri catre alte limbaje (Java, Perl, Ruby, PHP, whatever ...) atunci ori o scrii in C, ori daca o scrii in C++ tot trebuie sa scrii un layer C, pentru ca vrei sa expui un API C.
Un articol bun pentru cel de-al doilea caz este asta: http://lucumr.pocoo....tive-libraries/
Pentru Python ai putea folosi Boost.Python, dar, in cazul general, cam ai nevoie ca biblioteca aia sa expuna un API C.
Deci, daca vrei interoperabilitate cu alte limbaje e o idee buna sa scrii in C.
Ca si fapt divers, uite un articol scrise de autorul lui ZeroMQ (care nu cred ca e cazul sa fie numit pseudo-programator):
Why should I have written ZeroMQ in C, not C++:
http://250bpm.com/blog:4
http://250bpm.com/blog:8

Apreciez C++-ul, dar nu-i cazul ca cineva sa creada ca limbajul C e o chestie obsolete care nu mai e buna la nimic.

Edited by xyv123, 17 May 2014 - 11:07.


#12
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
C++ complica ABI-urile. Cand ai nevoie de o ABI curata, stabila, folosesti C.

#13
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Daca tot spui ca ma insel, ai putea explica si unde-s costurile; caci nu apare nimic de genul asta in pagina indicata.

Ce treaba are interactiunea intre module scrise in diverse limbaje si a "scrie un limbaj" in C sau C++?
In C++ poti foarte simplu exporta interfete "C". Cat despre a doua chestie, HotSpot JVM de exemplu este C++.

Bjarne Stroustrup mentine o lista de aplicatii notabile scrise (partial) in C++:
http://www.stroustru...plications.html
Windows si OS X sunt mentionate. Stim ca Linus Torvalds are o ura irationala pentru C++, deci Linux n-o sa vezi pe-acolo. In alte cazuri, decizia a fost probabil luata din motive legacy.

Dar daca programezi procedural, folosind facilitati din C++? C++ e un limbaj multiparadigma, este incorect sa-l asociezi exclusiv cu programarea orientata obiect (de exemplu).
Eu lucrez in ambele limbaje, si crede-ma ca de multe ori am resimtit lipsa unor mici chestiute din C++.

De acord cu ABI, insa cat ne impacteaza acest lucru?

Edited by TS030, 17 May 2014 - 11:31.


#14
InTech

InTech

    Kietata ?

  • Grup: Senior Members
  • Posts: 4,739
  • Înscris: 23.11.2005
Eu am realizat care-i adevarata diferenta intre C si C++ cind am trecut de la scris aplicatii de user mode folosind STL si alte librarii high-level, la device drivere de Linux scrise in C chior.
Ca sa explici unui incepator ca exista o mare diferenta si care e aceea, e greu, mai bine il lasi sa citeasca ce vrea, ca tot acolo o sa ajunga.

#15
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012

View Postxyv123, on 17 mai 2014 - 11:03, said:

Un aspect demn de mentionat este faptul ca daca vrei sa scrii o biblioteca careia sa-i faci binding-uri catre alte limbaje (Java, Perl, Ruby, PHP, whatever ...) atunci ori o scrii in C, ori daca o scrii in C++ tot trebuie sa scrii un layer C, pentru ca vrei sa expui un API C.
Un articol bun pentru cel de-al doilea caz este asta: http://lucumr.pocoo....tive-libraries/
Pentru Python ai putea folosi Boost.Python, dar, in cazul general, cam ai nevoie ca biblioteca aia sa expuna un API C.
Deci, daca vrei interoperabilitate cu alte limbaje e o idee buna sa scrii in C.
Ca si fapt divers, uite un articol scrise de autorul lui ZeroMQ (care nu cred ca e cazul sa fie numit pseudo-programator):
Why should I have written ZeroMQ in C, not C++:
http://250bpm.com/blog:4
http://250bpm.com/blog:8

Apreciez C++-ul, dar nu-i cazul ca cineva sa creada ca limbajul C e o chestie obsolete care nu mai e buna la nimic.
Punctul meu de vedere nu este ca C ar fi "o chestie obsolete care nu mai e buna la nimic"; si devin irascibil daca cineva incearca sa-mi atribuie un asemenea BS ;)
C-ul este inca de actualitate, dar asta in principal din doua motive:
- "legacy code" - o baza instalata imensa, care trebuie mentinuta, extinsa etc.
- "legacy programmers"
- suport cam pe toate platformele

Punctul meu de vedere este ca, in situatiile in care ai putea folosi fie C, fie C++, C++ este de preferat. Asta chiar daca programezi procedural, fara exceptii etc. Din nou: C++ is a better C.

Am aruncat o privire pe blogul autorului ZeroMQ, din avion se vede ca titlul n-are sens. Nu, n-ar fi trebuit sa scrie in C in loc de C++; ci poate n-ar fi trebuit sa foloseasca acele containere STL. Sau poate n-ar fi trebuit sa foloseasca exceptii asa cum descrie el.
Nu stau acum sa analizez in detaliu exemplele lui, dar pare a fi cazul tipic de "anti-C++ folosind ca exemple o utilizare gresita a acestuia". O sa numesc asta "programming against a language", si nu dovedeste nimic.

Cititi cartea aia. Really. Nu zic c-o sa devina C++-ul limbajul vostru preferat, dar o sa intelegeti mai bine deciziile din spatele fiecarei facilitati introduse.

#16
xyv123

xyv123

    Member

  • Grup: Members
  • Posts: 439
  • Înscris: 01.03.2012
Poti prefera limbajul C daca:
- scrii software care vrei sa interactioneze usor cu alte limbaje.
- daca scrii cod embedded. In domeniul embedded C-ul e dominant. Nu C++
- din motive de portabilitate
- daca scrii module de kernel sau drivere

Tu trebuie sa intelegi faptul ca sunt destui programatori care au ales sa dezvolte o aplicatie anume in C in mod constient si determinat.
Si ca nu fac asta pentru ca sunt incompetenti, ca neaparat nu stiu C++ (ca altfel sigur il alegeau pe el), ca n-au vazut "lumina" sau ca sunt "hateri" fata de C++. Multi sunt programatori foarte buni in C++ si totusi aleg sa foloseasca C pentru anumite tipuri de proiecte.
Pur si simplu e o alegere. Un limbaj e doar o unealta. Iar noi pierdem mult prea multa vreme discutand filozofic despre unelte in loc sa discutam despre ceea ce facem cu ele.

PS: Am citit de mult cartea respectiva.

Edited by xyv123, 17 May 2014 - 14:26.


#17
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Fara "export C", o biblioteca C++ nu e dificil de folosit doar din alte limbaje, ci chiar si din C++ daca folosesti un alt compilator si nu ai acces la sursa bibliotecii s-o recompilezi.

Avand in vedere insa aria, eu as trata problemai mai mult din perspectiva didactica. Elevii raman cu impresia ca stiu C++ doar fiindca folosesc cout/cin in loc de printf/scanf sau new in loc de malloc. Daca tot le folosesc, macar sa invete si alte elemente care le-ar putea fi de folos (ex. std::string)

#18
xyv123

xyv123

    Member

  • Grup: Members
  • Posts: 439
  • Înscris: 01.03.2012
Decat sa le predea un simulacru de C++ mai bine le preda Python la un nivel suficient ca sa poata elevul implementa in el structurile de date si algoritmii de baza, studiati in liceu.
Python are si el subtilitatile si ciudateniile lui, dar nu trebuia predat decat la un nivel elementar, suficient pentru a putea scrie diverse programele la nivel de liceu.
C si C++ ar trebui sa fie studiate de cine e interesat, in facultatile de profil, IMHO.

Edited by xyv123, 17 May 2014 - 15:04.


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate