SlideShare a Scribd company logo
Pisząc kod natywny C/C++,
czyli nie taki diabeł straszny
Adam Sawicki – http://asawicki.info

14.12.2013
O autorze
• Politechnika Częstochowska
• Microsoft
• Play Publishing
• Metropolis Software
• Cyfrowy Polsat
• Intel
2
Agenda
• Kod natywny
– Definicja
– Znaczenie
– Zastosowania

• Programista C/C++ – rynek pracy
• Pisząc kod natywny
–
–
–
–

Zarządzanie pamięcią
Programowanie obiektowe?
Wady i zalety C++
Narzędzia

• Podsumowanie
3
Kod natywny

C
C++
Objective-C, ...

Java, C#
PHP, Python
JavaScript, ...

Coffee-Based Language – value productivity over performance
4
Języki programowania
TIOBE Programming Community Index for
November 2013
– C, C++, Objective-C wciąż wysoko

(www.tiobe.com)

5
Kod natywny nadal ważny
• Oprogramowanie jest coraz bardziej złożone
• Sprzęt jest coraz bardziej wydajny

6
Kod natywny nadal ważny
• Oprogramowanie jest coraz bardziej złożone
• Sprzęt jest coraz bardziej wydajny

Mimo tego kod natywny nadal ma znaczenie!
• Dlaczego?
7
Prawo Moore’a
Liczba tranzystorów podwaja się co ok. 2 lata
(wykładniczo)
= GHz?
= Wydajnośd?

8
Prawo Moore’a
• Częstotliwośd taktowania przestała wzrastad
wykładniczo
• Procesory są bardziej złożone, równoległe

Wydajnośd → inne podejście do programowania
9
Programowanie równoległe
•
•
•
•

Instrukcje wektorowe (SIMD)
Wiele rdzeni – programowanie wielowątkowe
Akceleracja, coprocessing (GPU, Xeon Phi)
Programowanie rozproszone

(NVIDIA)
10
The Free Lunch is Over

The free lunch is over.
Now welcome to the hardware jungle.
(Herb Sutter)

„C++ and Beyond 2011: Herb Sutter - Why C++?”

11
The Free Lunch is Over
Perf/W

Perf/T

Perf/C

Perf/$

12
Ekologia :)
My biggest contribution to the fight against global
warming is C++’s efficiency: Just think if Google had to
have twice as many server farms! Each uses as much
energy as a small town. And it’s not just a factor of two…
Efficiency is not just running fast or running bigger
programs, it’s also running using less resources.
(Bjarne Stroustrup)

13
Zastosowania
Zastosowania kodu natywnego
• Wydajnośd
– Szybkie przetwarzanie dużych ilości danych
– Pełna kontrola nad czasem wykonania

Systemy czasu rzeczywistego
Gry
Systemy operacyjne
Maszyny wirtualne
14
Zastosowania
Zastosowania kodu natywnego
• Wydajnośd
• Ograniczone zasoby
– Z góry określony sprzęt
– Wolny procesor, mało pamięci

Systemy wbudowane
Urządzenia mobilne
Konsole
15
Zastosowania
Zastosowania kodu natywnego
• Wydajnośd
• Ograniczone zasoby
• Niski poziom
Sterowniki

16
W czym napisano...
• Korzystamy z:
– Języków skryptowych (np. Python)
– Języków opisu (np. XML)
– Baz danych (np. MySQL)
– Serwerów (np. Apache), frameworków, ...

• W czym napisano ich obsługę?

17
W czym napisano...
• Biblioteki często są napisane w C lub C++
• API dla Java, Python itp. jest tylko wrapperem

18
Rynek pracy
Programista C/C++: Branża
* Systemy biznesowe
* Branża finansowa
* Przetwarzanie i analiza danych
* Systemy wbudowane
* Telekomunikacja, np. sieci komórkowe
* CAD/CAM
* Grafika komputerowa
* Techniki telewizyjne
* Gry
Wniosek: Zagadnienia niskopoziomowe
• Bliżej danych, sprzętu
• Dalej od interfejsu użytkownika, stron WWW
19
Rynek pracy
Programista C/C++: Wymagania

Oraz oczywiście:
- Wykształcenie
- Język angielski

- Umiejętności miękkie
- Relokacja, wyjazdy

20
Zarządzanie pamięcią
• Wskaźniki, brak garbage collectora
– Trzeba samemu alokowad i zwalniad pamięd
– Błędy ochrony pamięci, wycieki pamięci

21
Zarządzanie pamięcią
• Wskaźniki, brak garbage collectora
– Trzeba samemu alokowad i zwalniad pamięd
– Błędy ochrony pamięci, wycieki pamięci

• Błędy w praktyce wcale nie tak częste
– Dobre praktyki, np. inicjalizacja zmiennych
– Przemyślany czas życia i własnośd obiektów
– Inteligentne wskaźniki
auto client = std::make_shared<CClient>(name, address, phone);
22
Zarządzanie pamięcią
• Wskaźniki, brak garbage collectora
– Trzeba samemu alokowad i zwalniad pamięd
– Błędy ochrony pamięci, wycieki pamięci

• Błędy w praktyce wcale nie tak częste
– Dobre praktyki, np. inicjalizacja zmiennych
– Przemyślany czas życia i własnośd obiektów
– Inteligentne wskaźniki

• W językach zarządzanych też są podobne
błędy
23
Programowanie obiektowe?
• Klasy reprezentują pojęcia z dziedziny
problemu
• Program składa się z powiązanych
obiektów
• Obiekty mają stan (pola)
• Obiekty przesyłają komunikaty (wywołują
metody)
• Enkapsulacja, dziedziczenie, polimorfizm

??

Warstwy abstrakcji, gettery, settery, wzorce
projektowe, singleton, wrapper, manager, hel
per, listener, observer, locker, *er...
24
Programowanie obiektowe?
Komputer działa w architekturze Von Neumanna

Pamięć

Procesor

Przechowuje dane

We/Wy

Wykonuje kod

25
Programowanie obiektowe?
Dla uzyskania maksymalnej wydajności:
• Myśled o ułożeniu danych w pamięci
– Wykorzystywad cache

• Przechowywad dane w tablicach
– Nie w małych, rozrzuconych po pamięci obiektach

DOD – Data-Oriented Design
• Lepsza wydajnośd
• Prostszy kod
• Łatwiejsze zrównoleglenie
26
Wady i zalety C++
C++ jest:
+ Kompatybilny z C
+ Silna, statyczna kontrola typów
+ Dużo jest sprawdzane na etapie kompilacji
+ Potężny, elastyczny
- Rozbudowany, trudny
- Jednych możliwości języka warto używad, innych lepiej
unikad
- Nie wszyscy używają biblioteki standardowej –
popularne są własne implementacje
stringów, kontenerów itd.
27
Wady i zalety C++
Szablony (templates), metaprogramowanie
+ Wydajnośd
+ Bezpieczeostwo
- Nieczytelne komunikaty błędów
- Niektórzy lubują się w wyszukanych konstrukcjach
std::vector<int> v;

Zaadoptowane w innych
językach: C#, Java

28
Wady i zalety C++
Przeciążanie operatorów
+ Pozwala zaimplementowad udogodnienia do
własnych typów (np. stringi)
std::string s2 = "ERROR" + s1;
(C++)

- Jednak nie wszystkie (np. matematyka
wektorowa)
color.rgb = param.yzw + 1.0.xxx;
(HLSL)
29
Wady i zalety C++
Biblioteki
- Uboga biblioteka standardowa (w porównaniu
np. z Python)
• Dostarcza kontenery, stringi, ...
• Rozwija się (C++11/14/17)
• Dodatkowo: Boost

+ Mnóstwo dostępnych bibliotek zewnętrznych
• XML – TinyXML
• JSON – JsonCpp
• itd...
30
Narzędzia
C/C++ to nie tylko konsola tekstowa i Vim/Emacs.
Istnieją różnorodne, wygodne narzędzia.
• IDE
– Edytor, kolorowanie składni
– Podpowiadanie, refractoring
– Zintegrowany debugger

Np. Visual C++ Express / Visual Studio
+ Visual AssistX
31
Narzędzia
• Statyczna analiza kodu
– Cppcheck, CppDepend, PVS-Studio

• Wykrywanie wycieków pamięci
– Visual Leak Detector, Valgrind, Purify

• Profilowanie
– Very Sleepy, AMD CodeAnalyst, Intel VTune

• ...
32
Przenośny kod
• Kod w C/C++ jest przenośny, o ile:
– Piszemy zgodnie ze standardem
– Używamy przenośnych bibliotek

• Wystarczy go przekompilowad

33
Podsumowanie
• C++ nie jest idealny, ma wiele wad
– Warto przeczytad „C++ FQA Lite”

• ale w wielu zastosowaniach to najlepszy lub
jedyny wybór
– Dostatecznie wysoki poziom, by pisad skomplikowane
programy (np. obiektowośd)
– Dostatecznie niski poziom, by pisad wydajny kod
(np. ręczne zarządzanie pamięcią)
– Dostępne kompilatory i biblioteki na wiele platform
34
Podsumowanie
Programowanie natywne nie jest takie trudne
• Ma swoje problemy,
• ale w programowaniu systemów biznesowych czy
webowych są inne zagadnienia, których
programista C++ może nie znad

Język programowania dobieramy do zastosowania
35
Dziękuję

Pytania ???

36

More Related Content

Similar to Pisząc kod natywny C/C++, czyli nie taki diabeł straszny

C++ w programowaniu gier
C++ w programowaniu gierC++ w programowaniu gier
C++ w programowaniu gier
Adam Sawicki
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanie
Wydawnictwo Helion
 
Zawód: programista gier. Jak zacząć pracę w branży?
Zawód: programista gier. Jak zacząć pracę w branży?Zawód: programista gier. Jak zacząć pracę w branży?
Zawód: programista gier. Jak zacząć pracę w branży?
GameDesire Company
 
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
Fundacja Rozwoju Branży Internetowej Netcamp
 
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programisty
Wydawnictwo Helion
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
Wydawnictwo Helion
 
C#. Programowanie
C#. ProgramowanieC#. Programowanie
C#. Programowanie
Wydawnictwo Helion
 
Modelowanie i weryfikacja w programie MATLAB i Simulink
Modelowanie i weryfikacja w programie MATLAB i SimulinkModelowanie i weryfikacja w programie MATLAB i Simulink
Modelowanie i weryfikacja w programie MATLAB i Simulink
Jadwiga Horoszkiewicz
 
C# i .NET
C# i .NETC# i .NET
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniu
Wydawnictwo Helion
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędów
Michal Lukaszewski
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistów
intive
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
Język C++. Szkoła programowania. Wydanie V
Język C++. Szkoła programowania. Wydanie VJęzyk C++. Szkoła programowania. Wydanie V
Język C++. Szkoła programowania. Wydanie V
Wydawnictwo Helion
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
Tomasz Borowski
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012
Cezary Walenciuk
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2
intive
 
C++ Builder 6. Vademecum profesjonalisty
C++ Builder 6. Vademecum profesjonalistyC++ Builder 6. Vademecum profesjonalisty
C++ Builder 6. Vademecum profesjonalisty
Wydawnictwo Helion
 

Similar to Pisząc kod natywny C/C++, czyli nie taki diabeł straszny (20)

C++ w programowaniu gier
C++ w programowaniu gierC++ w programowaniu gier
C++ w programowaniu gier
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanie
 
Zawód: programista gier. Jak zacząć pracę w branży?
Zawód: programista gier. Jak zacząć pracę w branży?Zawód: programista gier. Jak zacząć pracę w branży?
Zawód: programista gier. Jak zacząć pracę w branży?
 
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
 
C++Builder. Kompendium programisty
C++Builder. Kompendium programistyC++Builder. Kompendium programisty
C++Builder. Kompendium programisty
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
 
C#. Programowanie
C#. ProgramowanieC#. Programowanie
C#. Programowanie
 
Modelowanie i weryfikacja w programie MATLAB i Simulink
Modelowanie i weryfikacja w programie MATLAB i SimulinkModelowanie i weryfikacja w programie MATLAB i Simulink
Modelowanie i weryfikacja w programie MATLAB i Simulink
 
C# i .NET
C# i .NETC# i .NET
C# i .NET
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniu
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędów
 
Nie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistówNie tylko C# - Ekosystem Microsoft dla programistów
Nie tylko C# - Ekosystem Microsoft dla programistów
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
Język C++. Szkoła programowania. Wydanie V
Język C++. Szkoła programowania. Wydanie VJęzyk C++. Szkoła programowania. Wydanie V
Język C++. Szkoła programowania. Wydanie V
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2
 
C++ Builder 6. Vademecum profesjonalisty
C++ Builder 6. Vademecum profesjonalistyC++ Builder 6. Vademecum profesjonalisty
C++ Builder 6. Vademecum profesjonalisty
 

Pisząc kod natywny C/C++, czyli nie taki diabeł straszny

  • 1. Pisząc kod natywny C/C++, czyli nie taki diabeł straszny Adam Sawicki – http://asawicki.info 14.12.2013
  • 2. O autorze • Politechnika Częstochowska • Microsoft • Play Publishing • Metropolis Software • Cyfrowy Polsat • Intel 2
  • 3. Agenda • Kod natywny – Definicja – Znaczenie – Zastosowania • Programista C/C++ – rynek pracy • Pisząc kod natywny – – – – Zarządzanie pamięcią Programowanie obiektowe? Wady i zalety C++ Narzędzia • Podsumowanie 3
  • 4. Kod natywny C C++ Objective-C, ... Java, C# PHP, Python JavaScript, ... Coffee-Based Language – value productivity over performance 4
  • 5. Języki programowania TIOBE Programming Community Index for November 2013 – C, C++, Objective-C wciąż wysoko (www.tiobe.com) 5
  • 6. Kod natywny nadal ważny • Oprogramowanie jest coraz bardziej złożone • Sprzęt jest coraz bardziej wydajny 6
  • 7. Kod natywny nadal ważny • Oprogramowanie jest coraz bardziej złożone • Sprzęt jest coraz bardziej wydajny Mimo tego kod natywny nadal ma znaczenie! • Dlaczego? 7
  • 8. Prawo Moore’a Liczba tranzystorów podwaja się co ok. 2 lata (wykładniczo) = GHz? = Wydajnośd? 8
  • 9. Prawo Moore’a • Częstotliwośd taktowania przestała wzrastad wykładniczo • Procesory są bardziej złożone, równoległe Wydajnośd → inne podejście do programowania 9
  • 10. Programowanie równoległe • • • • Instrukcje wektorowe (SIMD) Wiele rdzeni – programowanie wielowątkowe Akceleracja, coprocessing (GPU, Xeon Phi) Programowanie rozproszone (NVIDIA) 10
  • 11. The Free Lunch is Over The free lunch is over. Now welcome to the hardware jungle. (Herb Sutter) „C++ and Beyond 2011: Herb Sutter - Why C++?” 11
  • 12. The Free Lunch is Over Perf/W Perf/T Perf/C Perf/$ 12
  • 13. Ekologia :) My biggest contribution to the fight against global warming is C++’s efficiency: Just think if Google had to have twice as many server farms! Each uses as much energy as a small town. And it’s not just a factor of two… Efficiency is not just running fast or running bigger programs, it’s also running using less resources. (Bjarne Stroustrup) 13
  • 14. Zastosowania Zastosowania kodu natywnego • Wydajnośd – Szybkie przetwarzanie dużych ilości danych – Pełna kontrola nad czasem wykonania Systemy czasu rzeczywistego Gry Systemy operacyjne Maszyny wirtualne 14
  • 15. Zastosowania Zastosowania kodu natywnego • Wydajnośd • Ograniczone zasoby – Z góry określony sprzęt – Wolny procesor, mało pamięci Systemy wbudowane Urządzenia mobilne Konsole 15
  • 16. Zastosowania Zastosowania kodu natywnego • Wydajnośd • Ograniczone zasoby • Niski poziom Sterowniki 16
  • 17. W czym napisano... • Korzystamy z: – Języków skryptowych (np. Python) – Języków opisu (np. XML) – Baz danych (np. MySQL) – Serwerów (np. Apache), frameworków, ... • W czym napisano ich obsługę? 17
  • 18. W czym napisano... • Biblioteki często są napisane w C lub C++ • API dla Java, Python itp. jest tylko wrapperem 18
  • 19. Rynek pracy Programista C/C++: Branża * Systemy biznesowe * Branża finansowa * Przetwarzanie i analiza danych * Systemy wbudowane * Telekomunikacja, np. sieci komórkowe * CAD/CAM * Grafika komputerowa * Techniki telewizyjne * Gry Wniosek: Zagadnienia niskopoziomowe • Bliżej danych, sprzętu • Dalej od interfejsu użytkownika, stron WWW 19
  • 20. Rynek pracy Programista C/C++: Wymagania Oraz oczywiście: - Wykształcenie - Język angielski - Umiejętności miękkie - Relokacja, wyjazdy 20
  • 21. Zarządzanie pamięcią • Wskaźniki, brak garbage collectora – Trzeba samemu alokowad i zwalniad pamięd – Błędy ochrony pamięci, wycieki pamięci 21
  • 22. Zarządzanie pamięcią • Wskaźniki, brak garbage collectora – Trzeba samemu alokowad i zwalniad pamięd – Błędy ochrony pamięci, wycieki pamięci • Błędy w praktyce wcale nie tak częste – Dobre praktyki, np. inicjalizacja zmiennych – Przemyślany czas życia i własnośd obiektów – Inteligentne wskaźniki auto client = std::make_shared<CClient>(name, address, phone); 22
  • 23. Zarządzanie pamięcią • Wskaźniki, brak garbage collectora – Trzeba samemu alokowad i zwalniad pamięd – Błędy ochrony pamięci, wycieki pamięci • Błędy w praktyce wcale nie tak częste – Dobre praktyki, np. inicjalizacja zmiennych – Przemyślany czas życia i własnośd obiektów – Inteligentne wskaźniki • W językach zarządzanych też są podobne błędy 23
  • 24. Programowanie obiektowe? • Klasy reprezentują pojęcia z dziedziny problemu • Program składa się z powiązanych obiektów • Obiekty mają stan (pola) • Obiekty przesyłają komunikaty (wywołują metody) • Enkapsulacja, dziedziczenie, polimorfizm ?? Warstwy abstrakcji, gettery, settery, wzorce projektowe, singleton, wrapper, manager, hel per, listener, observer, locker, *er... 24
  • 25. Programowanie obiektowe? Komputer działa w architekturze Von Neumanna Pamięć Procesor Przechowuje dane We/Wy Wykonuje kod 25
  • 26. Programowanie obiektowe? Dla uzyskania maksymalnej wydajności: • Myśled o ułożeniu danych w pamięci – Wykorzystywad cache • Przechowywad dane w tablicach – Nie w małych, rozrzuconych po pamięci obiektach DOD – Data-Oriented Design • Lepsza wydajnośd • Prostszy kod • Łatwiejsze zrównoleglenie 26
  • 27. Wady i zalety C++ C++ jest: + Kompatybilny z C + Silna, statyczna kontrola typów + Dużo jest sprawdzane na etapie kompilacji + Potężny, elastyczny - Rozbudowany, trudny - Jednych możliwości języka warto używad, innych lepiej unikad - Nie wszyscy używają biblioteki standardowej – popularne są własne implementacje stringów, kontenerów itd. 27
  • 28. Wady i zalety C++ Szablony (templates), metaprogramowanie + Wydajnośd + Bezpieczeostwo - Nieczytelne komunikaty błędów - Niektórzy lubują się w wyszukanych konstrukcjach std::vector<int> v; Zaadoptowane w innych językach: C#, Java 28
  • 29. Wady i zalety C++ Przeciążanie operatorów + Pozwala zaimplementowad udogodnienia do własnych typów (np. stringi) std::string s2 = "ERROR" + s1; (C++) - Jednak nie wszystkie (np. matematyka wektorowa) color.rgb = param.yzw + 1.0.xxx; (HLSL) 29
  • 30. Wady i zalety C++ Biblioteki - Uboga biblioteka standardowa (w porównaniu np. z Python) • Dostarcza kontenery, stringi, ... • Rozwija się (C++11/14/17) • Dodatkowo: Boost + Mnóstwo dostępnych bibliotek zewnętrznych • XML – TinyXML • JSON – JsonCpp • itd... 30
  • 31. Narzędzia C/C++ to nie tylko konsola tekstowa i Vim/Emacs. Istnieją różnorodne, wygodne narzędzia. • IDE – Edytor, kolorowanie składni – Podpowiadanie, refractoring – Zintegrowany debugger Np. Visual C++ Express / Visual Studio + Visual AssistX 31
  • 32. Narzędzia • Statyczna analiza kodu – Cppcheck, CppDepend, PVS-Studio • Wykrywanie wycieków pamięci – Visual Leak Detector, Valgrind, Purify • Profilowanie – Very Sleepy, AMD CodeAnalyst, Intel VTune • ... 32
  • 33. Przenośny kod • Kod w C/C++ jest przenośny, o ile: – Piszemy zgodnie ze standardem – Używamy przenośnych bibliotek • Wystarczy go przekompilowad 33
  • 34. Podsumowanie • C++ nie jest idealny, ma wiele wad – Warto przeczytad „C++ FQA Lite” • ale w wielu zastosowaniach to najlepszy lub jedyny wybór – Dostatecznie wysoki poziom, by pisad skomplikowane programy (np. obiektowośd) – Dostatecznie niski poziom, by pisad wydajny kod (np. ręczne zarządzanie pamięcią) – Dostępne kompilatory i biblioteki na wiele platform 34
  • 35. Podsumowanie Programowanie natywne nie jest takie trudne • Ma swoje problemy, • ale w programowaniu systemów biznesowych czy webowych są inne zagadnienia, których programista C++ może nie znad Język programowania dobieramy do zastosowania 35