Mir geht's genauso :lol:CodingCat hat geschrieben:(Und ich liebe den Formelsatz. In LaTeX formuliere ich mathematisch was geht, nur weil es schön aussieht. :mrgreen: )
Jammer-Thread
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
-
- Moderator
- Beiträge: 2138
- Registriert: 25.02.2009, 13:37
Re: Jammer-Thread
Die innere Schönheit einer mathematischen Formulierung hat doch mit LaTex nichts zu tun. Mit Stift und Papier würde ich es genauso machen. Dass man das mit Word nicht tut spricht eher gegen Word als für LaTex.dot hat geschrieben:Mir geht's genauso :lol:CodingCat hat geschrieben:(Und ich liebe den Formelsatz. In LaTeX formuliere ich mathematisch was geht, nur weil es schön aussieht. :mrgreen: )
Ich bin immer wieder, wenn ich mit Word arbeiten muss erstaunt wie sehr es suckt. Nicht nur bei Formeln, sondern auch bei Dingen, die eigentlich Words Kernkompetenz sein sollten.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Ich kann mich nicht entscheiden.
Im Optimalfall würde new einen resource_ptr zurückgeben, aber so weit sind wir mit C++ wohl dann doch noch nicht.
(In 100 Jahren könnte man zumindest new für Ressourcen protected machen und eine variadic perfect-forwarding Ressourcenerzeugungsfunktion bereitstellen.)
(Wenn Microsoft mit Windows 29 nicht noch vor vollendeter C++11-Implementierung endgültig auf Wolkendiagramme umsattelt.)
Code: Alles auswählen
// Variante 1 (Aktuell)
resource_ptr<SomeResource> someResource = bind_resource( new SomeResource(...) ); // OK
resource_ptr<SomeResource> someResource = new SomeResource(...); // Ressourcen-Leck
// Keine _ungewöhnlichen_ Vorkehrungen für ausnahmesichere in-place Konstruktion
resourceMonster( dangerous stuff ..., bind_resource( new SomeResource(...) ).get(), ... dangerous stuff );
Code: Alles auswählen
// Variante 2
resource_ptr<SomeResource> someResource = new SomeResource(...); // OK
resource_ptr<SomeResource> someResource = bind_resource( new SomeResource(...) ); // Falsch, denn ...
resource_ptr<SomeResource> someResourceRef2 = someResource; // ... zerstört SomeResource mit someResourceRef2, crasht mit Zerstörung von someResource
// Zusätzliche Vorkehrungen für ausnahmesichere in-place Konstruktion
resourceMonster( dangerous stuff ..., secure_resource( new SomeResource(...) ).get(), ... dangerous stuff );
Code: Alles auswählen
// (Variante 3: Lieber nicht, weil inkonsistent)
resource_ptr<SomeResource> someResource = new SomeResource(...); // OK
resource_ptr<SomeResource> someResource = bind_resource( new SomeResource(...) ); // OK
// Zusätzliche Vorkehrungen für ausnahmesichere in-place Konstruktion
resourceMonster( dangerous stuff ..., secure_resource( new SomeResource(...) ).get(), ... dangerous stuff );
resourceMonster( dangerous stuff ..., bind_resource( new SomeResource(...) ).get(), ... dangerous stuff ); // Auch möglich
(In 100 Jahren könnte man zumindest new für Ressourcen protected machen und eine variadic perfect-forwarding Ressourcenerzeugungsfunktion bereitstellen.)
(Wenn Microsoft mit Windows 29 nicht noch vor vollendeter C++11-Implementierung endgültig auf Wolkendiagramme umsattelt.)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
Meiner Meinung nach Variante 1. Das ergibt die Analogie resource_ptr = shared_ptr, bind_resource = make_shared und halt get in beiden Fällen.
Wer make_shared nicht benutzt ist eben auch selber schuld ;)
Wer make_shared nicht benutzt ist eben auch selber schuld ;)
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Inzwischen tendiere ich auch dazu, einfach eine entsprechende Template-Wrapper-Funktion zur Ressourcenerzeugung als Alternative zu bind_resource . new anzubieten. Am expliziten bind_resource stört mich im Moment vor allem, dass sich die Ressourcenallokation durch die zusätzliche Binde-Umklammerung im Quelltext furchtbar sperrig gestaltet.
Schade ist, dass mit der variadischen Wrapper-Funktion bei der Ressourcenerzeugung die bisweilen sehr vielzähligen Parameternamen im IntelliSense verloren gehen.
Schade ist, dass mit der variadischen Wrapper-Funktion bei der Ressourcenerzeugung die bisweilen sehr vielzähligen Parameternamen im IntelliSense verloren gehen.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Zustände
nicht mehr Bäumen gleich; nein
Zustandswälder
so dunkel, dass man sie nur Schritt für Schritt erkunden kann
wo ferne Wirkungen aus allen Richtungen schnattern und grunzen
und die Schwärze nur vom Kreischen der Allokatoren zerrissen wird
schmierige Getter und Setter umschmiegen meine Füße
während sie im Patternsumpf versinken
wenn man mich fragte, woran ich arbeite … ich wüsste es nicht mehr
ich will aufwachen
aber es geht nicht
es geht einfach nicht mehr
der Wahnsinn hat meinen Kopf mit seinen knochigen Fingern fest umschlungen
ich beginne zu erkennen
nicht mehr Bäumen gleich; nein
Zustandswälder
so dunkel, dass man sie nur Schritt für Schritt erkunden kann
wo ferne Wirkungen aus allen Richtungen schnattern und grunzen
und die Schwärze nur vom Kreischen der Allokatoren zerrissen wird
schmierige Getter und Setter umschmiegen meine Füße
während sie im Patternsumpf versinken
wenn man mich fragte, woran ich arbeite … ich wüsste es nicht mehr
ich will aufwachen
aber es geht nicht
es geht einfach nicht mehr
der Wahnsinn hat meinen Kopf mit seinen knochigen Fingern fest umschlungen
ich beginne zu erkennen
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Code: Alles auswählen
#define LEAN_NEW_RESOURCE_FUNCTION_TPARAMS \
class Resource
#define LEAN_NEW_RESOURCE_FUNCTION_DECL \
inline resource_ptr<Resource, true> new_resource
#define LEAN_NEW_RESOURCE_FUNCTION_BODY(call) \
{ return resource_ptr<Resource, true>( new Resource##call, resource_ptr<Resource, true>::bind_reference ); }
// Defines: template<class Resource> inline resource_ptr<Resource, true> new_resource(...)
LEAN_VARIADIC_PERFECT_FORWARDING_T(LEAN_NEW_RESOURCE_FUNCTION_DECL, LEAN_NEW_RESOURCE_FUNCTION_TPARAMS, LEAN_NOTHING, LEAN_NEW_RESOURCE_FUNCTION_BODY)
Code: Alles auswählen
new_resource<ResourceType>(arg1, arg2, ...)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Dieser ganze C++-Text-Include-Schlamassel ärgert mich inzwischen so sehr, dass ich ernsthaft darüber nachdenke, einen Precompiler zu schreiben, der mir nur noch die Größe privater, vollständig opaker (vorwärtsdeklarierter) verschachtelter Member-Strukturen (entsprechend deren Definition in den Übersetzungsheiten) automatisch in den zugehörigen Headers aktualisiert, und mich so endgültig von gigantischen, für den Nutzer des jeweiligen Moduls vollkommen irrelevanten Abhängigkeitsketten befreit. Das ganze sähe etwa so aus:
Sollte die im Header angegebene Größe nicht mit der tatsächlichen Größe von Members übereinstimmen, so kann der jeweilige C++-Compiler dazu gebracht werden, eine entsprechende Fehlermeldung auszugeben, die die tatsächliche Größe für eine automatische Korrektur enthält.
Die Vorteile liegen auf der Hand:
Code: Alles auswählen
// Header
class SomeModule : public nonassignable
{
public:
struct Members;
SomeModule(...);
SomeModule(const SomeModule&);
~SomeModule();
// ... Public interface ...
void someMethod();
private:
forward_val<Members, 24> m;
};
// Compilation Unit
struct SomeModule::Members
{
// ... Private members' definitions ...
};
SomeModule::SomeModule(args ...)
: m(args ...)
{
}
SomeModule::SomeModule(const SomeModule &right)
: m(right.m)
{
}
SomeModule::~SomeModule()
{
}
void somePrivateMethod(SomeModule::Members &m)
{
m->someValue = doSthPrivate();
}
void SomeModule::someMethod()
{
somePrivateMethod(m);
m->someOtherValue = doSth();
}
Die Vorteile liegen auf der Hand:
- Die Headers enthalten bis auf die automatisch aktualisierte (und selten veränderte) Größe nur die öffentliche Schnittstelle.
(Im Rahmen der Speicherverwaltung ist die Größe eigentlich auch Teil der öffentlichen Schnittstelle, das Problem ist, dass die genaue Größe in C++ in so vielen Fällen nicht spezifiziert ist, was eine automatische (Compiler-abhängige!) Aktualisierung zwingend notwendig macht.)
- Keine privaten Abhängigkeiten, die unkontrollierbar in Nutzermodule hineingeschleppt werden.
- Keine Speicherindirektion/-fragmentierung.
- Private Methoden können nach Belieben in Form von freien Funktionen hinzugefügt werden.
(Inzwischen bin ich mir sogar sicher, dass freie Funktionen immer ausreichend und klarer sind.)
- Einheitlicher Zugriff auf Members in privaten und öffentlichen Methoden, ohne dass öffentliche Methoden mit der Weiterleitung entsprechender Aufrufe in PImpl-Methoden für noch mehr Redundanz sorgen.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
Mach ich mit meinem UML-Tool.
Habe dort den Code-Generator selbst gebaut und brauche mich seitdem nicht mehr darum kümmern, welche Header hinzukommen, welche Pfade die haben, auch System-Header.
Und wenn ich Klassen von einem Paket in ein anderes transferiere störts auch keinen.
Ohne diese Möglichkeit würde ich kein großes Projekt mehr machen.
Habe dort den Code-Generator selbst gebaut und brauche mich seitdem nicht mehr darum kümmern, welche Header hinzukommen, welche Pfade die haben, auch System-Header.
Und wenn ich Klassen von einem Paket in ein anderes transferiere störts auch keinen.
Ohne diese Möglichkeit würde ich kein großes Projekt mehr machen.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Hm, das liest sich etwas missverständlich. Hast du a) eine Header-Verwaltung oder b) einen Code-Generator für das beschriebene in-place PImpl-Muster gebaut? Mein Problem ist nämlich nicht, Abhängigkeiten zu verwalten, sondern Abhängigkeiten grundsätzlich zu vermeiden.
Zuletzt geändert von CodingCat am 12.01.2012, 14:17, insgesamt 1-mal geändert.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
Ich weiß zwar nicht, was daran missverständlich ist.
Ich benutze ein UML-Tool.
Ich habe dafür einen Code-Generator geschrieben, der mir aus dem UML-Modell den Code generiert, was der Name Code-Generator ja eigentlich schon sagt.
Und der Code-Generator ist intelligent genug um die im Model hinterlegten Informationen auszuwerten und dann die Listen der Include-Anweisungen so zu organisieren, das es
1. immer passt.
2. Es mir egal ist wie komplex die Abhängigkeiten sind.
Das UML-Tool dient ja der Beschreibung des Systems. Es hilft daher auch bei der Identifizierung von zu komplex geratenen Modulen und was weiß ich nicht noch allem. Man dokumentiert damit eben was das System macht.
Nur lässt sich die Komplexität ja nicht reduzieren, wenn das System eben komplex ist.
Mir isses halt wurscht wie komplex das System ist, das ich kreiere. Mein Code-Generator erzeugt die Quellen/Header-Files und eben auch die Include statements. Ich muss mich also nicht über die Komplexität ärgern und kann mich der eigentlichen Aufgabe widmen.
That's all.
Ich benutze ein UML-Tool.
Ich habe dafür einen Code-Generator geschrieben, der mir aus dem UML-Modell den Code generiert, was der Name Code-Generator ja eigentlich schon sagt.
Und der Code-Generator ist intelligent genug um die im Model hinterlegten Informationen auszuwerten und dann die Listen der Include-Anweisungen so zu organisieren, das es
1. immer passt.
2. Es mir egal ist wie komplex die Abhängigkeiten sind.
Das UML-Tool dient ja der Beschreibung des Systems. Es hilft daher auch bei der Identifizierung von zu komplex geratenen Modulen und was weiß ich nicht noch allem. Man dokumentiert damit eben was das System macht.
Nur lässt sich die Komplexität ja nicht reduzieren, wenn das System eben komplex ist.
Mir isses halt wurscht wie komplex das System ist, das ich kreiere. Mein Code-Generator erzeugt die Quellen/Header-Files und eben auch die Include statements. Ich muss mich also nicht über die Komplexität ärgern und kann mich der eigentlichen Aufgabe widmen.
That's all.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Eben, deshalb war es missverständlich. Du antwortest "Mach ich mit meinem UML-Tool." und beschreibst dann genau das Gegenteil von dem, was ich anstrebe. ;)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
Ich bin offensichtlich senil. :(
Das passiert mir schon das zweite Mal. Muss mal tief in mich gehen und mal meinen Geisteszustand überprüfen.
Das passiert mir schon das zweite Mal. Muss mal tief in mich gehen und mal meinen Geisteszustand überprüfen.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Nein, wir haben uns nur missverstanden. Das ist ja gerade das Großartige am Web 2.0, dass sich Missverständnisse durch Interaktion klären lassen.
That's all. ;)
That's all. ;)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
OK.
Zweiter Ansatz
Nach aussen ist nur die Interface Klasse bekannt. Damit kann die spezielle implementierung beliebig komplex sein. Die Methoden im Interface sind abstract und damit braucht man auch keine Wrapper oder ähnliches. Inlines kann man wenn nötig ins interface packen.
Zweiter Ansatz
Code: Alles auswählen
class CInterface {
};
class CSpeziell : public CInterface {
};
CInterface * CreateSpeziell() {
return (new CSpeziell);
}
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Ja, das ist ja der klassische Ansatz. Ich mag ihn aus drei Gründen nicht: Nur dynamische Allokation auf einem festgeschriebenen Heap, somit weder automatische Lebensdauer noch Speicherlokalität (betrifft Stack-Allokation und Komposition). Jeder Aufruf über die öffentliche Schnittstelle ist ein virtueller Aufruf, emittiert also überflüssigen Code und schränkt die Möglichkeiten der Optimierung durch den Compiler ein. Sinnvolle Vererbungshierarchien werden unmöglich (betrifft im Optimalfall nur einen Bruchteil aller Klassen).
Das, was meinem oben beschriebenen Ansatz am nächsten kommt, ist das Standard-PImpl-Muster. Dieses lässt sich problemlos soweit anpassen, dass es abgesehen von der Speicherlokalität alle im Eingangspost genannten Anforderungen und Muster erfüllt.
Das, was meinem oben beschriebenen Ansatz am nächsten kommt, ist das Standard-PImpl-Muster. Dieses lässt sich problemlos soweit anpassen, dass es abgesehen von der Speicherlokalität alle im Eingangspost genannten Anforderungen und Muster erfüllt.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- Schrompf
- Moderator
- Beiträge: 5048
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Jammer-Thread
Bestimme die notwendige Bitbreite eines Integers, wenn Du Minimal- und Maximalwert gegeben hast. Das ist eine permanente Gratwanderung, man steht immer mit einem Bein im Overflow. Und log() und Konsorten verbieten sich eh, weil auch die Genauigkeit eines doubles nicht den Bereich eines 64bit-Integers abdeckt.
Nuja, man soll sich nicht beschweren. Ich hab wieder einiges über Fallstricke der Computermathematik gelernt.
Nuja, man soll sich nicht beschweren. Ich hab wieder einiges über Fallstricke der Computermathematik gelernt.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Lynxeye
- Establishment
- Beiträge: 145
- Registriert: 27.02.2009, 16:50
- Echter Name: Lucas
- Wohnort: Hildesheim
- Kontaktdaten:
Re: Jammer-Thread
Code: Alles auswählen
63 - __builtin_clz(max | 1)
- Schrompf
- Moderator
- Beiträge: 5048
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Jammer-Thread
Jaja, lasst mich doch in Ruhe... :-) Hier heißt es halt jetzt:
Gleich der nächste Spaß. Das schreibt sich das werte Konsortium auf die Flaggen, gut für große Datenmengen geeignet zu sein. Immerhin seien ja schon Punktwolken von 10GB Größe aufgetreten! Oho! Schön, dass sie dann ihr Binärformat so kleinteilig auslegen, dass man zwei drei ineinandergestapelte Stream-Klassen braucht, um mal plain Daten rauslesen zu können. Es gibt pro File einen Header, in dem die Filepos des XML-Teils drinsteht. Natürlich am Ende des Files. Also der erste Hüpfer. Dann unterbrechen sie die Daten alle 1020 Byte für eine 4Byte-CRC. Man kann den Platten heutzutage ja auch nicht trauen! Auftritt erste Stream-Klasse. Wir parsen den XML-Teil und bekommen pro Scan oder Bild einen Verweis auf eine Binary Section. Sprung zurück an den Anfang des Files. Wer jetzt aber schon Daten erwartet, denkt zu einfach. Wir machen einen Header pro Binary Section auf. Dort drin verweisen wir auf ein Root Level Index Package, dass mehrere Chunks verwaltet und auf Sub Level Index Packages verweist, worin dann File Offsets von Data Packages stehen, in denen die Daten enthalten sind, aber nie mehr als 64kb auf einmal. Und alle Packages dürfen in beliebiger Reihenfolge auftreten.
Wer auch immer 10GB Daten verwalten will, erbricht an dieser Stelle herzlich auf den Boden und schreibt sein eigenes Format. Dagegen nimmt sich dieses ganze "Meta-Sprache mit XML bauen"-Gedöns mit seinen Typdefinitionen und Indirektionen wie ein erlässliches Übel aus - ist ja auch heutzutage üblich geworden. Niemand speichert mehr seine Daten direkt in XML-Strukturen, wenn er was auf sich hält. Das ganze Format stinkt nach einem Konsortium "jung-gebliebener" 50jähriger Ingenieure ohne Hobby.
Code: Alles auswählen
size_t exponent = 0;
while( (1ull << exponent) <= diff )
++exponent;
Wer auch immer 10GB Daten verwalten will, erbricht an dieser Stelle herzlich auf den Boden und schreibt sein eigenes Format. Dagegen nimmt sich dieses ganze "Meta-Sprache mit XML bauen"-Gedöns mit seinen Typdefinitionen und Indirektionen wie ein erlässliches Übel aus - ist ja auch heutzutage üblich geworden. Niemand speichert mehr seine Daten direkt in XML-Strukturen, wenn er was auf sich hält. Das ganze Format stinkt nach einem Konsortium "jung-gebliebener" 50jähriger Ingenieure ohne Hobby.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- kimmi
- Moderator
- Beiträge: 1405
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: Jammer-Thread
Was ist eigentlich aus den schönen bBinärformaten geworden .... . Beziehen sich die Größen eigentlich auf die Filegrößen oder auf die tatsächliche Anzahl vorhandener Punkte? Mehr als 1000 braucht man da wohl kaum, um 10 GB groß zu werden :).
Gruß Kimmi
Gruß Kimmi
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
1>------ Build started: Project: XXX, Configuration: Debug x64 ------
1>XXX.vcxproj : error MSB4014: The build stopped unexpectedly because of an internal failure.
1>XXX.vcxproj : error MSB4014: Microsoft.Build.Exceptions.BuildAbortedException: Build was canceled. MSBuild.exe could not be launched as a child node as it could not be found at the location "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe". If necessary, specify the correct location in the BuildParameters, or with the MSBUILD_EXE_PATH environment variable.
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.BackEnd.NodeManager.AttemptCreateNode(INodeProvider nodeProvider, NodeConfiguration nodeConfiguration)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.BackEnd.NodeManager.CreateNode(NodeConfiguration configuration, NodeAffinity nodeAffinity)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.Execution.BuildManager.PerformSchedulingActions(IEnumerable`1 responses)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.Execution.BuildManager.HandleNewRequest(Int32 node, BuildRequestBlocker blocker)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.Execution.BuildManager.IssueRequestToScheduler(BuildSubmission submission, Boolean allowMainThreadBuild, BuildRequestBlocker blocker)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Was ist das für eine Welt, in der mein Compiler nicht mehr funktioniert, wenn ich nach Windows-Updates nicht neustarten will
————
Ich will einfach nur fähige statische Analyse.
————
Und jedes Mal, wenn ich das Katzenjammern über öffentliche Schnittstellen lese, wünsche ich, ich hätte Zeit, weiter an meiner Programmiersprache zu werkeln. Aber andererseits ist das eh alles für’n Arsch bevor ich ausreichend Programmiererfahrung habe.
We're counting the stars; we're counting the stars; we're not very far …
1>XXX.vcxproj : error MSB4014: The build stopped unexpectedly because of an internal failure.
1>XXX.vcxproj : error MSB4014: Microsoft.Build.Exceptions.BuildAbortedException: Build was canceled. MSBuild.exe could not be launched as a child node as it could not be found at the location "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe". If necessary, specify the correct location in the BuildParameters, or with the MSBUILD_EXE_PATH environment variable.
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.BackEnd.NodeManager.AttemptCreateNode(INodeProvider nodeProvider, NodeConfiguration nodeConfiguration)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.BackEnd.NodeManager.CreateNode(NodeConfiguration configuration, NodeAffinity nodeAffinity)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.Execution.BuildManager.PerformSchedulingActions(IEnumerable`1 responses)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.Execution.BuildManager.HandleNewRequest(Int32 node, BuildRequestBlocker blocker)
1>XXX.vcxproj : error MSB4014: at Microsoft.Build.Execution.BuildManager.IssueRequestToScheduler(BuildSubmission submission, Boolean allowMainThreadBuild, BuildRequestBlocker blocker)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Was ist das für eine Welt, in der mein Compiler nicht mehr funktioniert, wenn ich nach Windows-Updates nicht neustarten will
————
Hach; als ich das vor ein paar Jahren mal gemacht habe, hat es mich auch angekotzt. Allein, wie der Wertebereich nach der Division von [10, 12] durch [2, 3] aufgefächert ist, ließ sich kaum noch lesbar in Templates beziffern. Dazu kam, dass viele for-Schleifenzähler einen Zombie-State brauchten, um festzustellen, wann sie abzubrechen haben.Schrompf hat geschrieben:Bestimme die notwendige Bitbreite eines Integers, wenn Du Minimal- und Maximalwert gegeben hast. Das ist eine permanente Gratwanderung, man steht immer mit einem Bein im Overflow. Und log() und Konsorten verbieten sich eh, weil auch die Genauigkeit eines doubles nicht den Bereich eines 64bit-Integers abdeckt.
Ich will einfach nur fähige statische Analyse.
————
Und jedes Mal, wenn ich das Katzenjammern über öffentliche Schnittstellen lese, wünsche ich, ich hätte Zeit, weiter an meiner Programmiersprache zu werkeln. Aber andererseits ist das eh alles für’n Arsch bevor ich ausreichend Programmiererfahrung habe.
We're counting the stars; we're counting the stars; we're not very far …
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Undo-Stacks sind aus Sicht der automatisieren Ressourcenverwaltung eine Katastrophe. Da sie in der Regel vor allem anderen konstruiert werden, verschwinden sie auch als letztes. Tatsächlich werden sie jedoch erst nach Erzeugung der übrigen Ressourcen mit massig Referenzen auf dieselben gefüllt, welche am Ende gefälligst alle noch vor den Ressourcen zu verschwinden haben.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Zurück in Qt. Die Model-View-Architektur für Hierarchien ist wirklich gotterbärmlich. Man könnte meinen, bei Qt/Nokia brüteten alleine 3 Mitarbeiter den ganzen Tag darüber, wie sie die Inkonsistenz durch gezielte Vergrößerung des Zustandsraumes weiter maximiert bekämen.
Konkret: Jedes Modell muss eine parent()-Methode überschreiben, die nur anhand des gegebenen Kindindex den Elternindex richtig erraten muss. Ist ja nicht so, dass diese Information überall implizit gespeichert wäre. Jetzt soll ich ernsthaft ein weiteres "View-"Parallelmodell aufbauen und aktuell halten, nur weil die Säcke zu faul waren, das Elternelement aus ihren eigenen versumpften Zustandsuniversen herauszufischen?
Konkret: Jedes Modell muss eine parent()-Methode überschreiben, die nur anhand des gegebenen Kindindex den Elternindex richtig erraten muss. Ist ja nicht so, dass diese Information überall implizit gespeichert wäre. Jetzt soll ich ernsthaft ein weiteres "View-"Parallelmodell aufbauen und aktuell halten, nur weil die Säcke zu faul waren, das Elternelement aus ihren eigenen versumpften Zustandsuniversen herauszufischen?
You Pinstripe barbarians, I’ll sue the council for every penny it's got! I’ll have you hung and drawn and quartered…a - and whipped and boiled… and then I’ll chop you up to little bits! Until… until... until you’ve had enough! And Then I’ll do it some more. And when I’ve finished I’ll take all the little bits and I’ll… I’ll - I’ll jump on them! And I’ll carry on jumping on them until I get blisters... or I can think of something even more unpleasant to do and then I’ll ...
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Use a map!
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
mpeterson hat geschrieben:first at all it is an academic paper... what we have seen is that it was never ever able
to produce high quality trees for 1mio polygons in 10ms. it was more in the range
of 100ms. and that is not that bad.
Akademische Paper enthalten nie Fehler und morgen ist Ostern.dbz hat geschrieben:I guess you are right. If it sounds too good to be true it probably is too good to be true. It would also explain why NVIDIA never released the "Simpler and Faster HLBVH with work queues" code or the earlier hlbvh code.
So far for the reproducibility of academic work ... Kindoff strange NVIDIA published this in the first place.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Noch nicht genug Compiler-Bugs? Bitte sehr! :evil:
(Tritt auf, sobald zwei verschiedene Spezialisierungen von fun instanziiert werden.)
(Ja, instanziiert!)
(Ja, mit Zeigern geht es.)
Code: Alles auswählen
int& some_global_int()
{
static int num;
return num;
}
template <class Type>
int fun(int &i = some_global_int()) { return 6; }
template <>
int fun<int>(int &i) { return 2; }
template <>
int fun<float>(int &i) { return 3; }
int main()
{
fun<int>();
fun<float>(); // error C2440: 'default argument' : cannot convert from 'int *' to 'int &'
}
(Ja, instanziiert!)
(Ja, mit Zeigern geht es.)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Schonmal zwei unterschiedliche cpp-Dateien gleichen Namens in einem Visual C++-Projekt gehabt?
Re: Jammer-Thread
Nein. Da ich gerade zu faul zum Testen bin, meine Hypothese:Kristhy hat geschrieben:Schonmal zwei unterschiedliche cpp-Dateien gleichen Namens in einem Visual C++-Projekt gehabt?
Ich rege mich gerade über etwas auf, was meiner Meinung nach eine der schlechtesten Ideen der letzten 10 Jahre war. thumbs.db-Dateien. Nachdem nunmehr die letzte Windows-XP-Maschine hier abgeschafft wurde, habe ich in einer Reinigungsaktion alle diese Dateien entfernt. Sogar auf einer Treiber-CD habe ich welche gefunden! Und das NVIDIA Graphics SDK installiert auch gleich zwei mit!
Jetzt darf ich meine Datenträger nie wieder an ein Windows-XP-System anschließen. Ist ja wie eine Infektion.
Zuletzt geändert von eXile am 15.01.2012, 19:39, insgesamt 2-mal geändert.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Ja, jedes Mal wieder ein Erlebnis. In den meisten Fällen hilft es, in den Property Pages unter C/C++ / Output Files die Eigenschaften ASM List Location, Object File Name und XML Documentation File Name auf $(IntDir)%(RelativeDir) umzustellen. :-/Krishty hat geschrieben:Schonmal zwei unterschiedliche cpp-Dateien gleichen Namens in einem Visual C++-Projekt gehabt?
Und nein, das Problem ist wohl nicht MS Build, sondern einfach die verfehlte Standardkonfiguration. (Richtig solide, so dass es für ALLE Projekte funktioniert, kriegt man es meines Wissens gar nicht, weil %(RelativeDir), wie der Name schon sagt, auch absolute Pfade annehmen kann.)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite