Carte c/c++ in 2021

C++ este agnostic din punctul de vedere al encodării, și mi se pare corect să fie așa.

Când ai nevoie pe bune de suport profi pentru Unicode cel mai probabil folosești deja un framework mare care implementează o clasă potrivită pentru manipularea string-urilor de acel tip.

Altfel, în multe limbaje unicode-aware (gen python) găsesc că e foarte enervant că trebuie să folosești mereu conversie de la unicode la utf8 (sau invers) când vrei să faci I/O (de scris/citit string-uri în/din fișier sau în/din sockets).

Hmm, la ce te referi aici, poți da un exemplu? UTF-8 e o metodă de a reprezenta toate code points din Unicode.

Păi reprezentarea internă este de regulă unicode “desfăşurat” pe 16 sau 32 de biţi, dar dacă vrei să scrii acel string într-un fişier bănuiesc că vrei să reprezinţi caracterele în ceva mai “economic”, gen utf8, right?

A, ok, înțeleg.

Cred că e o problema de terminologie aici. Excepțiile sunt un mecanism de flow control :man_shrugging: La fel că if/else, for, proceduri, generatori, async/await, corutine, etc. Sure, daca le folosești in situații ne-exceptionale o sa ai probleme și cod greu de urmărit.

Adevărat. La ce mă refeream erau patterns de genul:

for (...) {
    try {
        to_string(v[i]);
    } catch ... {
    }
}

Sau cum se recomandă prin python, anumite edge cases să fie tratate cu excepții (personal nu-mi place stilul ăsta, dar e și subiectiv).

1 Like

C si C++ sunt la poli opusi in ceea ce priveste simplitatea si stabilitatea acestora.

Iti inteleg logica cu privire la simplitate, dar cum ai dedus partea cu stabilitatea? Chiar ‘poli opusi’?

Sper ca realizezi ca RAII Resource acquisition is initialization - Wikipedia poate face un program C++ chiar mai stabil decat un program C?

ma refeream la stabilitatea (in timp a) limbajului, nu la cat de robust ruleaza programele, pentru ca autorul ceruse o carte printata care sa fie relevanta peste 5-10 ani :smiley:

Și ce anume nu e stabil la C++? Eu am o aplicație dezvoltată cu Qt3 în 2002 și din păcate o folosim și acum în firmă, că n-am timp s-o rescriu :slight_smile:

Oamenii care se ocupă cu evoluția limbajului sunt chiar enervant de conservatori, abia în ultimii ani am început să observăm îmbunătățiri majore, dar care și alea au grijă să nu rupă compatibilitatea.

1 Like

La C++ apar tot felul de imbunatatiri, dar limbajul e foarte stabil, in sensul compatibilitatii inapoi.

E o treaba cu C++ si cartile despre el. Majoritatea se invart in jurul sintaxei, diverselor feature-uri, dar aproape nici una nu te invata cum sa faci o aplicatie in el.

La capitolul acesta (si multe altele) C++ e un limbaj slab dupa standardele moderne.

Nu neaga nimeni puterea lui, dar pur si simplu toolingul din jurul sau e mai complex decat ar trebui. Eu te-as invita sa te uiti peste niste aplicatii OpenSource scrise in C++, codul meu preferat fiind cel de la GNU Octave

Este printre cele mai curate coduri de C++ pe care le-am vazut, fara prea multe dependinte externe. Dupa ce te-ai familiarizat putin cu structura sa, sunt o gramada de proiecte si aplicatii KDE open source pe care poti sa te uiti si care exemplifica majoritatea cum conectezi aplicatia la un sistem de operare (notificari, comunicare cu alte aplicatii si sisteme).

O sa vezi ca C++ este in fapt simplu si destul de concis, doar toolingul ce e pe deasupra lui e absolut mizerabil. Eu unul as sta departe de C++ in 2022 ca si primul limbaj de programare, deoarece sunt pur si simplu variante mult mai bune.

2 Likes

Singura “carte” C++ care intra si in cel mai mic detaliu e standardul insusi: The Standard : Standard C++

Varianta finala e pe bani, drafturile le gasesti gratuit. Nu e insa deloc o carte didactica si nu e ceva de care cineva se atinge in mod normal, decat daca are dubii cu privire la unele detalii sau chiar lucreaza la dezvoltarea unui toolchain C++.

La nivel de liceu, pe langa cele prezentate de un manual clasic as invata si ce containere & algoritmi ofera biblioteca standard a C++ (string, vector, map, sort, …) ambele bine prezentate de cppreference.com Treaba asta ajuta si cand da de alte limbaje pe viitor fiindca toate din ziua de azi vin cu biblioteci ce implementeaze diverse elemente uzuale => constientizeaza elevul ca nu trebuie sa reinventeze mereu siruri de caractere.

1 Like

Se poate găsi un draft generat aici (actualizat constant): Draft C++ Standard: Contents

1 Like

Din cate imi amintesc, cel putin la liceu la olimpiade nu ne lasau sa folosim prea multe din standard library. Deci ar fi chiar contra-productiv sa inveti ceva mai mult ca tie trebuie sa-ti mearga degetele sa faci structurile de date de fiecare data, adica sa nu cumva sa te obisnuiesti cu ceva mai usor.

La olimpiade se poate folosi orice din STL. La BAC sunt restricții de genul (și dacă îmi amintesc bine la BAC mai sunt și restricții precum “interzis folosirea break”).