Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Apr 17, 2024 00:55

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 60 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4
Autor Nachricht
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Fr Mai 22, 2015 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
OpenglerF hat geschrieben:
EDIT:
Noch zwei Anmerkungen:
Für statische Polymorphi benötigt man gar keine Typinformationen zur Laufzeit, die Calls werden zur Compilezeit aufgelöst. In C++ gibt es auch bei dynamischer Polymorphie sonst sehr wenig Typinfo. Wenn man nur RTTI als Typinformation versteht, kann man sogar sagen, dass gänige Polymorphie in C++ ohne Typinformationen zur Laufzeit auskommt.

Bei der Typisierung gibt es auch noch eine weitere Möglichkeit, das "auto", wie es in C++ heißt. (In C# heißt es "var")
Das behält 100%ige Typsicherheit zur Compilezeit und keinen Overhead. Der Typ einer solchen Variable wird einfach beim Kompilieren ermittelt, abhänig davon welchen Typ die Expression hat, die ihm anfangs zugewiesen wird.


Jup, und das verhindert auch sehr gut die angesprochenen Runtime-Fehler. Aber eigentlich ist es egal ob du die Typinformationen zur Laufzeit mitschleppst oder
zur Compilezeit schon aufloest. Wichtig ist halt nur das es diese Informationen braucht... und wie man damit umgeht. Nimm dagegen aber einfach mal den Ansatz
von Haskell und co. Dort kannst du wegen den ganzen Kategorie-gedoens auch "unendliche" Sachen machen die dir in C++ nach 2 Sekunden einen Stackoverflow verpassen :)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Mai 25, 2015 15:05 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Nimm dagegen aber einfach mal den Ansatz von Haskell und co. Dort kannst du wegen den ganzen Kategorie-gedoens auch "unendliche" Sachen machen die dir in C++ nach 2 Sekunden einen Stackoverflow verpassen :)
Ich glaube, hier verwechselst du was. Unendliche Datenstrukturen gehen in Haskell wegen Bedarfsauswertung (lazy evaluation). Mit anderen Worten, die Datenstruktur wird erst erzeugt, während sie ausgewertet wird (und auch nur so weit, wie sie ausgewertet wird).
Hat mit dem Typsystem aber nichts zu tun.

Zitat:
Bei der Typisierung gibt es auch noch eine weitere Möglichkeit, das "auto", wie es in C++ heißt.
Also ich beschäftige mich mit c++ noch nicht lange, aber soweit ich weiß heißt auto, dass der nötige Speicher automatisch allokiert und freigegeben wird (und ist der default für lokale variablen), und hat nicht direkt was mit Typen zu tun (außer dass der Typ weiß, wie viel Speicher benötigt wird).

Zitat:
Funktionale Sprachen wie Haskell verfolgen aber einen anderen Ansatz. Hier gibt es keinen Status der so etwas das den Typen festhalten koennte.
Stimmt soweit ich weiß für Haskell, aber Scala (auch eine funktionale Sprache), schleppt meines Wissens immer den Typen zur Laufzeit mit.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Mai 25, 2015 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
sharkman hat geschrieben:
soweit ich weiß heißt auto, dass der nötige Speicher automatisch allokiert und freigegeben wird (und ist der default für lokale variablen), und hat nicht direkt was mit Typen zu tun

Das wurde mit C++11 geändert. OpenglerF meinte sowas:
Code:
  1. int function() {
  2.   return 1;
  3. }
  4. auto variable = function();
variable bekommt so den Typ int, weil dies der Rückgabetyp von function() ist. Das ist ganz praktisch, wenn man mit langen Typnamen zu tun hat (wie z.B. std::chrono::high_resolution_clock::time_point).

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Mai 25, 2015 18:18 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ja, genau.
Im Prinzip braucht man so theoretisch fast keine Typen mehr angeben.
In C++14 kann man sogar den Rückgabetypen von definierten Funktionen "auto"matisch bestimmen lassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Mai 26, 2015 11:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
sharkman hat geschrieben:
Ich glaube, hier verwechselst du was. Unendliche Datenstrukturen gehen in Haskell wegen Bedarfsauswertung (lazy evaluation). Mit anderen Worten, die Datenstruktur wird erst erzeugt, während sie ausgewertet wird (und auch nur so weit, wie sie ausgewertet wird).
Hat mit dem Typsystem aber nichts zu tun.


Nicht ganz, Lazy-Evaluation kannst du auch sehr leicht in anderen Sprachen bauen. Der wesentliche Unterschied ist aber das
eine einfache Liste (1,2,3,4) genau das gleiche ist wie eine Liste (1,2,..) naehmlich eine Liste. Richtig deutlich wird
das aber erst wenn du so etwas wie (xs n = n : xs (n +1)) hast und das immer noch im Prinzip das gleiche wie die Listen
ist. In C++ musst du fuer solche Konstrukte immer wieder komplizierte Wrapper-Klassen, hier Iterator, bauen und neue Objekte
bauen die deine bestehenden Objekte Wrappen.. Dazu kommen noch solche Internen Geschichten wie z.B. Thunks und co. (also das was
du ansprichst) die verhindern das alles explodiert. Alles in allen verhindert man so ca. 30000000 “new” pro Zeile :)

sharkman hat geschrieben:
Stimmt soweit ich weiß für Haskell, aber Scala (auch eine funktionale Sprache), schleppt meines Wissens immer den Typen zur Laufzeit mit.


Ja, Erik Meijer (einer der Schoepfer von Haskell), hat es einmal auf den Punkt gebracht. In kurz:
Python, Scala und co. sind zwar nicht richtig, dafuer aber nicht so Realitaetsfremd wie Haskell :)

sharkman hat geschrieben:
Also ich beschäftige mich mit c++ noch nicht lange, aber soweit ich weiß heißt auto, dass der nötige Speicher automatisch allokiert und freigegeben wird (und ist der default für lokale variablen), und hat nicht direkt was mit Typen zu tun (außer dass der Typ weiß, wie viel Speicher benötigt wird).


Ja da sind die C++ler ein wenig eigen. Die Missbrauchen sogar “static” als Abkkuerzung fuer “extern” :P

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mi Mai 27, 2015 09:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
auto wurde hauptsächlich wegen der langen Namen bei Traits und Templates eingeführt.
Ich benutzte auto schon etwas länger und bind sehr glücklich damit.
auto hat auch nix mit dem Speichermanagment zu tun, sondern mit der Type Thematik.
Der Compiler muss bei auto den typ erkennen, der bei der Initialisierung der Variable zugewiesen wird und behält diesen bei.
Dabei werden literals und Funktionen/Methoden angeschaut und der Rückgabewert übernommen.

Es ist ganz schön hart sich hier rückwärts durch zu lesen ^^
Zum Thema Generics war ich verwirrt, weil Generics in C# die vereinfachte Variante von Templates sind aber ich glaube hier wird von Variants gesprochen, sonnst ergibt es einfach kein Sinn für mich.
C hat, wie gesagt eine schwache Typensicherheit und erlaubt das konvertieren von typen die nicht wirklich was gemein haben einfach zu, trotz verlust und Fehler.
C++ vor 11 war auch das gleiche aber mit 11 hat man da angefangen auch starke Typensicherheit zu ermöglichen.
Ein Beispiel ist enum class Variable:uint32{...};.
class sagt, dass Variable ein typ ist und nur die werte im Enum annehmen kann und ab dort kann man die Werte nicht mehr als Indices oder Zahlen als Werte verwenden, man muss nun alles per static_cast explizit machen. Das man nun auch die Größe mit :uint32 festlegen kann, ist ledeglich für die klarheit. Wie groß das enum abgespeichert wird. Default wird ein int verwendet, welches je nach Platform zwischen 8Bit und aufwärts sein darf, weil C es so definiert hat. Will ich aber für kompakte Strukturen ein uint8, dann prüft der Kompiler die Anzahl der Werte und ist es nicht abbildbar, dann wirft er ein Fehler.

Bei Klassen war es auch tricky, weil der Compiler über 1 indirekten Call arbeiten darf, wenn es möglich ist.
Der Copy-Constructor und Assign Operator sind dort richtig große Probleme gewesen aber nun darf man den delete modifier verwenden und kann somit dem Compiler sehr übersichtlich sogar 2-3 Pattern und klare verhaltensregeln bei bringen.
Code:
  1. struct OpenCLContext {
  2.     OpenCLContext(const OpenCLContext& CopyConstructor) = delete;// Not copyable Pattern: darf nicht generiert oder verwendet werden, also direkte oder indirekte kopien werden scheitern
  3.     OpenCLContext& operator = (const OpenCLContext& Other) = delete;// gleiches wie beim copy constructor
  4.     OpenCLContext() = delete; // No instance Pattern: darf nicht generiert oder verwendet werden, also hilft keine vererbung um das auf zuheben


Es gibt auch bestimmt noch weiteren syntax sugar der mir gerade nicht einfällt und man sollte noch dran denken, dass zwar C/C++ nicht stark typensicher sind aber z.B. GCC und VC++ es trotzdem erlauben. Compiler Flags /WX /Wall okey muss nicht gerade Wall sein, bei VC++ gibt W1 schon nicht explizite typecasts als Fehler zurück und pedantic hilft bei gcc.
Das hat aber auch seine Nachteile, explizite casts sind sehr schreibaufwändig.
Code:
  1. wchar* bla = L"asdf";
  2. WriteFile(const_cast<const wchar*>(reinterpret_cast<wchar*>(bla)));// sonnst schluckt VC++ und GCC es nicht mit obigen flags
  3.  
  4. enum class Bla{ One, Two, Three};
  5. int blupp[]={1,2,3};
  6. blupp[static_cast<int>(Bla::One)];


Bzgl der Operator Thematik hat sich mit C++11 und aufwärts auch was getan, User-Literals.
Man darf eigene Literal definieren und kann diese dann für z.B. Zeit, Lineare Algebra und ähnliches verwenden.
Vor einigen Monaten hab ich gelernt, dass man SIMD nicht sinnvoll in Klassen packen kann.
Viele haben bestimmt schon die eine oder andere Sache mit SIMD abgebildet aber das Problem ist, dass SIMD eine CPU extension ist und entsprechend Bytecode benötigt und viele dann die einzelnen Operationen wie Multiplikation, Division und so weiter per intrinsic's oder asm abbilden.
Das Problem ist, dass dies overhead produziert und SIMD wirklich effizient wird, wenn man große komplexe Funktionen darauf optimiert.
SIMD Klassen stehen diesen aber entgegen und der Performance gewinn ist maginal.
Sollte man z.B. eine Kamera Klasse auf SIMD implementieren ist es wesentlich effizienter.
Dies führt dazu, dass ich nicht mehr weiter Energie in meine SIMD Klassen stecke und eher auf Code generierung setzt.
Intel hat ein OpenSource Projekt, welcher C Code parsen kann und dann Code generiert, den man in sein C/C++ Projekt kompilieren und linken kann.
Der Sinn ist wie bei OpenCL die Routinen, die man optimieren will in eigenen Code Units zu schreiben und dann passenden OpCode zu generieren.
https://ispc.github.io/index.html
Um auf die Syntax Thematik zurück zu kommen, ich hab wie bei MS XNA beide Varianten implementiert.
Methoden ala Add, Mod ,... und Operatoren für die logischen ala +, - und so weiter.
Natürlich hab ich wesentlich mehr Methoden als Operatoren und von daher nutzte ich wie für C++ler üblich(so wenig wie möglich tippen) die Operatoren und weiche auf Methoden aus, wenn es dafür keine Operatoren gibt.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mi Mai 27, 2015 09:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
TAK2004 hat geschrieben:
Es gibt auch bestimmt noch weiteren syntax sugar der mir gerade nicht einfällt und man sollte noch dran denken, dass zwar C/C++ nicht stark typensicher sind aber z.B. GCC und VC++ es trotzdem erlauben. Compiler Flags /WX /Wall okey muss nicht gerade Wall sein, bei VC++ gibt W1 schon nicht explizite typecasts als Fehler zurück und pedantic hilft bei gcc.
Das hat aber auch seine Nachteile, explizite casts sind sehr schreibaufwändig.
Code:
  1. wchar* bla = L"asdf";
  2. WriteFile(const_cast<const wchar*>(reinterpret_cast<wchar*>(bla)));// sonnst schluckt VC++ und GCC es nicht mit obigen flags
  3.  
  4. enum class Bla{ One, Two, Three};
  5. int blupp[]={1,2,3};
  6. blupp[static_cast<int>(Bla::One)];

Die beiden Casts sehen für mich sehr überflüssig aus. Der reinterpret_cast ändert den Typ nicht und der const_cast müsste überflüssig sein, da man const hinzufügen darf, ohne dass es einen cast braucht (nur entfernen ist nicht erlaubt). Wenn ich mich jetzt nicht sehr irre.

viele Grüße,
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mi Mai 27, 2015 10:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
In beiden hast du recht, es sollte ein Beispiel sein und ich hab da ein typo.
Es ging nicht um die Korrektheit des Codes den ich mir ausgedacht hab sondern um zu zeigen, wo das Problem liegt aber offensichtlich war das wohl nicht so interessant.

Die erste Zeile wäre an sich schon falsch, weil L"asdf" const wchar[5] ist und nicht zu wchar* bla werden kann.
Zum 2. Problem
Code:
  1. WriteFile(const_cast<const char*>(reinterpret_cast<char*>(bla)));// sonnst schluckt VC++ und GCC es nicht mit obigen flags

const_cast erlaubt in beide Richtungen zu casten aber ist nur notwendig, wenn man ein const weg bekommen will, weil das entfernen des schreibschutzes zu Problemen führen kann und man möchte, dass dies einem bewusst ist und explizit angefordert wird.
Allerdings sollte man aufpassen, denn man kann sich sehr schnell durch implizite casts alles kaputt machen.
Ich hab in meiner alten Firma schon einige Bugs auf dem Tisch gehabt, weil Klassen Operatoren überladen haben und somit Tür und Tor für implizite und ungewollte Casts aufgemacht haben.
So wurde aus einem bool ein integer und dinge namen ihren Lauf oder Container haben in ganz seltenden Konstellationen leaks produziert.
Ganz zu schweigen von den unsichtbaren Kosten, die durch das temporäre erzeugen von Objekten entstehen können.

Hier ein korrektes wild life Beispiel.
Code:
  1. template<int N>
  2. String::String(char const (&CString)[N])
  3. {
  4.     m_Length = GetLength(reinterpret_cast<const RF_Type::UInt8*>(CString), N);
  5.     if (N <= BUFFER_SIZE)
  6.     {// the locale buffer is a little bit faster
  7.         m_DataManagment = Common::DataManagment::Copy;
  8.         RF_SysMem::Copy(m_FixBuffer.Raw(), CString, N);
  9.         m_FixBuffer.SetSize(N);
  10.     }
  11.     else
  12.     {// use the pointer of the string literal instead of create a copy
  13.         m_DataManagment = Common::DataManagment::UnmanagedInstance;
  14.         m_DynBuffer.m_Buffer = const_cast<RF_Type::UInt8*>(reinterpret_cast<const RF_Type::UInt8*>(&CString[0]));
  15.  
  16.         m_DynBuffer.m_Size = 1;
  17.         const char* stringEnd = CString;
  18.         for(; *stringEnd != '\0'; ++stringEnd, ++m_DynBuffer.m_Size){
  19.         }
  20.     }
  21. }
  22.  
  23. RF_Type::String trueCase= "focus";
  24. RF_Type::String falseCase = "This is a global constant which is larger then the fixed buffer of the string.";

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Do Mai 28, 2015 09:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
TAK2004 hat geschrieben:
auto wurde hauptsächlich wegen der langen Namen bei Traits und Templates eingeführt.
Ich benutzte auto schon etwas länger und bind sehr glücklich damit.
auto hat auch nix mit dem Speichermanagment zu tun, sondern mit der Type Thematik.
Der Compiler muss bei auto den typ erkennen, der bei der Initialisierung der Variable zugewiesen wird und behält diesen bei.
Dabei werden literals und Funktionen/Methoden angeschaut und der Rückgabewert übernommen.


So einfach ist das leider auch nicht. In C ist es tatsaechlich die Storageclass fuer "normale" lokale Variablen (ich denke daher kommt die Verwirrung). Und es kann auch durchaus
Sinn ergeben:
Code:
  1.  
  2. static void
  3. find_stack_direction ()
  4. {
  5.   static char *addr = NULL; /* Address of first `dummy', once known.  */
  6.   auto char dummy;      /* To get stack address.  */
  7.  
  8.   if (addr == NULL)
  9.     {               /* Initial entry.  */
  10.       addr = ADDRESS_FUNCTION (dummy);
  11.  
  12.       find_stack_direction ();  /* Recurse once.  */
  13.     }
  14.   else
  15.     {
  16.       /* Second entry.  */
  17.       if (ADDRESS_FUNCTION (dummy) > addr)
  18.     stack_dir = 1;      /* Stack grew upward.  */
  19.       else
  20.     stack_dir = -1;     /* Stack grew downward.  */
  21.     }
  22. }
  23.  



btw. das Beispiel mit den Strings ist mal wirklich "wild life" :mrgreen:

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Jun 01, 2015 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Mhh, also das es in C ein auto gibt und es eine andere Funktionsweise hat wusste ich garnicht.
Bei C++ bin ich von aus gegangen, dass es mit C++11 rein kam aber es gab davor tatsächlich auch ein auto und das war das von C.
http://en.cppreference.com/w/cpp/keyword/auto
Also dein Beispiel würde in einem C++11 compiler einen syntax Fehler werfen, ziemlich grusselige Lösung.
Ich hätte lieber ein neues Keyword eingeführt.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Jun 01, 2015 11:31 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
"auto" hat keiner für seinen ursprünglichen Zweck verwendet. Schließlich hat der Hinweis bei modernen Compilern keinen Effekt und "auto" konnte sowieso schon immer einfach weggelassen werden.

Ich finde sehr gut wenn man ganz langsam anfängt auch die antiken Altlasten wieder abzubauen. Ich wünschte, das würde viel stärker verfolgt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Jun 02, 2015 07:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
jup, das kommt wohl noch aus der Zeit als die Compiler anders (bzw. garnicht?) mit den Stack gearbeitet haben. Es kam aber durchaus noch vor das Programmierer es verwendet
haben um, ich sags mal deutlich, Kommentare zu sparen. Von daher sollte man immer im Hinterkopf behalten das die Aenderung noch relativ neu ist und sich nicht ueber Fehler
wundern.

Ich denke aber man haette da durchaus etwas besseres finden koennen. Es gibt schliesslich auch Extensions die auto benutzen um zu sagen "Bleib im Scope". Da haette man doch
bestimmt so etwas wie den Vorschlag fuer GC oder bessere Tail Recursion ala OCaml mit abdecken koennen. Ausserdem finde ich es eine Frechheit zu behaupten man staerkt die
Kompatibilitaet zu C und macht dann gleichtzeitig so etwas, voellig egal wie man ueber auto denkt.

Mal was anderes:

ich arbeite gerade an einen kleinen Tool das C Code (nicht ganz) nimmt und durch einen beliebigen C-Compiler jagt. Soll letztenendes so etwas wie Pure-C werden. Schauts
euch mal dort zum Beispiel die Expressions an:
Code:
  1.  
  2. and Expression =
  3.     | PrimaryExpression of PrimaryExpression
  4.     | PostfixExpression of PrimaryExpression * PostfixExpression //force braces when (a++)[0]
  5.     | UnaryExpression of UnaryExpression * PrimaryExpression //force braces when *(a++)
  6.     | SizeOfExpression of SizeOfExpression
  7.     | TypeOfExpression of TypeOfExpression
  8.     | BinaryExpression of Expression * BinaryOperator * Expression
  9.     | AssignmentExpression of PrimaryExpression * AssignmentOperator * Expression
  10.     | StructExpression of Expression list //Tuple Constructor
  11.     | ArrayExpression of Expression list //Sequence Constructor
  12.  

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Jun 02, 2015 10:26 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Wer behauptet denn, dass die Kompatiblität zu C gestärkt wurde? Das Ziel von C++11 war es die Sprache einfacher verwendbar zu machen.
Überhaupt: Wer noch Dinge wie "auto" verwendet, ist mit C++11 eh völlig falsch beraten weil der Code auch sonst inhaltlich höchstwahrscheinlich noch lang nicht bereit für C++11 ist.

Und Extensions können generell doch einfach die Sprache um ein neues Schlüsselwort erweitern. (Extension ≙ Erweiterung)


Zuletzt geändert von OpenglerF am Di Jun 02, 2015 15:42, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Jun 02, 2015 12:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich benutze das neue auto keyword recht häufig, da ich bei Containern einfach zuviel tippen müsste und die Zeilen einfach zu lang werden, als das man sie noch lesen kann.
Sonnst nutz ich es eigentlich nicht, da ich lieber den Datentyp sehen möchte.

Wenn man sich allerdings lambda expressions anguckt, welche ziemlicher Syntax fuckup ist, dann bin ich recht froh mit auto als Wort. Vielleicht wären die sonnst dort auch auf lustige Sonderzeichen für modifier gekommen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Jun 02, 2015 14:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
@OpenglerF
Man sollte nicht Unterschätzen wie sehr sich beide Sprachen da gegenseitig beeinflussen. Denk zum Beispiel einfach mal an solche trivialen Sachen wie den Header
einer Bibliothek. Du brauchst die selben Basis-Typen, den gleichen Praeprozessor (das beinhaltet bei C99 z.B. auch ehemalige Extensions wie func-Macro), die gleichen Deklarationen...

Und was der erst mal beim ganzen Low-Level Zeugs abgeht möchte ich gar nicht erst wissen. Da fliesst schon eine ganze Menge an Hirnschmalz mit rein, wenn man mal genau drüber nachdenkt.

Btw. ich hab da jetzt zum neuen Auto eine lustige Geschichte gelesen. Angeblich wurde das schon einmal in 80ern versucht. Da scheiterte es wohl am implicit int von C. Wir haben also tatsaechlich knapp 2 Jahrzehnte (C99) dafuer gebraucht um dieses eine Hindernis zu entfernen :mrgreen:


Ich persoehnlich bin aber der Meinung man haette "auto" als Ersatz fuer "unique_ptr" verwenden sollen und zum Beispiel "var" fuer den Typenkram nehmen sollen. Ich hatte bei
meinen Objective-C Kram zum Beispiel das Problem das ich nicht "unique_ptr" benutzen konnte weil beim mingw dadurch der Klassen-Pointer um 4 Bytes verschoben war. Wobei
man da natuerlich wieder Argumentieren koennte das es am inkompatiblen Klassen/Struct-Layout liegt und das dann lieber fixxen sollte... Das ist aber nur meine Wunschliste :)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 60 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 27 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.041s | 17 Queries | GZIP : On ]