My-Gate • Blog » C++

C++11 is a new language

Dieser Beitrag ist auf Englisch verfasst, da es mir leichter fällt über das Thema zu schreiben.

c  11Now it’s again already some time since the new C++ standard got officially released then again many new features are not new at all. A few things got already introduced with the Technical Report 1 (TR1) from back in 2007 but it wasn’t directly built into the standard. In some way you could call the TR1 the alpha version of C++11. Then there is boost, the most popular non-standard library of which many ideas got copied and standardized.

But let us first back up a bit and look at a short timeline:

  • 1979 – Bjarne Stroustrup began working on C with Classes.
  • 1983 – The name of C with Classes got changed to C++ where the ++ represents the increment operator on C.
  • 1985 – The first commercial release happened and a few small iterations followed.
  • 1998 – The C++ standard committee published the first official ISO standard for C++.
  • 2003 – After five years of getting experienced with C++ the committee released a corrected version of the old standard.
  • 2005 – Getting closer to a completely new standard the committee pushed out the Technical Report 1 which wasn’t directly part of the standard but showed already features which happen to be in the standard now.
  • 2011 – Some might have already given up but the new standard then got finally release and that with a lot of new features.
  • 2012 – People working on compilers now, are trying to catch up with the new standard.

This timeline shows that C++ advances very slowly. For developer wanting portability and lot of different features it’s annoying but the same developer will then be glad, C++ doesn’t change quickly and guarantees stability and speed. Who would want to rewrite thousand lines of code just because the standard did change? Also how would you be able to catch up with all the changes?
The long time between the two C++ standards, which is 14 years for the ‚flawed‘ version and 7 years for the corrected one, let the committee and all the people around the world think about what C++ does and what’s missing and over the years, technology evolved too. Stuff like parallelization which wasn’t a big topic 14 years ago but look at it nowadays, it’s about the most important one, since we hit the wall where processors can’t get faster and we have to divide the work onto multiple processors and conquer our tasks.

So you get it – C++11 is great but what is so great about it?
There is a good maintained list over at Wikipedia, so I won’t go much into anything here, but let me just highlight from my naive perspective the most important change.
Whenever you talk about C++ with other developers who don’t use C++ they’ll often start joking about C++’s Access Violation and Memory Leaks and they are not that wrong. They are common errors with C++ but many of those could be prevented by disallowing certain things or by using garbage collectors. Then again when you look at the ‚philosophy‘ behind C or C++ you notice that they never were about restricting things. Specially not for a reason like: ‚The programmers nowadays are just so dumb and can only write messy code, so let’s restrict everything so one can only do what we think is best for them.‘ No C++ is about unlimited freedom and possibilities. But how can the obvious problems with false memory management and overused pointers be solved?
The new standard introduces with its Standard Template Library (STL) smart pointers. Whenever you allocate some memory on your own, you have to delete it at some point again, if you forget to do so or if a function throws an exception or returns before it reaches the delete statement, the memory won’t get freed. shared_ptr and unique_ptr got solve these problems. They automatically delete the object once the smart pointer object reaches its destructor hence gets destroyed. Additionally with the use of smart pointers over normal pointers you won’t run into the problem of a wild pointer, they either holds a valid object or are set to nullptr which is the new way of setting a pointer to NULL.
In future C++ code it will be very common to never see the keywords new and delete, instead there will be a lot of make_shared() or make_unique().

But this example is just one part and there is so much more. Coming from the knowledge of the old C++ basics to the new C++11 you can only agree to the words of Bjarne Stroustrup:

"C++ feels like a new language"

Everyone interested in C++ programming should start reading and learning more about C++11 just because it holds so much more than C++03. For that reason I can recommend you to browse through the videos of Channel 9. The two videos embedded below are a must for every C++ programmer, also who would want to miss a talk from Bjarne Stroustrup himself or even Herb Sutter? Although I have to warn you, those videos are not YouTube videos. They don’t go two minutes but mostly two hours. Enjoy and happy C++11 programming! 🙂

For the geeks: Unfortunately the ISO doesn’t let you download the standard for free but you’d have to pay a few hundred bucks. But there’s close to the official release draft which holds about everything. I can’t compare it but people on the internet say the differences as minor as only people who are trained to read such gazing stuff will understand them. Anyways here you go:

C++11 standard – draft n3242

Kommentar [1]
Geschrieben am 05.03.2012 von admin in Computer, Linux, News, Windows
 Tags: , , , , ,

Still alive?!

Wenn ich da das Datum vom letzten Eintrag betrachte, sind nun in zwischen etwas über fünf Monate vergangen. Das Ganze wohl aus mehreren Gründen. Zum einen war ich in den grünen Ferien (Militärdienst), zum anderen gab es nie wirklich einen Drang zu einem neuen Eintrag; weiter nutzte ich meine freie Zeit oft für andere Dinge, über welche es sich jedoch vielleicht aber gelohnt hätte etwas zu schreiben. Ich werden nun jedoch versuchen wieder etwas regelmässiger zu schreiben.

Kompletten Beitrag lesen

Travelling Salesman Problem

An der Schule belege ich das Wahlkursfach Informatik. Kürzlich wählte/bekam ich den Auftrag einen Vortrag über einen Algorithmus für das “Travelling Salesman Problem” oder auf Deutsch “Problem des Handlungsreisenden” vorzustellen. Doch ich konnte nicht einfach einen “normalen” Brute-Force Algorithmus wählen sondern musste das Problem mit Hilfe Dynamischer Programmierung lösen, was die Aufgabe um einiges erschwerte. Denn als bald ich mich dann hinter das Problem machte, musste ich feststellen, dass ich das Dynamische Programmieren immer noch nicht wirklich beherrschte und auch kein fertiger Algorithmus ausser in Pseudocode im Internet zu finden ist.

Kompletten Beitrag lesen

DirectX in 3D – Part I

DirectX 9 Nein der Blogeintrag hat nichts mit real 3D zu tun, sondern nur mit dem normalen 2D-3D. 🙂
Ich habe nun die letzten Tag etwas Zeit investiert und mir DirectX 3D mal etwas näher angeschaut. Eine gewisse Ahnung hatte ich ja schon durch meine Maturarbeit (1, 2, 3), jedoch eher in 2D und eigentlich nur mit Sprites. Nach dem ich nun mehr oder weniger per Zufall wieder auf die schon etwas älteren Webcasts von Microsoft über “Managed DirectX” gestossen bin, habe ich angefangen zu programmieren. Leider wurde ich dann mal schnell aufgehalten, da im Webcast C# und dotNET verwendet wird (war zwar logisch, da “Managed DirectX” dotNET ist).

Kompletten Beitrag lesen

Kommentare [3]
Geschrieben am 27.02.2010 von admin in Computer, Windows
 Tags: , , , , ,

Maturarbeit III

So lange ist es her seit dem letzten Eintrag! 🙂
simxMeine Maturarbeit hat auch sehr an Umfang zu genommen, zumindest was den Code betrifft!

Kompletten Beitrag lesen

Kommentar [1]
Geschrieben am 20.02.2010 von admin in Computer, Reallife, School, Windows
 Tags: , , , , , , ,

Maturarbeit I

So wie wohl die meistens Stammleser meines Blogs wissen, bin ich mit einem Kollegen an unserer Maturarbeit. Es geht darum ein paar physikalische Grundgesetzte am PC grafisch zu simulieren. Das ganze soll in C++ und DirectX geschrieben werden (ja OpenGL ist viel besser…) und hier hab ich ein paar kurze Videos von verschiedenen Versuchen:

Kompletten Beitrag lesen

Kommentar [1]
Geschrieben am 29.10.2009 von admin in Computer, Reallife, School, Windows
 Tags: , , , , , , , , , ,

PHP Tutorial

Bist du auf der Suche nach einem vernünftigen PHP Tutorial?

Auf dieser Seite wirst du sicherlich einen guten Einstieg finden: www.php-kurs.com!
Das Ganze kann auch heruntergeladen werden, jedoch nicht ganz gratis.

Wenn man von PHP redet, darf man natürlich das offizielle Manual nicht vergessen:
PHP.net (Englisch)
PHP.net (Deutsch/Schweiz)

Wer das lieber Offline verwenden möchte, kann es sich natürlich auch herunterladen.

Ich selbst kann jedem PHP sehr empfehlen, dass es eine einfach, jedoch sehr starke Sprache ist, ausserdem ist PHP stark verwandt mit C bzw. C++, was einen Umstieg recht einfach macht. Und dass C/C++ eine der meist verwandtesten, schnellsten und auf praktisch allen Plattformen verwendbare Sprache ist, muss ich wohl ja nicht erwähnen, oh hab ich aber gerade…

Kommentare [0]
Geschrieben am 29.10.2009 von admin in Computer, Web
 Tags: , , , , , , ,

Code::Blocks und DirectX

Für meine Maturarbeit setzte ich mich mit DirectX und C++ auseinander. Da ich Code::Blocks als IDE beim Programmieren von C++ bevorzuge, wollte ich auch meine DirectX Programme mit dieser IDE verwenden, was sich aber gar nicht als so einfach herausstellte.

Die IDE hat tollerweise ja direkt ein DirectX Wizard mitgeliefert bekommt, wollte ich dieses verwenden, welches sich dann schnell nach einer Fehlermeldung als nicht verwendbar herausstellte. Ich suchte wohl mehrere Stunden im Internet nach funktionierenden Lösungen. Probierte sogar Programme mit der Visual C++ 2008 Express Edition zum Laufen zu bringen, jedoch auch erfolglos.

Das Problem lag meistens am Linker, welcher immer irgendwelch “komischen” Fehlermeldungen zurückgab. Ein Linker Error tritt eigentlich meist dann ein, wenn mit Libraries gearbeitet wird, was im Falle von DirectX auch so ist, nur habe ich eigentlich alle DirectX Libraries, welche ich verwenden wollte eingebunden.

Nach sehr langem hin und her Probieren und Suchen, fand ich das Problem und zwar hatte ich die “gdi32” Library der Windows Plattform SDK nicht eingebunden, welche irgendwie auch noch verwendet wurde.

Da es sehr viele Code::Block Nutzer ähnliche Probleme gemeldet haben und ich nicht alleine an meiner Maturarbeit arbeite, habe ich eine kleine Übersicht erstellt, wie bei mir zumindest eines meiner Programme funktioniert hat.

Wie benutzt ich Code::Blocks und die DirectX
============================================

Was brauch ich alles?
———————
Code::Blocks
Microsoft DirectX SDK (August 2009)
Microsoft Visual C++ Toolkit 2003
Microsoft Windows Plattform SDK

Installation

Ich habe alles in die folgenden Verzeichnisse installiert und werde mich auch auf diese Beziehen:

Code::Blocks                                        -> C:ProgrammeCodeBlocks
Microsoft DirectX SDK                         -> C:ProgrammeMicrosoft DirectX SDK (August 2009)
Microsoft Visual C++ Toolkit 2003    -> C:ProgrammeMicrosoft Visual C++ Toolkit 2003
Microsoft Windows Plattform SDK    -> C:ProgrammeMicrosoft Plattform SDK

Nach der Installation sollte man sich ein wenig mit der IDE Code::Blocks vertraut machen und ausprobieren.

DirectX Wizard

Tollerweise hat Code::Blocks bereits ein Wizard für DirectX Projekte integriert, nur leider funktionierte das bei mir nicht und ich erhielt immer die Meldung: "The path seems valid, but there are no DirectX files…" o.ä.

DirectX und Code::Blocks

Nach dem das Wizard erfolgreich abgestürzt ist, müssen wir das Ganze halt anderst angehen.
Es gibt zwei Möglichkeiten, die erste ist wohl etwas die einfachere:

1.
– Erstelle ein Windows Projekt mit dem Wizard ("Win32 GUI project").
– Wähle dabei "Frame based" aus.
– Dann deine Destionantion, wo du dein Projekt abspeichern möchtest mit dem Projektnamen.
– Als Compiler musst du nun "Microsoft Visual C++ Toolkit 2003" auswählen, die anderen Felder kann man unberührt lassen.
– Als nächstest fragt er nach Installationsverzeichnis der SDK. (C:ProgrammeMicrosoft Platform SDK)
– Nun hat man ein neues Projekt, welches scho compiliert und ausgeführt werden kann.
– Jetzt muss man noch alle Libraries richtig angeben, damit der Compiler und Linker auch weiss wo was liegt.
– Dazu geht man auf Project->Build options…
– Dort wählt man nicht Debug oder Release sondern den Projektname, welcher übergeordnet ist.
– Dann wechselt man zum Tab "Search directories".
– Unter Compiler sollte jetzt stehn bzw. hinzugefügt werden (ohne -):
   – $(#psdk.include)
   – $(#dx.include)     jenachdem wird auch der Komplette Pfad benötigt
– Unter Linker kommen dann folgende Einträge:
   – $(#psdk.lib)
   – $(#dx.lib)     jenachdem wird auch der Komplette Pfad benötigt
– Dann wechselt man zum Tab "Linker settings" und fügt dort die Folgenden Libraries ein:
   – gdi32
   – user32
   – kernel32
   – d3d9.lib
   – d3dx9.lib
   – DxErr.lib
– Beachte, dass .lib entweder klein geschrieben oder ganz weggelassen wird!
– Zur Kontrolle sollte oben "Mircosoft Visual C++ Toolkit 2003" eingestellt sein.
– Fertig!
2.
– Erstelle ein leeres Projekt.
– Dann deine Destionantion, wo du dein Projekt abspeichern möchtest mit dem Projektnamen.
– Als Compiler musst du nun "Microsoft Visual C++ Toolkit 2003" auswählen, die anderen Felder kann man unberührt lassen.
– Nun hat man ein leeres Projekt.
– Füge eine neue leere Datei hinzu, und bennene sie "main.cpp" oder nach belieben.
– Jetzt muss man noch alle Libraries richtig angeben, damit der Compiler und Linker auch weiss wo was liegt.
– Dazu geht man auf Project->Build options…
– Dort wählt man nicht Debug oder Release sondern den Projektname, welcher übergeordnet ist.
– Dann wechselt man zum Tab "Search directories".
– Unter Compiler sollte jetzt stehn bzw. hinzugefügt werden (ohne -):
   – $(#psdk.include)
   – $(#dx.include)     jenachdem wird auch der Komplette Pfad benötigt
– Unter Linker kommen dann folgende Einträge:
   – $(#psdk.lib)
   – $(#dx.lib)     jenachdem wird auch der Komplette Pfad benötigt
– Dann wechselt man zum Tab "Linker settings" und fügt dort die Folgenden Libraries ein:
   – gdi32
   – user32
   – kernel32
   – d3d9.lib
   – d3dx9.lib
   – DxErr.lib
– Beachte, dass .lib entweder klein geschrieben oder ganz weggelassen wird!
– Zur Kontrolle sollte oben "Mircosoft Visual C++ Toolkit 2003" eingestellt sein.
– Fertig!

 

So ich wünsch euch nun viel Spass bei DirectX programmieren! =)