Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Sfat achizitie sistem audio pentr...

tavan fals rigips

Ce preferați: produse mai scumpe ...

Demagnetizare (minimala) ori ba?
 Cum pot sa vad pe un proiector pr...

Joc Drone

Dropshipping

Sfat achizitie AC Gree Fairy vs P...
 MONITOR LG fara sonor !

Batalia pentru Bucuresti - ND, Fi...

Identificare font

problema ping in jocuri online
 Problema calculator

Samsung Galaxy A35

Sfat pentru aprinderea automata a...

Rfg crescut
 

Clasicul si modernul C++ - cine e interesat?

* * * * * 2 votes
  • This topic is locked This topic is locked
252 replies to this topic

Poll: Who's afraid of the big bad C++? (19 member(s) have cast votes)

Cunosti limbajul C++?

  1. Da, am invatat C++ acum x ani (e.g. in liceu/facultate) (12 votes [63.16%] - View)

    Percentage of vote: 63.16%

  2. Nu, si nici nu ma intereseaza (1 votes [5.26%] - View)

    Percentage of vote: 5.26%

  3. Nu (sau foarte putin), dar as fi dispus sa invat (2 votes [10.53%] - View)

    Percentage of vote: 10.53%

  4. Da, sunt familiarizat cu C++-ul modern (4 votes [21.05%] - View)

    Percentage of vote: 21.05%

Esti curios sa inveti C++? (mai mult decat stii in acest moment)

  1. Nu, nu ma intereseaza un limbaj invechit, in care trebuie sa aloc/dealoc singur memoria (3 votes [15.79%] - View)

    Percentage of vote: 15.79%

  2. Nu, prefer sa invat un alt limbaj, si anume... (2 votes [10.53%] - View)

    Percentage of vote: 10.53%

  3. C++-ul modern? Suna interesant, cum as putea sa aflu mai multe? (7 votes [36.84%] - View)

    Percentage of vote: 36.84%

  4. Incerc sa tin pasul cu evolutia rapida a C++-ului. (7 votes [36.84%] - View)

    Percentage of vote: 36.84%

Ce parere ai despre evolutia C++?

  1. C++ evolueaza? (7 votes [36.84%] - View)

    Percentage of vote: 36.84%

  2. C++ evolueaza intr-o directie gresita, in special... (1 votes [5.26%] - View)

    Percentage of vote: 5.26%

  3. Prefer un limbaj dezvoltat de la zero, cu tot impactul asupra codului existent (3 votes [15.79%] - View)

    Percentage of vote: 15.79%

  4. Cu fiecare standard, C++ devine un limbaj mai bun. Imi place in special... (8 votes [42.11%] - View)

    Percentage of vote: 42.11%

Vote

#19
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Din pacate (sau din fericire) nu exista nici un clasic si modern C++, exista doar C++. Si C++ nu-ti impune nimic, este si C cu clase si C cu cin si cout, este si C++ "modern". Programarea in C++ nu este mai usoara ca acum 20 de ani, dimpotriva. Nu ajunge sa te apuci acum de C++ si sa-l inveti "modern", pentru ca daca o sa lucrezi in lumea reala o sa lucrezi cu siguranta pe cod scris de altii, cum au avut chef sau cum era posibil.

Cind intr-un limbaj poti face acelasi lucru in 57 de feluri, deja se impute treaba. Chestia asta se intimpla si in Java...

Cit despre ora-om si ora-masina, daca limbajul este foarte complicat gasesti foarte greu oameni care sa-l exploateze la maximum. Asa ca daca te hotarasti sa folosesti limbajul ala probabil o sa trebuiasca sa te multumesti si unii mai mediocrii, care o n-o sa faca mare brinza cu ora-masina, deci o sa iti creasca ora-om si ora-masina o sa fie vai de mama ei :first:

Mai mult, cu cit se schimba mai des limbajul, cu atita e mai greu sa tii pasul. In afara de aia care traiesc pentru programare si care sint o minoritate, majoritatea programatorilor au o viata, care nu le permite sa urmareasca non stop ce mai schimba aia, mai ales daca-s niste schimbari care nu aduc nimic spectaculos, doar rezolva tot felul de probleme de nisa, care oricum se pot rezolva altfel, la fel de eficient.

Ca idee despre complexitatea C++, de exemplu constexpr de mai sus

https://en.cpprefere...guage/constexpr

Deci practic ca sa fii prolific in C++ cind folosesti constexpr, trebuie sa stii toate chestiile alea. Daca nu stii ce scrie acolo, atunci probabil o sa-ti crape la compilare sau n-o sa obtii tocmai ce crezi, caz in care te duci si citesti chestiile alea. Doar ca n-o sa le tii niciodata minte, decit pentru cazul tau specific. Cind o sa vrei sa faci altceva, din nou te ia dracu si te intorci la citit. Asta e doar una bucata keyword. :first:

Holy shit.

#20
NaeCicolae

NaeCicolae

    Junior Member

  • Grup: Junior Members
  • Posts: 30
  • Înscris: 19.03.2019
C++ vine din mediul academic, java sau alte limbaje vin din mediul de productie unde sa fac bani.

#21
TS030

TS030

    Guru Member

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

View PostNaeCicolae, on 13 aprilie 2019 - 06:23, said:

C++ vine din mediul academic, java sau alte limbaje vin din mediul de productie unde sa fac bani.
Va rog eu mult, cand nu stiti ceva intrebati - si vom incerca sa gasim un raspuns.
Pentru ca presupunerea de mai sus este complet, absolut, iremediabil gresita!

C++ a fost dezvoltat de Bjarne Stroustrup, in cadrul AT&T, pentru a rezolva problema foarte reala a inexistentei unui limbaj care sa combine mecanisme de abstractizare (precum cele din Simula) cu apropierea de hardware si performanta (oferite de C). Bjarne lucra la un simulator distribuit, dimensiunea proiectului cerea mecanisme de abstractizare insa Simula pur si simplu nu facea fata.
Mai productie de-atat nu se poate!

Chiar si in prezent, cine e implicat in dezvoltarea si evolutia limbajului? Academii? Nici gand; ci companii precum Microsoft, Google, Facebook, Qt etc. - industria software, care va sa zica. Dezvoltatorii software; si da, oricine poate propune noi imbunatatiri - asta daca il tin curelele.

Nu vei gasi un limbaj mai "din mediul de productie" decat C++!

#22
ovipic

ovipic

    Junior Member

  • Grup: Junior Members
  • Posts: 84
  • Înscris: 09.04.2019
Este, Golang 🤓

#23
dani.user

dani.user

    Guru Member

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

View PostMosotti, on 13 aprilie 2019 - 06:21, said:


constexpr e chiar banal ca rar te apuci sa calculezi at compile time lucruri mai complicate de niste operatii matematice simple. constexpr if iar e banal dar foarte util: ai o functie generica si vrei sa executi un if doar daca tipul T de exemplu e numar cu semn.

Teme complexe, "de speriat" ar fi mai degraba:

#24
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010

Quote

de ce C++ nu se foloseste in productie
In productie in Romania, sau cum?

Eu lucrez in momentul de fata pe doua proiecte foarte diferite, unul e pe IoT, celalalt e pentru ceva aparatura medicala. In ambele cazuri, 'productia' e C++.

In ambele cazuri, alegerea unui limbaj 'de productie' precum Java sau C# ar fi fost o greaseala fatala. Si intr-un caz s-a si intamplat, inainte de a ajunge eu sa lucrez pe proiect. Au incercat cu C#. Problema e ca trebuie prelucrate imagini de rezolutie inalta, sute de cadre pe secunda, in timp real. Nu-ti poti permite sa te loveasca garbage collectorul cand ti-e lumea mai draga si sa nu ai un control strict al memoriei folosite. Dupa ce au implementat ceva cat sa incerce sa vada ce iese, si-au dat seama ce prostie au facut si au trecut la C++. Din pacate pentru ei, n-am fost acolo de la inceput, ca le spuneam :) Am mai vazut istoria asta cu C# sau Java in loc de C++ de nenumarate ori.

Probabil ca e adevarat ca in Romania C++ nu e un limbaj 'de productie'. Catre noi (si indieni) se arunca munca de jos.

#25
TS030

TS030

    Guru Member

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

View PostNaeCicolae, on 13 aprilie 2019 - 06:54, said:

I)
De asemeni s-a dovedit ca in C++ chestia ca este portabil este o mancare de peste cam diferita si ca sa-l faci portabil codul de C++ trebuie modificat
de asemenea natura de zici este scris intr-o extensie a limbajului, adica se ajunge eventual la o portabilitate insa cu mult mult timp cheltuit, timp pe
care nici o firma nu este dispusa sa-l aloce.

Eu in facultate am folosit la C++ , biblioteca STL la un proiect si efectiv aveau probleme in a intelege codul doarece nu vedeau unde este mallocul si free
"Daca nu este mallocul si free-ul atunci nu este C++" asa se comportau, ba chiar mi s-a sugerat ca ar fi bine sa rescriu proiectul in  "limbajul classic C++"
Dar cel mai tare a fost cand am intrebat de ce C++ nu se foloseste in productie si joburile de C++ sunt rare, iar in locul C++ exista un limbaj cu un set de tehnologii foarte puternice
si peformante: i se spunea Java cu stiva Java EE, de care astia din lumea academica fugeau ca dreaku de tamaie.

Apoi tot eu am realizat ca de fapt Java te expune la piata concurentiala unde time is money iar astia cu C++  din lumea academica  sunt orientati pe time is time and money is money si ca money este indiferent time.

In piata concurentiala conceptele sunt taman invers.

II)
Traim in era lui  "nu este nevoie sa stiu ce este int sau double, stie containerul frameworkului ce este si face el auto-typecasting si inferenta tipurilor de date"
Mai putina convingere si mai multe intrebari! Inteleg ca esti fan Java, insa acest topic nu e ca sa aratam care-i cel mai bun limbaj ;)

Caci, iata, esti unul dintre cei ce nu stiu C++ - dar nu stiu nici ca nu stiu. Precum co-workerul meu cu "C++ nu are generics!".
Nimeni nu s-a nascut invatat; scopul meu este sa-ti arat ca nu cunosti limbajul, si eventual sa-ti trezesc curiozitatea in privinta acestuia.

1. Iarasi, este fix pe dos. Nu stiu ce "extensie a limbajului" ai vazut tu... asemenea lucruri nu sunt portabile.
C++ portabil inseamna C++ standard, evitand extensii ale compilatoarelor and stuff. Poti scrie o aplicatie consola complexa doar in C++ standard.
Apoi avem librarii si pachete de librarii precum Boost, care la randul lor folosesc C++ standard.
Apoi avem librarii si framework-uri disponibile pe mai multe platforme.

Ce ai fost invatat la facultate este complet gresit, iar indivizii care te-au sfatuit asa erau idioti. Idioti de doua ori daca ziceau malloc() si free(), care sunt functii C.
Crezi ca asemenea indivizi - care nu cunosc limbajul, ceva profesorasi sau asistenti la o facultate - ti-ar fi putut da sfaturi despre utilizarea C++ in industrie?
De ce nu-i intrebi pe cei din industrie? Suntem aici.

Simplificand nitel, pentru ca intotdeauna putem gasi cazuri speciale.
Nu folosesti malloc() in C++, pentru ca functia aceasta doar aloca memorie - nu apeleaza constructorii. Mai exista problema calculului manual al dimensiunii obiectului alocat (unde poti sa gresest), si conversia de tip care in C++ este necesara.
Nu folosesti insa nici new! Incepand cu C++11, managementul memoriei se face eficient si sigur prin RAII, utilizand smart pointeri - unique_ptr si shared_ptr. Avantajul enorm este ca nu te mai preocupa dealocarea, realizata automat cand smart pointerii ies din scop. Indiferent cum ies din scop - return, exceptie.
Iata un exemplu simplu:
auto a = std::make_unique<int>(42);

Voi discuta si despre auto. Codul de mai sus aloca dinamic un int, il initializeaza cu o valoare (42) si impacheteaza totul intr-un smart pointer - indiferent cum se iese din scopul respectiv, memoria va fi dealocata corespunzator, automat.
Atentie pentru fanii Java: in C++, de foarte multe ori variabilele pot/vor fi alocate pe stiva. De alfel e foarte usor sa recunosti un programator Java incercand sa scrie "C++": new pentru orice variabila, si nici macar un delete ;)

Apoi, abstractizarea - C++ a fost conceput pentru includerea unor mecanisme de abstractizare Simula-like intr-un limbaj performant precum C.
Si vine neica nimeni sa spuna ca nu, el nu vrea abstractizare, el vrea sa vada malloc() si free()?
In industrie, faptul ca (exemple banale) vector si string isi au grija de memorie reprezinta un avantaj extraordinar. Pai, in loc sa scrii totul de mana, sa calculezi dimensiuni de buffere, adrese si inevitabil sa gresesti, ai o librarie solida, testata si care pur si simplu functioneaza!

Spuneai de auto type-casting in Java care nu-i altceva decat un set de conversii implicite. Boooriiing!
Desigur, exista asa ceva si in C (da, C, de unde-au fost preluate in C++).

O sa-ti arat ceva mai bun: automatic type deduction in C++. De fapt, ti-am aratat... acel auto din codul de mai sus.
Desigur, se poate specifica tipul variabilei:
std::unique_ptr<int> a = std::make_unique<int>(42);

a fiind, desigur, un smart pointer.
Oameni destepti s-au gandit, compilatorul stie deja tipul variabilei a - este ceea ce returneaza make_unique<int>; de ce sa fortam programatorul sa il scrie?
Asa ca scriem 'auto' si de restul are grija compilatorul.

Exemplul de mai sus este unul banal, care doar te scuteste de-a scrie niste constructii sintactice destul de urate.
Insa 'auto' poate mult mai mult de-atat, punand bazele unui nou tip de programare generica.
auto size = [](const auto& m) { return m.size(); };

Codul de mai sus reprezinta o lambda generica. Ai lambda si in Java, introdus cand noi in C++ ne-am plictisit de ele si-am inceput sa ne gandim cum sa le folosim mai bine ;)
Nu trebuie sa scrii tipul variabilei size; va fi dedus de compilator.
Nu trebuie sa scrii tipul lui m; lambda va accepta orice m care are un membru size. Poate fi string, poate fi vector, poate fi YourTypeWithASizeMember.
Apelul? size(x).

Un exemplu frumos, cu dedicatie pentru fanii Python: structured bindings. Introdus in C++17, pentru ca, asa cum spuneam, limbajul evolueaza.
Una din chestiile interesante in Python este modul in care functiile pot returna mai multe valori.
Putem face asta si in C++? Desigur; acum insa este mai usor ca niciodata. Poti sa returnezi pointeri catre structuri, bla bla bla, daca ai ramas la C++98. Suntem in 2019, si C++17 deja e old news.
auto func()
{
int a{ 42 };
double b{ 42.0 };
return std::tie(a, b);
}

func() returneaza o pereche (pair) de int si double (de la trei in sus vorbim de tuplu). Tipul de return al functiei este auto dedus. Ah, si-n caz ca nu este clar, asta functioneaza bine-mersi cu tipuri definite de utilizator.
Partea frumoasa - pentru ca v-am promis - este despachetarea acestui pair (sau tuple), caci apelantul vrea sa acceseze a si b, pentru asta a apelat func(). Nu poate fi usor ca in Python, asa-i? Vorbim de C++ aici, musai sa fie o chestie urata si complicata. Iat-o:
auto [a, b] = func();

Variabilele a si b au tipurile corespunzatoare, deduse de compilator. Mai mult - si spre deosebire de Pyton - o greseala, sa zicem o variabila in plus/minus, va fi detectata la compilare.

Cei 3 care au votat "C++ evolueaza?" la ultima intrebare, ce ziceti, va revizuiti votul? ;)

#26
TS030

TS030

    Guru Member

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

View Postovipic, on 13 aprilie 2019 - 10:32, said:

Este, Golang 🤓
Golang nu este "mai de productie" decat C++. Ba as spune ca Golang a fost oarecum impus politic de catre Google - desi, iata, Google sustine si C++.
Nu exista "mai de productie" decat un limbaj realizat si dezvoltat pentru solutionarea unor probleme reale, de catre dezvoltatorii software.

View Postdani.user, on 13 aprilie 2019 - 10:37, said:

constexpr e chiar banal ca rar te apuci sa calculezi at compile time lucruri mai complicate de niste operatii matematice simple. constexpr if iar e banal dar foarte util: ai o functie generica si vrei sa executi un if doar daca tipul T de exemplu e numar cu semn.

Teme complexe, "de speriat" ar fi mai degraba:
Provocarea mea pentru Mosotti e sa-mi arate cum rezolva un alt limbaj aceeasi problema - compile time computation - mai simplu decat C++. Cu paginile de documentatie aferente.

constexpr if este iarasi o alternativa faina la o chestie care pana acum era urata rau (brrr... SFINAE).
Deocamdata ignor topicurile de speriat, pentru ca nu vreau sa sperii pe nimeni :) Va garantez, scrierea de librarii in C++ e partea complicata; ca utilizatori de librarii viata va e mai usoara ca niciodata. Na, ca fac si rime.

#27
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010

Quote

Pt procesare de imagini se alege un limbaj de productie care permite procesare pe clustere in mediu distribuit (java sau scala) se inchiriaza un cluster
cu 500 de nuclee si cati TB de RAM vrei tu
Te rog frumos sa lasi aberatiile de tipul asta. Care parte din 'in timp real' n-ai inteles-o? Pana ajung imaginile de la device la cluster, deja sunt prelucrate pe un banal PC. La un pret incomparabil mai mic. Habar nu ai despre ce e vorba, dar arunci cu TB si sute de procesoare, cand dispozitivul e portabil si utilizabil si unde n-ai acces la net. Sute de cadre pe secunda, rezolutie mare, transferate la cluster. Nu vreau ce fumezi tu pe acolo.

Edited by parabellum, 13 April 2019 - 13:03.


#28
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Depinde de imagine si de ce fel de procesare vorbim totusi.

#29
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Avantajul cel mai mare al lui C++ e si cel mai mare dezavantaj: e vechi, are multe chichite, are multe peticeli adaugate recent pentru a imbunatati situatia - dar nu are metode clare de eliminare a metodelor vechi, ceea ce inseamna ca trebuie sa te bazezi pe educatie, iar asta nu e usoara cu un limbaj asa vechi. Un incepator trebuie sa stie atat C++-ul modern, cat si pe cel vechi, ca sa stie de ce sa se fereasca si cum sa imbunatateasca un cod.

Compara asta cu alte limbaje unde planuri de depreciere a codului vechi sunt integrate direct in compilator/interpretor, care iti da pentru o perioada de cativa ani o avertizare, si apoi o eroare, cand detecteaza cod vechi.

Exista o duzina de metode de a face acelasi lucru, multe dintre ele la fel de optime - deci limbajul nu are concepte ortogonale.

View PostNaeCicolae, on 13 aprilie 2019 - 13:14, said:

Mai pe scurt in corporatii se vine cu cerinta si cu lista de tool-uri si IDE-uri care vor fi folosite si se trece la treaba, adica cercetarea prealabila( ce limbaj folosim, pe ce algortim mergem, ce infra hardware folosim  se face de catre alta echipa din afara tarii , iar apoi rezultatele se dau catre echipa de implementare din Romania.)
Da. Mai pe si mai scurt: sclavi. Romania e o tara de sclavi.

Dar noi nu vorbim aici despre Romania, ci despre limbaj.

#30
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
@NaeCicolae:
Depasesti orice limita, prin agresivitatea si limbajul folosit.
Avem preferinte diferite, lucram la proiecte diferite, dar ne respectam ca niste profesionisti, OK?

Realizezi ca unul din avantajele enumerate chiar de tine ale platformei JVM, si anume "write once run anywhere", este complet irelevanta in contextul acestei aplicatii de imagistica medicala? Parabellum poate sa confirme, dar din cate vad aplicatia va rula pe hardware specific, posibil si certificat.

O intrebare: pe cate platforme ruleaza efectiv aplicatia la care lucrezi? Cea la care lucrez eu, pe vreo 5, si asta nu bate nici un record. 95+% cod portabil, cu cateva module dependente de platforma.
Si toate modulele platform-specific ar fi eliminate, daca s-ar accepta rescrierea folosind un standard mai actual.

#31
dani.user

dani.user

    Guru Member

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

View PostOriginalCopy, on 13 aprilie 2019 - 13:23, said:

Compara asta cu alte limbaje unde planuri de depreciere a codului vechi sunt integrate direct in compilator/interpretor, care iti da pentru o perioada de cativa ani o avertizare, si apoi o eroare, cand detecteaza cod vechi.

Depreciere se intampla si in C++, insa nu la o scara prea mare. Primul exemplu ce-mi vine in minte e: https://en.cpprefere...memory/auto_ptr

Avertizarile oferite de compilatoare ajuta si ele; personal prefer chiar sa activez tratarea avertizarilor drept erori de compilare.

Cam ce elemente ale limbajului credeti ca ar trebui eliminate? Folosirea new/delete nu poate fi restrictionata (uneori nu ai de ales). Apelul malloc/free, iar nu ar putea fi interzis.

Edited by dani.user, 13 April 2019 - 13:49.


#32
TS030

TS030

    Guru Member

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

View PostOriginalCopy, on 13 aprilie 2019 - 13:23, said:

Avantajul cel mai mare al lui C++ e si cel mai mare dezavantaj: e vechi, are multe chichite, are multe peticeli adaugate recent pentru a imbunatati situatia - dar nu are metode clare de eliminare a metodelor vechi, ceea ce inseamna ca trebuie sa te bazezi pe educatie, iar asta nu e usoara cu un limbaj asa vechi. Un incepator trebuie sa stie atat C++-ul modern, cat si pe cel vechi, ca sa stie de ce sa se fereasca si cum sa imbunatateasca un cod.

Compara asta cu alte limbaje unde planuri de depreciere a codului vechi sunt integrate direct in compilator/interpretor, care iti da pentru o perioada de cativa ani o avertizare, si apoi o eroare, cand detecteaza cod vechi.

Exista o duzina de metode de a face acelasi lucru, multe dintre ele la fel de optime - deci limbajul nu are concepte ortogonale.
C++ a fost dezvoltat conform cerintelor din industria software, iar una dintre acestea a fost: "codul existent trebuie sa mearga in continuare!".
Rezultatul e un limbaj mai urat decat ar fi putut fi, un limbaj utilitar mai degraba decat urmarind o frumusete academica. Si totusi... spune-mi ca structured bindings nu e o solutie eleganta!

Foarte relevanta observatia ta despre educatie, de altfel si acest topic isi propune sa starneasca o curiozitate catre acest subiect, al educatiei.
Avem documentatie excelenta, trebuie doar popularizata - la gunoi cu Herbert Schildt, avem autori precum Bjarne Stroustrup, Sutter, Meyers, site-uri, bloguri...

Si avem analiza statica de cod. De unele chestii te avertizeaza compilatorul; mai nou, IDE-ul a inceput sa ma sfatuiasca sa pun noexcept daca functia nu arunca exceptii, sa nu aloc dinamic memoria daca nu e cazul, samd. Apoi mai exista pasi suplimentari de analiza, lintere, chestii.
Avem si C++ Core Guidelines:
https://github.com/i...pCoreGuidelines

In loc de versionare - care nu are sens in C++ - esti indrumat catre urmarea unor bune practici.

#33
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004

View PostTS030, on 13 aprilie 2019 - 11:50, said:

Provocarea mea pentru Mosotti e sa-mi arate cum rezolva un alt limbaj aceeasi problema - compile time computation - mai simplu decat C++. Cu paginile de documentatie aferente.
Raspunsul este foarte simplu: nu am nevoie de compile time computation. Never had, never will. Practic rezolva o problema pe care imensa majoritate a oamenilor n-au intilnit-o niciodata. Da-mi niste exemple din lumea reala, nu prostii de Fibonacci, in care inainte de a exista acest feature programul tau suferea groaznic la performanta pentru ca nu putea face calcule la compilare.


View Postdani.user, on 13 aprilie 2019 - 10:37, said:

constexpr e chiar banal ca rar te apuci sa calculezi at compile time lucruri mai complicate de niste operatii matematice simple. constexpr if iar e banal dar foarte util: ai o functie generica si vrei sa executi un if doar daca tipul T de exemplu e numar cu semn.
Teme complexe, "de speriat" ar fi mai degraba:
Argument-dependent lookup
Perfect forwarding
Memory model - asta-i intalnit in mai toate limbajele, eventual cu alte reguli.

Nu e nimic banal acolo, sint citeva zeci de rinduri cu zeci de reguli. Daca as lua la puricat pe unu care pretinde ca "stie" C++, doar din pagina aia, ar iesi un dezastru. E banal pentru ca te gindesti doar in contextul in care l-ai folosit tu.

C++ este un limbaj atit de complicat incit sint sigur ca nu-l cunoaste nimeni la modul sa-ti spuna orice fara sa se uite prin standarde. Apoi mai e si problema de implementare a acelor complicatii in diversele compilatoare, ceea ce duce la probleme de portabilitate.

Practic orice firma serioasa care foloseste C++ are propriile reguli prin care isi seteaza un subset de limbaj si la restu ii da cu flita (nu folosi aia, aia si aia, foloseste aia doar in caz ca, daca nu foaie verde trishpe). Ca exemplu iti citez la nimereala din regulile de la Google:

Quote

Exceptions
We do not use C++ exceptions.

noexcept
Specify noexcept when it is useful and correct.

Run-Time Type Information (RTTI)
Avoid using Run Time Type Information (RTTI).

Streams
Use streams where appropriate, and stick to "simple" usages.

Lambda expressions
Use lambda expressions where appropriate.


https://google.githu...e/cppguide.html

Practic multe dintre ele sint oarecum ambigue si sint sigur ca se distreaza de minune la code review...

#34
dani.user

dani.user

    Guru Member

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

View PostMosotti, on 13 aprilie 2019 - 13:59, said:

Nu e nimic banal acolo, sint citeva zeci de rinduri cu zeci de reguli.

In C++11 cand a aparut constexpr era foarte limitat. Nu puteai folosi if, asa ca aveai ?: peste tot. Ulterior s-au relaxat regulile putand folosi tot mai multe facilitati.

Nu te obliga nimeni sa le stii pe toate, da eroare compilatorul daca folosesti ceva interzis:

Attached File  Untitled.png   29.97K   17 downloads

Cel mai adesea l-am folosit pentru a calcula dimensiunea unor vectori statici, pe stiva.

#35
TS030

TS030

    Guru Member

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

View PostMosotti, on 13 aprilie 2019 - 13:59, said:

Raspunsul este foarte simplu: nu am nevoie de compile time computation. Never had, never will. Practic rezolva o problema pe care imensa majoritate a oamenilor n-au intilnit-o niciodata. Da-mi niste exemple din lumea reala, nu prostii de Fibonacci, in care inainte de a exista acest feature programul tau suferea groaznic la performanta pentru ca nu putea face calcule la compilare.
Deci daca n-ai tu nevoie, nimeni nu are? :rolleyes:

Fa diferenta dintre un exemplu didactic, si aplicabilitatea in mediul real. Ce am aratat eu e cat de simpla este aceasta facilitate a limbajului.
Un exemplu mai real ar fi static_assert. Aici nu mai e vorba de performanta, ci de corectitudinea programului.


View PostMosotti, on 13 aprilie 2019 - 13:59, said:

Nu e nimic banal acolo, sint citeva zeci de rinduri cu zeci de reguli. Daca as lua la puricat pe unu care pretinde ca "stie" C++, doar din pagina aia, ar iesi un dezastru. E banal pentru ca te gindesti doar in contextul in care l-ai folosit tu.
C++ este un limbaj atit de complicat incit sint sigur ca nu-l cunoaste nimeni la modul sa-ti spuna orice fara sa se uite prin standarde. Apoi mai e si problema de implementare a acelor complicatii in diversele compilatoare, ceea ce duce la probleme de portabilitate.
Nu trebuie sa te uiti prin standarde - sau, foarte rar trebuie sa te uiti prin standarde, ca sa clarifici niste edge case-uri, asta la nivelul de expert. Avem documentatie mult mai accesibila.
C++ este standard international, compilatoarele nu au mana libera sa-si implementeze propria versiune.

#36
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005
Inchis pentru curatenie.

Multumiri @NaeCicolae

DONE(ish)

Va rog din suflet sa treceti peste ce posturile sale (cand se intoarece).

Edited by MarianG, 13 April 2019 - 15:14.


Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

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