Jammer-Thread
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Kann mir das jemand erklären?
class Uncopyable {
public:
Uncopyable() { }
private:
Uncopyable(Uncopyable const &);
};
class ShouldntBeCopyable : public Uncopyable {
public:
explicit ShouldntBeCopyable(char const *) { }
int foo() const { return 42; }
};
void test() {
ShouldntBeCopyable instance("blah");
ShouldntBeCopyable copy(instance); // Fehler – wie erwartet
int x = (new ShouldntBeCopyable(ShouldntBeCopyable("")))->foo(); // Kompiliert – WTF?! Warum wird da kein Kopierk’tor aufgerufen?!
int y = (new ShouldntBeCopyable(ShouldntBeCopyable(ShouldntBeCopyable(""))))->foo(); // JETZT ein Kopierk’toraufruf und ein Kompilierfehler
}
Jetzt; Achtung; Achtung! Passt auf – Jetzt! Jetzt!
class ShouldntBeCopyable { // Mal ohne Basisklasse
public:
explicit ShouldntBeCopyable(char const *) { }
int foo() const { return 42; }
private:
ShouldntBeCopyable(ShouldntBeCopyable const &); // Jetzt is’er direkt drin!
};
void test() {
int x = (new ShouldntBeCopyable(ShouldntBeCopyable("")))->foo(); // JETZT kommt auch hier ein Fehler …
}
Ich verstehe new nicht. Die ganze Syntax ist sowas von in die Sprache geschissen, das gibt es garnicht.
class Uncopyable {
public:
Uncopyable() { }
private:
Uncopyable(Uncopyable const &);
};
class ShouldntBeCopyable : public Uncopyable {
public:
explicit ShouldntBeCopyable(char const *) { }
int foo() const { return 42; }
};
void test() {
ShouldntBeCopyable instance("blah");
ShouldntBeCopyable copy(instance); // Fehler – wie erwartet
int x = (new ShouldntBeCopyable(ShouldntBeCopyable("")))->foo(); // Kompiliert – WTF?! Warum wird da kein Kopierk’tor aufgerufen?!
int y = (new ShouldntBeCopyable(ShouldntBeCopyable(ShouldntBeCopyable(""))))->foo(); // JETZT ein Kopierk’toraufruf und ein Kompilierfehler
}
Jetzt; Achtung; Achtung! Passt auf – Jetzt! Jetzt!
class ShouldntBeCopyable { // Mal ohne Basisklasse
public:
explicit ShouldntBeCopyable(char const *) { }
int foo() const { return 42; }
private:
ShouldntBeCopyable(ShouldntBeCopyable const &); // Jetzt is’er direkt drin!
};
void test() {
int x = (new ShouldntBeCopyable(ShouldntBeCopyable("")))->foo(); // JETZT kommt auch hier ein Fehler …
}
Ich verstehe new nicht. Die ganze Syntax ist sowas von in die Sprache geschissen, das gibt es garnicht.
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Hast du das auf verschiedenen Compilern getestet? Ich würd da jetzt mal auf Compilerbug tippen, evtl. in Zusammenhang mit Copy Elision...
Was genau ist denn das Problem mit new? :P
Was genau ist denn das Problem mit new? :P
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Nope; nur Visual C++ 2010.dot hat geschrieben:Hast du das auf verschiedenen Compilern getestet? Ich würd da jetzt mal auf Compilerbug tippen, evtl. in Zusammenhang mit Copy Elision...
dot hat geschrieben:Was genau ist denn das Problem mit new? :P
- Der Vorrang ((new foo)->bar(); statt new foo->bar();, obwohl kein Typname durch -> erreicht werden kann)
- Die Parametersyntax (operator new (sizeof(Type), b, c) ruft sich new (b, c) Type)
- Dass die Kontrolle über die tatsächliche Speichermenge dem Compiler übertragen wird (danke, dass doppelt Buch über die Allokationsgröße geführt wird; hätte ich nie selber hingekriegt! Klar; braucht man für die Anzahl der D’tordurchläufe in delete, aber darum auch …)
- Dass es kein Placement delete gibt („Objekte wissen selber am besten, wo sie herkommen.“ Fick diesen OOP-Scheiß! Ich muss sowieso irgendwie irgendwo Buch darüber führen, wie lang meine Arrays sind; also automatisier das vollständig (durch ein natives range-Muster) oder garnicht!)
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Das ist nicht dasselbe. operator new ist etwas anderes als der new Operator und das Ergebnis dieser beiden Ausdrücke ist auch höchst unterschiedlich...Krishty hat geschrieben:Die Parametersyntax (operator new (sizeof(Type), b, c) ruft sich new (b, c) Type)
Wer sollte denn sonst entscheiden, wie groß ein Objekt ist, wenn nicht der Compiler!?Krishty hat geschrieben:Dass die Kontrolle über die tatsächliche Speichermenge dem Compiler übertragen wird (danke, dass doppelt Buch über die Allokationsgröße geführt wird; hätte ich nie selber hingekriegt! Klar; braucht man für die Anzahl der D’tordurchläufe in delete, aber darum auch …)
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Siehst du? Bullshit.dot hat geschrieben:Das ist nicht dasselbe. operator new ist etwas anderes als der new Operator und das Ergebnis dieser beiden Ausdrücke ist auch höchst unterschiedlich...Krishty hat geschrieben:Die Parametersyntax (operator new (sizeof(Type), b, c) ruft sich new (b, c) Type)
Entschuldige – wie groß ein Array ist. Das sollte der Compiler entweder komplett entscheiden (für alle Arrays), oder garnicht.dot hat geschrieben:Wer sollte denn sonst entscheiden, wie groß ein Objekt ist, wenn nicht der Compiler!?Krishty hat geschrieben:Dass die Kontrolle über die tatsächliche Speichermenge dem Compiler übertragen wird (danke, dass doppelt Buch über die Allokationsgröße geführt wird; hätte ich nie selber hingekriegt! Klar; braucht man für die Anzahl der D’tordurchläufe in delete, aber darum auch …)
Bis dieses Jahr habe ich exklusiv Placement new eingesetzt, weil es die einzig konsistente Variation dieses Mechanismus ist. Ich weiß auch nicht, was mich geritten hat, jetzt wieder das normale new aufzurufen.
————
Hahaha stellt euch vor: Ich war im
Oh, und: Wie ich das sehe, nehmen sie nur noch 2012 RC-Bugs entgegen.
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Jammer-Thread
Ich glaube nicht, dass das via IP gemacht wird. Mit welchem Browser warst du denn unterwegs? Ich glaube da werden Cookies oder so gesetzt.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Wie kann denn mein Messenger (Miranda) einen Cookie im Browser (Chrome) setzen? Zugegeben – Connect hat mir keine Live ID angezeigt, darum kann ich nur mutmaßen. Aber als ich mich ausgeloggt hatte und wieder einloggen wollte, stand im Live-ID-Eingabefeld bereits die ID, mit der ich privat chatte.
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Jammer-Thread
ich schätze dann war es irgendein cookie von einer vorherigen anmeldung. sicher dass du dich in letzter zeit nicht irgendwann mal in irgendeinem windows live service angemeldet hast? also bei mir passiert da jedenfalls nichts in der richtung, ich meine mich gut zu erinnern, dass msn/windows live ziemlich lange sessions o.Ä. erlaubt. das ganze an der ip fest zu machen wäre wirklich irrsinnig, da die ja bei den wenigsten leuten fest ist und auch sonst verstecken sich ja meist mehrere rechner hinter einem router...
also bei mir loggt sich mein live account automatisch bei connect ein, wenn ich mich vorher irgendwo anders damit angemeldet habe. dienst konsolidierung nehme ich mal an. wahrscheinlich kannst du deinen connect account jetzt auch für den messenger benutzen, falls das nicht immer schon so war...
also bei mir loggt sich mein live account automatisch bei connect ein, wenn ich mich vorher irgendwo anders damit angemeldet habe. dienst konsolidierung nehme ich mal an. wahrscheinlich kannst du deinen connect account jetzt auch für den messenger benutzen, falls das nicht immer schon so war...
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Du hast recht – alle Cookies gelöscht; alle Sitzungen beendet; wieder im Messenger angemeldet; Connect aufgerufen und schon muss ich Live ID und Passwort eintippen (wie es sein sollte). Jetzt wüsste ich nur gern, wo diese Information heute vormittag herkam – ich lösche meine Kekse ziemlich oft; eigentlich allabendlich.
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Also was genau jetzt dein Problem damit ist, erschließt sich mir immer noch nicht...Krishty hat geschrieben:Siehst du? Bullshit.dot hat geschrieben:Das ist nicht dasselbe. operator new ist etwas anderes als der new Operator und das Ergebnis dieser beiden Ausdrücke ist auch höchst unterschiedlich...Krishty hat geschrieben:Die Parametersyntax (operator new (sizeof(Type), b, c) ruft sich new (b, c) Type)
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Dass eine völlig inkonsistente Syntax ist, wo sich jemand dachte: Oh; es wäre cool, wenn man new int schreiben könnte und dann einen Zeiger auf ein frei allokiertes int bekäme!, und ihm später einfiel, Ups – jetzt muss ich aber irgendwo noch zusätzliche Parameter unterbringen, wenn ich von einem bestimmten Ort allokieren möchte … wo könnte ich denn jetzt noch Parameter unterbringen? Ah! Einfach zwischen die Wörter! und dabei dieses völlig bekloppte Geschwurbel rauskam, wo sie noch nicht einmal ordentliche Präzedenz reingekriegt haben.
new wie die Konvertierungsoperatoren anzulegen (also new<int>();) hätte es auch getan, und dabei nicht die Syntaxvorschriften ums Tausendfache verkompliziert. Das ist natürlich immernoch scheiße, denn da fehlt ja – OHMYGOD – auch noch sowas wie K’tor-Initialisierung für Arrays. Das ist sowieso der größte Faustfick; dass ich in C++ keine Möglichkeit habe, non-POD-Arrays bei der Konstruktion mit Parametern zu versorgen. Lass dir das mal auf der Zunge zergehen!
Und wegen dieser ganzen Scheiße ist new nur unter einer einzigen winzigen Bedingung produktiv einsetzbar: Einzelnes Placement new auf ein selber allokiertes char-Array in einer for-Schleife ganz unten drin in den Datencontainern. Und dann erwischt man einen Compiler, der da unzählige Nullprüfungen einführt (hier hätte jetzt ein Link zum Connect-Ticket sein sollen; aber irgendwie haben die für Visual Studio 2012 Connect geleert oder so), und sieht, dass man das durch Ändern des Placement new-Operators ändern könnte, aber natürlich nicht darf, weil in C++ die Sprache viel zu tief mit der STL verwurschtelt ist und es im Standard verboten wurde, einen anderen Operator Placment new zu definieren als den, der von deinem Compiler in <new> geliefert wird, weil, FICKT EUCH!.
new wie die Konvertierungsoperatoren anzulegen (also new<int>();) hätte es auch getan, und dabei nicht die Syntaxvorschriften ums Tausendfache verkompliziert. Das ist natürlich immernoch scheiße, denn da fehlt ja – OHMYGOD – auch noch sowas wie K’tor-Initialisierung für Arrays. Das ist sowieso der größte Faustfick; dass ich in C++ keine Möglichkeit habe, non-POD-Arrays bei der Konstruktion mit Parametern zu versorgen. Lass dir das mal auf der Zunge zergehen!
Und wegen dieser ganzen Scheiße ist new nur unter einer einzigen winzigen Bedingung produktiv einsetzbar: Einzelnes Placement new auf ein selber allokiertes char-Array in einer for-Schleife ganz unten drin in den Datencontainern. Und dann erwischt man einen Compiler, der da unzählige Nullprüfungen einführt (hier hätte jetzt ein Link zum Connect-Ticket sein sollen; aber irgendwie haben die für Visual Studio 2012 Connect geleert oder so), und sieht, dass man das durch Ändern des Placement new-Operators ändern könnte, aber natürlich nicht darf, weil in C++ die Sprache viel zu tief mit der STL verwurschtelt ist und es im Standard verboten wurde, einen anderen Operator Placment new zu definieren als den, der von deinem Compiler in <new> geliefert wird, weil, FICKT EUCH!.
Re: Jammer-Thread
Krishty ich fänds toll wenn du mal eine Programmiersprache entwickelst oder daran beteiligt bist. Und das meine ich ironiefrei.
Ohne Input kein Output.
-
- Moderator
- Beiträge: 2138
- Registriert: 25.02.2009, 13:37
Re: Jammer-Thread
Yay und die compliliert dann zu Java-Bytecode.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
http://www.zfx.info/viewtopic.php?f=10& ... 285#p18296
Mangels Zeit hat sich im letzten Jahr nicht viel getan; ich bin etwa bei dem Punkt, wo der Compiler global Symbole zusammensuchen kann (also aufeinander verweisende Funktionen, Strukturen und Typnamen auflösen – von sowas wie Code Generation weit entfernt).
Schade eigentlich, denn es fühlt sich von allen meinen Projekten wie das einzig Sinnvolle an. Leider sind meine Ansprüche zu hoch um über eine ständige Analysis Paralysis hinauszukommen …
Mangels Zeit hat sich im letzten Jahr nicht viel getan; ich bin etwa bei dem Punkt, wo der Compiler global Symbole zusammensuchen kann (also aufeinander verweisende Funktionen, Strukturen und Typnamen auflösen – von sowas wie Code Generation weit entfernt).
Schade eigentlich, denn es fühlt sich von allen meinen Projekten wie das einzig Sinnvolle an. Leider sind meine Ansprüche zu hoch um über eine ständige Analysis Paralysis hinauszukommen …
Re: Jammer-Thread
Schade eigentlich. Ich bastel zur Zeit auch an ner Sprache. Vorwiegend aus Spaß an der Freude und wegen des Lerneffekts. Allerdings gehen mir auch viele Dinge auf den Sack (C, C++, Java, C# usw). Manche Sachen sind ja ganz toll, aber vieles ist einfach nur hingeschissen. Ich würd gern schon ein Konzept entwickeln, was nicht ganz katastrophal ist. Vielleicht kannst du mir ja ein paar Ideen/Kernpunkte für deine Sprache verraten (ein paar konnte ich ja deinem Link entnehmen).
Verblüffenderweise sieht deine Syntax für Funktionen fast exakt wie mein Entwurf aus. Bei mir soll es ein Modulsystem geben, bei dem die Reihenfolge ebenfalls keine Rolle spielt. Typen haben feste Größen (hab mich da teilweise an D orientiert, genau wie bei der Syntax von Arrays). Ich bin auch noch dabei vieles auszuklügeln, aber ich schätze mich nicht erfahren genug ein, um was Brauchbares auf die Beine zu stellen.
Bei mir steckt aber alles noch in den Kinderschuhen, sprich ich sitze noch am rohen Konzept für viele Dinge. Weit entfernt also von irgendeinem Codeschnipsel für einen Compiler.
Was mir auch wichtig ist, ist Nebenwirkungen so gut es geht zu minimieren. Bei mir sollen alle Funktionen von Haus aus "pur" sein, man kann also weder I/O durchführen, noch globale Variablen ändern. I/O-Funktionen müssen entsprechende gekennzeichnet werden und globale Variablen / statische Member soll es höchstwahrscheinlich gar nicht erst geben (allerdings globale Funktionen und eventuell statische Methoden, wobei mit global dann modul-lokal bzw. namespace-lokal gemeint ist).
Bei deinem Beispiel fällt mir das Schlüsselwort instance auf. Ich vermute du unterscheidest dadurch zwischen Stack und Heap? Dafür suche ich auch noch eine schöne Lösung.
Verblüffenderweise sieht deine Syntax für Funktionen fast exakt wie mein Entwurf aus. Bei mir soll es ein Modulsystem geben, bei dem die Reihenfolge ebenfalls keine Rolle spielt. Typen haben feste Größen (hab mich da teilweise an D orientiert, genau wie bei der Syntax von Arrays). Ich bin auch noch dabei vieles auszuklügeln, aber ich schätze mich nicht erfahren genug ein, um was Brauchbares auf die Beine zu stellen.
Bei mir steckt aber alles noch in den Kinderschuhen, sprich ich sitze noch am rohen Konzept für viele Dinge. Weit entfernt also von irgendeinem Codeschnipsel für einen Compiler.
Was mir auch wichtig ist, ist Nebenwirkungen so gut es geht zu minimieren. Bei mir sollen alle Funktionen von Haus aus "pur" sein, man kann also weder I/O durchführen, noch globale Variablen ändern. I/O-Funktionen müssen entsprechende gekennzeichnet werden und globale Variablen / statische Member soll es höchstwahrscheinlich gar nicht erst geben (allerdings globale Funktionen und eventuell statische Methoden, wobei mit global dann modul-lokal bzw. namespace-lokal gemeint ist).
Bei deinem Beispiel fällt mir das Schlüsselwort instance auf. Ich vermute du unterscheidest dadurch zwischen Stack und Heap? Dafür suche ich auch noch eine schöne Lösung.
Ohne Input kein Output.
Re: Jammer-Thread
Damit hast du schon mal eine gute Wahl getroffen.Krishty hat geschrieben:ich bin etwa bei dem Punkt, wo der Compiler global Symbole zusammensuchen kann
gwscript arbeitet auch mit globalen Definititonen, die erst mal zusammengesucht werden. Damit hast du erst mal Super-Highlevel aspektorientierte Programmierung.
Jetzt fehlt nur noch ein Paradigma, wie man die Low-Level-Sachen mit Zero Overhead hinbekommt.
[btw man könnte die Sprach-Sachen mal in nen extra Thread stecken]
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Ich habe lange versucht, eine einheitliche Deklarationssyntax sowohl für Daten als auch für Funktionen hinzukriegen, aber bisher mit wenig Erfolg.BeRsErKeR hat geschrieben:Verblüffenderweise sieht deine Syntax für Funktionen fast exakt wie mein Entwurf aus.
Meinst du mit von Haus aus müssen pur sein oder sind pur so lange nicht anders angegeben? Keine Ahnung, ob Erstes so eine gute Idee ist – für eine Skriptsprache mit Sicherheit; für eine vollwertige Programmiersprache wäre es mir schon wieder zu utopisch. Pascal hat eine Unterscheidung zwischen Funktionen (Parameter zu Rückgabewert; letzterer muss vom Aufrufer behandelt werden) und Prozeduren (Wirkung; Rückgabewert optional); das wäre für mich ein brauchbarer Kompromiss.BeRsErKeR hat geschrieben:Was mir auch wichtig ist, ist Nebenwirkungen so gut es geht zu minimieren. Bei mir sollen alle Funktionen von Haus aus "pur" sein, man kann also weder I/O durchführen, noch globale Variablen ändern.
Array-Syntax ist ein interessantes Thema … ich hasse C(++)-Arrays. Im Augenblick löse ich in meinen C++-Projekten alles über range-Strukturen, die auf Anfang und Ende von Feldern zeigen, und das fließt wie Butter – abgesehen von dem winzigen Detail, dass der Compiler es nicht ausreichend optimiert, weil es keine Wurzel in der Sprache selber hat; und dass mir bei String-Literalen immer die automatisch angehängte Null zum Verhängnis wird (for teh luv of gawd, WHY!). Ich muss mir auch unbedingt nochmal Gos Slices ansehen, falls ich irgendwann mal Zeit habe. Und dann wären da noch Strings, die ja auch ein Thema für sich sind (Rein in die Sprache oder nicht? Nur Literale? Nullterminiert oder nicht? …).BeRsErKeR hat geschrieben:hab mich da teilweise an D orientiert, genau wie bei der Syntax von Arrays
Gegen globale Variablen spricht für mich nur der eine Grund, dass sie nicht mit dem Konzept von Threads und Fibers vereinbar sind. Ich würde definitiv statische (vorberechnete) globale Variablen für sowas wie Nachschlagtabellen erlauben; wohl auch einige bei Programmstart initialisierte Instanzen (mit automatisch korrekter Initialisierungsreihenfolge, da ich die Abhängigkeiten sowieso zur Typauflösen ausklamüsern muss), weil man sich ohne einfach zu weit von der Praxis entfernen würde. (Beispiel Spiele-Sandbox: Wo nähmst du freien Speicher manueller Lebenszeit her, falls du weder I/O aufrufen, noch einen globalen Zeiger anlegen könntest? Du müsstest alles auf esoterische, wahrscheinlich halb rekursive Gebilde umschrauben … das würde es für den Compiler-Entwickler vereinfachen, aber sicher nicht für den Programmierer.) Aber bei mit dem Prozess initialisierten Variablen würden dann wieder Leute alles aushebeln, indem sie ihr ganzes Programm in einen K’tor packen (MFC).BeRsErKeR hat geschrieben:globale Variablen / statische Member soll es höchstwahrscheinlich gar nicht erst geben (allerdings globale Funktionen und eventuell statische Methoden, wobei mit global dann modul-lokal bzw. namespace-lokal gemeint ist).
Nein; das benötige ich für Template-Metaprogrammierung. Genau genommen benötigt C++ es (in Form von typename vor den Namen abhängiger Typen in Templates), um beim Parsen zwischen den FällenBeRsErKeR hat geschrieben:Bei deinem Beispiel fällt mir das Schlüsselwort instance auf. Ich vermute du unterscheidest dadurch zwischen Stack und Heap?
a * i; // Multiplikation; a: int; i: int
a * i; // Zeigerdeklaration; a: typedef für int; i: Name des Zeigers
unterscheiden zu können. Ich brauche es immer, weil ich ja keine Deklarationen habe und der Compiler sonst beim Parsen dieser Stelle nicht wissen könnte, um welchen der Fälle es sich handelt. Mit einer ausreichend klaren Deklarationssyntax wäre das am Ende sicher obsolet; aber um es mir selber zu vereinfachen, habe ich es erstmal dringelassen. Was die Unterscheidung zwischen Stack / Heap angeht (sehr unglückliche Begriffe; nennen wir sie automatische und manuelle Speicherverwaltung), würde ich nur eine Placement-Syntax bauen (d.h., Byte-Array aus beliebiger Quelle zu Objekt initialisieren) und die vor ein paar Tagen erwähnte Array-Initialisierung irgendwie reinboxen.
Re: Jammer-Thread
Ich versuche mittlerweile seit Wochen das Equalizer-Framework unter Windows zu kompilieren. Es geht einfach nicht. Heute habe ich schon 2 Bugs in den CMake-Skripten gefunden, aus denen offensichtlich wurde, das sich keine Sau für die Windowsversion interessiert, jedenfalls frag ich mich, wie man sie in diesem Zustand benutzen sollte.
Achja: Es gibt auch eine vorkompilierte Version, allerdings stürzt der Installer jedesmal ab, weil die Umgebungsvariable PATH zu lang ist, als das er sie verändern kann (äh, wie kann das denn sein), was ich allerdings im Fenster vorher explizit ausgeschaltet habe. Supi.
Oh, und VisualStudio hängt sich immer beim kompilieren auf und macht dann gar nichts mehr. Vielleicht hat das was mit diesen Fehlermeldungen zu tun, die offensichtlich daher kommen, dass er keine Leerzeichen in Pfaden mag (und das im Jahr 2012, das darf doch wohl nicht wahr sein).
Jetzt bin ich immerhin soweit, dass ich Linkerfehler habe, die ich nicht verstehe. CMake generiert mir da eine Projektmappe mit geschätzten 200 Unterprojekten, davon eine Lib in der eine Funktion ist, die eine andere benutzt, dann aber einfach nicht da ist. Ich habe mir diese Lib im kompilierten Zustand mal mit dumpbin angeschaut und die fraglichen Funktionen stehen tatsächlich nicht drin. Keine Ahnung, was ich da jetzt noch machen soll, vielleicht liegt es einfach daran, dass es die aktuelle Version aus dem git-Repo ist.
In so Momenten weiß man einfach, dass C++ auch nur Mist ist.
Achja: Es gibt auch eine vorkompilierte Version, allerdings stürzt der Installer jedesmal ab, weil die Umgebungsvariable PATH zu lang ist, als das er sie verändern kann (äh, wie kann das denn sein), was ich allerdings im Fenster vorher explizit ausgeschaltet habe. Supi.
Oh, und VisualStudio hängt sich immer beim kompilieren auf und macht dann gar nichts mehr. Vielleicht hat das was mit diesen Fehlermeldungen zu tun, die offensichtlich daher kommen, dass er keine Leerzeichen in Pfaden mag (und das im Jahr 2012, das darf doch wohl nicht wahr sein).
Jetzt bin ich immerhin soweit, dass ich Linkerfehler habe, die ich nicht verstehe. CMake generiert mir da eine Projektmappe mit geschätzten 200 Unterprojekten, davon eine Lib in der eine Funktion ist, die eine andere benutzt, dann aber einfach nicht da ist. Ich habe mir diese Lib im kompilierten Zustand mal mit dumpbin angeschaut und die fraglichen Funktionen stehen tatsächlich nicht drin. Keine Ahnung, was ich da jetzt noch machen soll, vielleicht liegt es einfach daran, dass es die aktuelle Version aus dem git-Repo ist.
In so Momenten weiß man einfach, dass C++ auch nur Mist ist.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
Re: Jammer-Thread
Ja ich bin auch noch am Frickeln.Krishty hat geschrieben:Ich habe lange versucht, eine einheitliche Deklarationssyntax sowohl für Daten als auch für Funktionen hinzukriegen, aber bisher mit wenig Erfolg.BeRsErKeR hat geschrieben:Verblüffenderweise sieht deine Syntax für Funktionen fast exakt wie mein Entwurf aus.
Zur Zeit unterscheide ich zwischen Funktion und Prozedur. Da Prozeduren ohne Nebenwirkungen sinnfrei sind, müssen diese eigentlich nicht weiter mit Schlüsselwörtern beschmückt werden. Ich nutze aber zusätzlich noch ein Schlüsselwort um Funktionen als non-pure bzw. in dem konkreten Fall als Funktionen, die I/O durchführen zu kennzeichnen. Problematisch ist halt, wie du sagst, dass man dann eigentlich nicht wirklich I/O nutzen kann, weil pure Funktionen keine I/O-Funktionen aufrufen können. Und das ganze ab der main-Funktion trennen ist wohl auch nicht sehr sinnvoll oder in jedem Fall machbar. Und prinzipiell benötigt man auch nicht-pure Funktionen, falls man z.B. was aus ner Datei lesen will. Naja mit dem Thema werde ich mich noch beschäftigen.Krishty hat geschrieben:Meinst du mit von Haus aus müssen pur sein oder sind pur so lange nicht anders angegeben? Keine Ahnung, ob Erstes so eine gute Idee ist – für eine Skriptsprache mit Sicherheit; für eine vollwertige Programmiersprache wäre es mir schon wieder zu utopisch. Pascal hat eine Unterscheidung zwischen Funktionen (Parameter zu Rückgabewert; letzterer muss vom Aufrufer behandelt werden) und Prozeduren (Wirkung; Rückgabewert optional); das wäre für mich ein brauchbarer Kompromiss.BeRsErKeR hat geschrieben:Was mir auch wichtig ist, ist Nebenwirkungen so gut es geht zu minimieren. Bei mir sollen alle Funktionen von Haus aus "pur" sein, man kann also weder I/O durchführen, noch globale Variablen ändern.
Klingt interessant. Kannst du mir da mal ein Beispiel zeigen? Zwecks range-Strukturen.Krishty hat geschrieben:Array-Syntax ist ein interessantes Thema … ich hasse C(++)-Arrays. Im Augenblick löse ich in meinen C++-Projekten alles über range-Strukturen, die auf Anfang und Ende von Feldern zeigen, und das fließt wie Butter – abgesehen von dem winzigen Detail, dass der Compiler es nicht ausreichend optimiert, weil es keine Wurzel in der Sprache selber hat; und dass mir bei String-Literalen immer die automatisch angehängte Null zum Verhängnis wird (for teh luv of gawd, WHY!). Ich muss mir auch unbedingt nochmal Gos Slices ansehen, falls ich irgendwann mal Zeit habe. Und dann wären da noch Strings, die ja auch ein Thema für sich sind (Rein in die Sprache oder nicht? Nur Literale? Nullterminiert oder nicht? …).BeRsErKeR hat geschrieben:hab mich da teilweise an D orientiert, genau wie bei der Syntax von Arrays
Ich möchte es bei mir recht strikt und eindeutig halten. Ich überlege z.B. die Ausdrücke für Typen und Variablen soweit einzuschränken, dass sie in jedem Fall unterscheidbar sind und auch die Syntax für Pointer wird eher in Richtung von pointer<a> i; gehen, als a * i; - halt um solche Sachen zu vermeiden. Aber auch da muss ich mir noch was Anständiges überlegen.Krishty hat geschrieben:Nein; das benötige ich für Template-Metaprogrammierung. Genau genommen benötigt C++ es (in Form von typename vor den Namen abhängiger Typen in Templates), um beim Parsen zwischen den FällenBeRsErKeR hat geschrieben:Bei deinem Beispiel fällt mir das Schlüsselwort instance auf. Ich vermute du unterscheidest dadurch zwischen Stack und Heap?
a * i; // Multiplikation; a: int; i: int
a * i; // Zeigerdeklaration; a: typedef für int; i: Name des Zeigers
unterscheiden zu können. Ich brauche es immer, weil ich ja keine Deklarationen habe und der Compiler sonst beim Parsen dieser Stelle nicht wissen könnte, um welchen der Fälle es sich handelt. Mit einer ausreichend klaren Deklarationssyntax wäre das am Ende sicher obsolet; aber um es mir selber zu vereinfachen, habe ich es erstmal dringelassen. Was die Unterscheidung zwischen Stack / Heap angeht (sehr unglückliche Begriffe; nennen wir sie automatische und manuelle Speicherverwaltung), würde ich nur eine Placement-Syntax bauen (d.h., Byte-Array aus beliebiger Quelle zu Objekt initialisieren) und die vor ein paar Tagen erwähnte Array-Initialisierung irgendwie reinboxen.
typedef/alias plane ich auch gänzlich wegzulassen oder wenigstens nur sehr begrenzt anzubieten. Ich bin eher für ein bischen mehr Schreibaufwand als für möglichst kurze Typnamen. Gleiches gilt für using namespace und so Sachen. Es führt letztlich eher zu Verwirrungen und kann auch zu solchen Uneindeutigkeiten führen, die du angesprochen hast.
Ohne Input kein Output.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
HLSL Packing ...
Das Beispiel ist natürlich vereinfacht. Will man einen RWStructuredBuffer einfach auf gleiches Layout mit einem Constant Buffer bringen, reicht manuelles Padding:
Code: Alles auswählen
struct Bounds { float3 Min, Max; };
RWStructuredBuffer<Bounds> BoundsUAV;
struct BoundsConstantLayout
{
float4 MinM;
float2 ax;
};
cbuffer BoundsConstants
{
BoundsConstantLayout BoundsConstants;
}
// ...
float3 min = BoundsConstants.MinM.xyz;
float3 max = float3(BoundsConstants.MinM.w, BoundsConstants.ax);
Code: Alles auswählen
struct Bounds { float3 Min; float _1; float3 Max; float _2; };
RWStructuredBuffer<Bounds> BoundsUAV;
cbuffer BoundsConstants
{
Bounds BoundsConstants;
}
// ...
float3 min = BoundsConstants.Min;
float3 max = BoundsConstants.Max;
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
Was zum Jammern ist:
Wenn ich mir hier die Postings im Thema durchlese, frage ich mich mittlerweile, ob ich hier in einem Programmiersprachen-Guru-Forum gelandet bin, oder in einem Forum für Spieleprogrammierer :|
Wenn ich mir hier die Postings im Thema durchlese, frage ich mich mittlerweile, ob ich hier in einem Programmiersprachen-Guru-Forum gelandet bin, oder in einem Forum für Spieleprogrammierer :|
Re: Jammer-Thread
Das kann ich nur bestätigen :lol:TDK hat geschrieben:Was zum Jammern ist:
Wenn ich mir hier die Postings im Thema durchlese, frage ich mich mittlerweile, ob ich hier in einem Programmiersprachen-Guru-Forum gelandet bin, oder in einem Forum für Spieleprogrammierer :|
-
- Establishment
- Beiträge: 201
- Registriert: 07.07.2010, 13:00
- Kontaktdaten:
Re: Jammer-Thread
Da programmiere ich seit Tagen an meiner Rendering-Monade herum und wunder mich warum beim Weiterreichen in die App-Monade nichts angezeigt wird. Da fehlte mir einfach im Bind-Operator der Flush-Aufruf...
*ggrrr*
*ggrrr*
Imaging-Software und bald auch Middleware: http://fd-imaging.com
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
DirectCompute ...
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Ich kann dich beruhigen: Mit OpenCL würd's vermutlich noch viel schlimmer aussehen ;)
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Jammer-Thread
Ich kann mir gut vorstellen, dass das was du (CodingCat) machst nichts damit zu tun hat, aber was haltet ihr eigentlich von Sachen wie C++ AMP http://msdn.microsoft.com/en-us/library ... .110).aspx oder Aparapi http://code.google.com/p/aparapi/? Schon mal benutzt?
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Ich seh' in C++ AMP sehr viel Potential. Verwendet hab ich's aber noch nicht...
Re: Jammer-Thread
Ich habe es versucht zu verwenden (unter Visual Studio 2012 im Consumer Preview von Windows 8 mitsamt Parallel Nsight Debugging), bis ich plötzlich gemerkt habe, dass meine VM ja gar keine richtige Graphikkarte emuliert. :|
Re: Jammer-Thread
Wie Karlsruhe ist nicht mehr exzellent?
(Alleine dass Saarbrücken sich über das MPI was schnorren muss, zeigt, dass irgendwie in Deutschland was schiefläuft.)
(Alleine dass Saarbrücken sich über das MPI was schnorren muss, zeigt, dass irgendwie in Deutschland was schiefläuft.)
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Nein nein, das hat schon seine Richtigkeit, dank Java sind wir hier leider im Laufe des letzten Jahres kollektiv verblödet. (Ich habe gerade mehrere 100 Zeilen fremden Mathecode von abstrusem x.Cross(y) auf cross(x, y) gebracht, auch deshalb ist ADL ein Segen; hat aber nichts mit der Uni zu tun ...).
In other news: Entweder ich habe seit Tagen einen ultrafetten Bug in meinem Code, oder Ray Space Hierarchies sind nicht mal ansatzweise zu gebrauchen?!? :-/
In other news: Entweder ich habe seit Tagen einen ultrafetten Bug in meinem Code, oder Ray Space Hierarchies sind nicht mal ansatzweise zu gebrauchen?!? :-/
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite