Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
Clasicul si modernul C++ - cine e interesat?
#217
Posted 23 April 2019 - 18:38
Nu inteleg conceptul de classic C++ si Modern C++. Sunt doua limbaje de programare diferite sau cum ? Nu este acelasi C++ ?
|
#219
Posted 23 April 2019 - 19:08
Iulius-Foyas, on 23 aprilie 2019 - 18:38, said:
Nu inteleg conceptul de classic C++ si Modern C++. Sunt doua limbaje de programare diferite sau cum ? Nu este acelasi C++ ?
Edited by MarianG, 23 April 2019 - 19:40.
|
#220
Posted 23 April 2019 - 19:35
Iulius-Foyas, on 23 aprilie 2019 - 18:38, said:
Nu inteleg conceptul de classic C++ si Modern C++. Sunt doua limbaje de programare diferite sau cum ? Nu este acelasi C++ ? Exact acesta e motivul pentru care am deschis acest topic. Prin C++-ul modern intelegem C++ asa cum e definit de standardele ISO C++11 si mai noi. Concluzia unanima este ca "it feels like a new language". Herb Sutter prezinta mai bine acest subiect: [ https://www.youtube-nocookie.com/embed/dJ-LfcVR61E?feature=oembed - Pentru incarcare in pagina (embed) Click aici ] Dar o sa ofer si o perspectiva personala. O sa dau cateva exemple, aspecte care nu mi-au placut la C++-ul clasic (primul meu contact cu C++ a fost inainte de standardizare) dar datorita carora mi-am reintors atentia la C++: - managementul memoriei - gratie move semantics, avem un set de smart pointeri care chiar fac ce trebuie. Nu pot sa subliniez destul cat de important e acest lucru. Intr-un proiect mai vechi s-a ajuns la scrierea propriei versiuni de smart pointeri, cu reference counting, tot tacamul. Bleah. - type deduction / auto. Ca sa nu fim gelosi pe Python. Si pentru a face programarea generica mai accesibila. - lambda si suportul pentru programare functionala, in general. Chiar si la nivel de baza, e mult mai elegant decat callback functions. Stim intrebarile de interviu cu pointeri la functii... OK, trebuie sa le stii daca tot ai trecut C++ in CV - dar vrei sa le folosesti? Exista o diferenta fundamentala - cum spunea Marian, un mod de gandire diferit - intre a implementa cum vrei sa se intample un lucru si ce vrei sa se intample. Sa zicem, intre a itera elementele unui container in scopul unei prelucrari oarecare, si a aplica un algoritm pe respectivul container. Edited by TS030, 23 April 2019 - 19:37. |
#221
Posted 23 April 2019 - 19:57
Face fix acelasi lucru pe care-l facea si inainte, cu o sintaxa mult mai urita. Modern C++
In plus trebuie sa scrii de te timpesti. In loc de vector<node*> children scrii vector<unique_ptr<node>> children Si asta nu-i tot, daca vrei sa fii pur ca un ingeras, nu folosesti using, ca cica n-ar fi bine si atunci devine: std::vector<std::unique_ptr<node>> children |
#222
Posted 23 April 2019 - 20:39
Quote
Face fix acelasi lucru pe care-l facea si inainte, cu o sintaxa mult mai urita. thread1 = std::thread([this] { std::sort(negative_spectrum.begin(), negative_spectrum.end(), [](auto val1, auto val2) -> bool { return val1.first < val2.first; }); }); thread2 = std::thread([this] { std::sort(positive_spectrum.begin(), positive_spectrum.end(), [](auto val1, auto val2) -> bool { return val1.first > val2.first; }); }); thread1.join(); thread2.join();Vezi ce-ti iese. Spectrul ala contine 'std::pair'. Cod autoplagiat de aici: https://github.com/a...ralOperator.cpp Plus ca neglijezi codul pe care trebuie sa-l scrii 'de tampesti', daca folosesti 'vector<node*>'. Nu scapi asa de simplu. Edited by parabellum, 23 April 2019 - 20:40. |
#223
Posted 23 April 2019 - 21:29
Mosotti, on 23 aprilie 2019 - 19:57, said: Face fix acelasi lucru pe care-l facea si inainte Mosotti, on 23 aprilie 2019 - 19:57, said: vector<node*> children Mosotti, on 23 aprilie 2019 - 19:57, said: vector<unique_ptr<node>> children Prima varianta este un memory leak waiting to happen, sau mai rau - in functie de ce se mai intampla cu pointerii aia. In cel mai simplu caz, in vector tii owning pointers, si trebuie la un moment dat sa apelezi o functie de cleanup. Si te trezesti ca nu stiu ce arunca o exceptie si nu ajungi in functia de cleanup. Varianta moderna pur si simplu functioneaza. Vectorul este singurul owner al obiectelor respective, totul se curata frumos cand iese din scop - indiferent de cum iese din scop. Asta-i o chestie de baza. Iar asta: Mosotti, on 23 aprilie 2019 - 19:57, said: Si asta nu-i tot, daca vrei sa fii pur ca un ingeras, nu folosesti using, ca cica n-ar fi bine Sigur ca folosesti using. Nu pui "using namespace std;" in headere, dar e foarte OK sa scrii ceva de genul: using std::string, std::vector, std::unordered_map;si chiar expune namespace-uri intregi, intr-un scop, chiar intr-o unitate de translatie. Edited by TS030, 23 April 2019 - 21:33. |
#224
Posted 24 April 2019 - 04:45
TS030, on 23 aprilie 2019 - 21:29, said:
Pe ce lume face acelasi lucru ca si ? Prima varianta este un memory leak waiting to happen, sau mai rau - in functie de ce se mai intampla cu pointerii aia. In cel mai simplu caz, in vector tii owning pointers, si trebuie la un moment dat sa apelezi o functie de cleanup. Si te trezesti ca nu stiu ce arunca o exceptie si nu ajungi in functia de cleanup. Varianta moderna pur si simplu functioneaza. Vectorul este singurul owner al obiectelor respective, totul se curata frumos cand iese din scop - indiferent de cum iese din scop. Asta-i o chestie de baza. Nu zic ca nu e bine ca s-a introdus asa ceva (desi programatorii C++ obisnuiau sa faca misto de limbajele cu memory management, ca ce ba ca ce destepti sintem noi ), zic doar ca forma in care s-a introdus e complet borita TS030, on 23 aprilie 2019 - 21:29, said:
Iar asta: e o absurditate. Sigur ca folosesti using. Nu pui "using namespace std;" in headere, dar e foarte OK sa scrii ceva de genul: using std::string, std::vector, std::unordered_map;si chiar expune namespace-uri intregi, intr-un scop, chiar intr-o unitate de translatie. parabellum, on 23 aprilie 2019 - 20:39, said:
Asa ti se pare tie. Ia incearca asta intr-o versiune veche de C++: |
#225
Posted 24 April 2019 - 09:28
Quote
Io mi-as face mai multe griji daca cumva chiar vrei sa folosesti threaduri acolo sau doar folosesti de dragul de a folosi chestii jgmechere. A, pentru ca tu nu poti s-o faci cu o sintaxa mai frumoasa in c++ mai vechi? Quote
Absurditate? Uita-te in codul lui dani.user de pe github. Uita-te in exemplul lui parabellum de mai sus. Probabil ca sint absurzi Edited by parabellum, 24 April 2019 - 09:33. |
#226
Posted 24 April 2019 - 10:10
Dar in general in ro, dpdv al joburilor pe c++, ce se face?
|
|
#227
Posted 24 April 2019 - 10:46
In Romania, prea putin. In Romania si in India se arunca munca de jos, in special.
|
#228
Posted 24 April 2019 - 12:16
TS030, on 23 aprilie 2019 - 19:35, said:
Exista o diferenta fundamentala - cum spunea Marian, un mod de gandire diferit - intre a implementa cum vrei sa se intample un lucru si ce vrei sa se intample. Sa zicem, intre a itera elementele unui container in scopul unei prelucrari oarecare, si a aplica un algoritm pe respectivul container. |
#229
Posted 24 April 2019 - 13:39
Sunt destui care stiu doar C++-ul clasic, si nici pe acela foarte bine... dar, daca stii C++-ul modern, eu zic ca-i cam greu sa nu-l intelegi pe cel clasic
Vezi prezentarea lui Herb Sutter. |
#230
Posted 24 April 2019 - 13:45
pai de ce nu de Bjarne insusi ?
[ https://www.youtube-nocookie.com/embed/fX2W3nNjJIo?feature=oembed - Pentru incarcare in pagina (embed) Click aici ] |
#231
Posted 24 April 2019 - 15:04
Chiar, de ce nu?
M-am gandit la "Not your father's C++" pentru ca prezinta ce aduce nou C++11 - prezentarea lui Bjarne acopera o arie mai larga, din cate tin minte arata mai putin cod dar este highly recommended++; si se potriveste perfect temei acestui topic. Apropo, mi-am adus aminte de o chestie - am cautat si-am gasit-o in Programming: Principles and Practice using C++ - zisa de Bjarne Stroustrup: Unless your name is Stroustrup, what I discuss here is not “your father’s C++.” |
|
#232
Posted 24 April 2019 - 19:03
IonutYo, on 24 aprilie 2019 - 10:10, said:
Dar in general in ro, dpdv al joburilor pe c++, ce se face? parabellum, on 24 aprilie 2019 - 10:46, said:
In Romania, prea putin. In Romania si in India se arunca munca de jos, in special.
Edited by MarianG, 24 April 2019 - 19:13.
|
#233
Posted 24 April 2019 - 22:05
In sapat santuri, spalat WCuri, aia mai buni spala farfurii... lasa ca te prinzi tu
|
#234
Posted 25 April 2019 - 06:50
parabellum, on 24 aprilie 2019 - 09:28, said:
Vezi ca o dai cotita. Da, vreau sa folosesc threaduri acolo. De ce sa nu sortez in paralel? Chiar si un procesor mai amarat, suficient de recent, are macar doua core-uri. https://en.wikipedia.../KISS_principle Deci care este scopul folositii thread-urilor asa cum le-ai folosit acolo? Sint cele doua spectrumuri suficient de mari incit sa conteze macar dpdv al performantei, in sensul de "vizibil"? Ai avut initial sortarea fara thread-uri si ai ajuns la concluzia ca ar fi nevoie de threaduri? Daca sint suficient de mari si oricum astepti dupa ele nu oricum ti se blocheaza UI-ul / threadul din care le apelezi, caz in care lucrurile se complica si trebuie sa faci un mecanism de callback ca sa urmaresti progresul, deci oricum nu mai poti face intr-o linie? |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users