Jammer-Thread
- Chromanoid
- Moderator
- Beiträge: 4275
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Jammer-Thread
Ich weiß ich krieg gleich wieder auf die Mütze, aber mich würde wirklich mal interessieren, was C++ Freunde mal abgesehen von Java als Abhängigkeit und Groovy als Sprache von Gradle halten. Für Java läuft das Buildsystem schon echt gut und ich benutze es recht gerne. Vielleicht hat ja jemand mal Lust das ganze mit seinem Projekt auszuprobieren: http://www.gradle.org/docs/current/user ... aries.html
BTW das Gradle für C++ ist noch nicht produktionsreif, aber der generelle Gradle Ansatz gefällt mir. Vielleicht hat ja der ein oder andere Spaß dran, das ganze mal auszuprobieren.
BTW das Gradle für C++ ist noch nicht produktionsreif, aber der generelle Gradle Ansatz gefällt mir. Vielleicht hat ja der ein oder andere Spaß dran, das ganze mal auszuprobieren.
- RustySpoon
- Establishment
- Beiträge: 298
- Registriert: 17.03.2009, 13:59
- Wohnort: Dresden
Re: Jammer-Thread
Ich benutze eigentlich für so ziemlich alles ganz gern Rake. Hat so weit ich das beurteilen kann einen ähnlichen Ansatz wie Gradle (regelbasiert, mächtige Hostsprache) ist aber komplett domänen-agnostisch. Damit hab ich unter anderem auch meine Diplomarbeit gebaut.
- xq
- Establishment
- Beiträge: 1590
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: Jammer-Thread
Zurück zum Jammern: Ich versuche seit gestern Abend ein Arch-Linux auf meinem Rechner zu installieren, scheitere aber irgendwie daran, dass der Bootloader rumspackt weil dämlicher Raid-Controller und Linux sich irgendwie beißen ...
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Das Inlining von Visual C++ ist soooooo lächerlich. Ich habe in meinen String-Funktionen eine Indirektion hinzugefügt (A() ruft B() ruft C() statt A() ruft C()). Durch Inlining ist der Maschinentext exakt identisch. AUßER, dass nun eine Mathe-Funktion, die fünf Module weiter liegt und deren Aufrufer nicht im Entferntesten mit Strings hantieren, nun nicht mehr geinlinet wird. WTF?!
Haben die da eine Reserve an Inline-Aufrufen, und wenn die überschritten ist, wird nicht mehr geinlinet?!
Haben die da eine Reserve an Inline-Aufrufen, und wenn die überschritten ist, wird nicht mehr geinlinet?!
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Be careful when using std::string
Damit muss selbst Chrome ein gigantisches Fraktal von miserabelster Software sein. Und die Kommentare im Thread nehmen einem jeden Glauben an Softwareentwicklung. :-/
25.000 Allokation für Eingabe eines Buchstabens in Chromes Adresszeile. Unvorstellbar wie die zustandekommen, selbst wenn überall Strings kopiert werden.TL;DR: std::string is responsible for almost half of all allocations in the Chrome browser process; please be careful how you use it!
In the course of optimizing SyzyASan performance, the Syzygy team discovered that nearly 25000 (!!) allocations are made for every keystroke in the Omnibox. We've since built some rudimentary memory profiling tools and have found a few issues: [...]
Damit muss selbst Chrome ein gigantisches Fraktal von miserabelster Software sein. Und die Kommentare im Thread nehmen einem jeden Glauben an Softwareentwicklung. :-/
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
Ach, ihr mit euren überhöhten Ansprüchen. Seid doch froh, dass Chrome nicht in Java oder C# geschrieben ist!
Das erste kommerzielle Projekt, dem ich mich annehmen musste, führte übrigens eine sechsstellige Zahl Allokationen pro Mausbewegung durch. Irgendwie muss man doch rechtfertigen, den Kunden eine neue CPU kaufen zu lassen! Außerdem sind das alles Mikrooptimierungen, die sich nicht auszahlen. Darum war es auch nur um den Faktor 50 schneller, als ich fertig war.
Das erste kommerzielle Projekt, dem ich mich annehmen musste, führte übrigens eine sechsstellige Zahl Allokationen pro Mausbewegung durch. Irgendwie muss man doch rechtfertigen, den Kunden eine neue CPU kaufen zu lassen! Außerdem sind das alles Mikrooptimierungen, die sich nicht auszahlen. Darum war es auch nur um den Faktor 50 schneller, als ich fertig war.
- Schrompf
- Moderator
- Beiträge: 5077
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Jammer-Thread
Naja, Chrome hat da die Ausrede, dass es ein Rudel Datenbankanfragen stellen dürfte, wenn der Nutzer was in der Adressleiste eingibt. Aber gerade die sollten doch deutlich besser optimiert sein.
Allgemein sind das schon gute Gründe zum Jammern, finde ich.
Allgemein sind das schon gute Gründe zum Jammern, finde ich.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Entschuldige; bei mir fehlte das Sarkasmus-Tag. Natürlich ist das für mich, der jede Allokation aus inneren Schleifen rauslutscht, eine einzige Katastrophe.
Re: Jammer-Thread
seit kurzem hab ich schwierigkeiten mit dem zfx board. wenn ich was posten will, flieg ich raus :( ... zur sicherheit kopiere ich inzwischen meine beiträge. (4ter versuch)
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
- xq
- Establishment
- Beiträge: 1590
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: Jammer-Thread
Bei mir hat es die ganzen Tage nichtmal ordentlich geladen (aber das war auch mit anderen Sites so)
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
Re: Jammer-Thread
AAh, ich dachte das wär nur bei mir so, ich benutz nämlich Opera :-)
Ja, der schmeißt einen irgendwie immer zwischendurch raus, ich hab Glück wenn ich mal auf "Vorschau" drücken kann ohne dass ich ausgeloggt werde. Ist aber bei mir schon länger so.
Das Laden der Seite (zfx.info) dauert bei mir auch voll lange, entweder der DNS call oder die Domain-Weiterleitung dauern ewig.
Direkt über die IP gehts nicht so leicht, das scheint der Admin verhindern zu wollen 8-)
Ja, der schmeißt einen irgendwie immer zwischendurch raus, ich hab Glück wenn ich mal auf "Vorschau" drücken kann ohne dass ich ausgeloggt werde. Ist aber bei mir schon länger so.
Das Laden der Seite (zfx.info) dauert bei mir auch voll lange, entweder der DNS call oder die Domain-Weiterleitung dauern ewig.
Direkt über die IP gehts nicht so leicht, das scheint der Admin verhindern zu wollen 8-)
Re: Jammer-Thread
Ich habe einen Game of Thrones "Welches Haus bist du?" Psychotest gemacht, und raus kam Haus Bolten. DAFUQ??
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Also ich lese hier immer stündlich mit und habe weder mit Timeouts, noch mit 404s, nicht einmal mit Log-Outs zu kämpfen.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Ich habe es mit Mikroallokationen derart übertrieben, dass der 32-Bit-Page-Heap nicht mehr ausreicht. Ausgerechnet ich.
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: Jammer-Thread
Code: Alles auswählen
#include <memory>
int main() { }
Jetzt ratet mal wo std::shared_ptr wohnt.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Sorgen des Durchschnittsprogrammierers
Eigenes Framework, eigene CRT, eigene Windows-Header ftw!
1.2 s Kompilierzeit für ein komplettes Spiel, und der einzige fremde Header, der inkludiert wird, ist <stdarg.h> weil ich zu faul für eigenes va_list war :P
Eigenes Framework, eigene CRT, eigene Windows-Header ftw!
1.2 s Kompilierzeit für ein komplettes Spiel, und der einzige fremde Header, der inkludiert wird, ist <stdarg.h> weil ich zu faul für eigenes va_list war :P
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: Jammer-Thread
Die Windows-Header hab ich bei uns jetzt auch größtenteils rausgeworfen und die 2-3 Funktionen einfach selbst deklariert.
Ich bin doch nicht bereit 140k LOC zu includen für die zwei C Funktionen die ich brauche.
Gestern habe ich das mal im größeren Stil profiled und es scheint kaum einen Standard-Header zu geben, der nicht mindestens 50k reinzieht. <ostream>, <vector>, <map>, <string>, alle haben sie tierisch große Abhängigkeiten.
Und ich bin auch nicht sicher ob Precompiled Header da wirklich ne Lösung sind :(
Ich bin doch nicht bereit 140k LOC zu includen für die zwei C Funktionen die ich brauche.
Gestern habe ich das mal im größeren Stil profiled und es scheint kaum einen Standard-Header zu geben, der nicht mindestens 50k reinzieht. <ostream>, <vector>, <map>, <string>, alle haben sie tierisch große Abhängigkeiten.
Und ich bin auch nicht sicher ob Precompiled Header da wirklich ne Lösung sind :(
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Nur ein Übersetzungsmodul pro Projekt, das die einzelnen Implementierungen #includet, geht auch. Dann hat man die 140k Zeilen nur noch einmal zu viel.
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: Jammer-Thread
Leider sind wir mittlerweile selbst bei trivialen Dateien bei ca. 16 sec bis die Binary fertig ist (ca. 10 sec compiling und 6 sec linking). Irgendwann macht das keinen Spaß mehr.
-
- Establishment
- Beiträge: 426
- Registriert: 23.01.2013, 15:55
Re: Jammer-Thread
Die Probleme kenne ich nur zu gut. :roll:
"std::shared_ptr" darf für mich zwar ruhig schwer zu erreichen sein( :P ), aber ich kenne das Problem nur mit genug Dingen zu gut.
Bei mir trägt es damit auch im erheblichen Maße dazu bei, dass ich eigentlich empfehlenswerte Funktionen kaum einsetze. Bevor ich überhaupt nur einen Gedanken daran zu verschwende nach oben zu scrollen, eine Abhängigkeit mit 60k LoC hinzuzufügen, nur dass ich dann "std::move" oder "std::find_if" schreiben darf.
Wenn ich einen Wunsch in C++ frei hätte... ein neues Buildsystem ohne Includes.
Tipp-Zeit, Nerven und Compile-Zeit sparen.
"std::shared_ptr" darf für mich zwar ruhig schwer zu erreichen sein( :P ), aber ich kenne das Problem nur mit genug Dingen zu gut.
Bei mir trägt es damit auch im erheblichen Maße dazu bei, dass ich eigentlich empfehlenswerte Funktionen kaum einsetze. Bevor ich überhaupt nur einen Gedanken daran zu verschwende nach oben zu scrollen, eine Abhängigkeit mit 60k LoC hinzuzufügen, nur dass ich dann "std::move" oder "std::find_if" schreiben darf.
Wenn ich einen Wunsch in C++ frei hätte... ein neues Buildsystem ohne Includes.
Tipp-Zeit, Nerven und Compile-Zeit sparen.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Ist das Modulsystem nicht endlich standardisiert worden? GCC und Clang können es doch AFAIK schon.
-
- Establishment
- Beiträge: 426
- Registriert: 23.01.2013, 15:55
Re: Jammer-Thread
Also mir wäre neu, dass GCC da schon etwas kann.
Es gibt wohl einen Vorschlagzu Module, bis jetzt gibt es im Standard aber nichts. Momentan wohl auch nicht in der Arbeitsversion von C++17.
Ich hoffe nur es kommt wenigstens in C++17. Bis dahin ist noch viel zu lange und soweit ich weiß gab es die Idee schon vor C++11 Zeiten, aber bis jetzt ist nichts daraus geworden.
Es gibt wohl einen Vorschlagzu Module, bis jetzt gibt es im Standard aber nichts. Momentan wohl auch nicht in der Arbeitsversion von C++17.
Ich hoffe nur es kommt wenigstens in C++17. Bis dahin ist noch viel zu lange und soweit ich weiß gab es die Idee schon vor C++11 Zeiten, aber bis jetzt ist nichts daraus geworden.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Stimmt; es war nur Clang. Offenbar kommt es nicht in C++17, sondern ist in einen eigenen TR ausgelagert worden.
Sieh es mal so: Mit einem Übersetzungsmodul für ein ganzes Projekt musst du nicht mehr alles doppelt tippen, und wenn Module kommen, verteilst du halt alles in eigene Module.
Übrigens ist das C-Linksystem ein Hammer. Wer auf Methoden und Subklassen verzichten kann, wird damit schon heute glücklich. Einfach struct vor die fremde Datenstruktur und man braucht keine Header mehr. Davon kann C++ nur träumen.
Sieh es mal so: Mit einem Übersetzungsmodul für ein ganzes Projekt musst du nicht mehr alles doppelt tippen, und wenn Module kommen, verteilst du halt alles in eigene Module.
Übrigens ist das C-Linksystem ein Hammer. Wer auf Methoden und Subklassen verzichten kann, wird damit schon heute glücklich. Einfach struct vor die fremde Datenstruktur und man braucht keine Header mehr. Davon kann C++ nur träumen.
- xq
- Establishment
- Beiträge: 1590
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: Jammer-Thread
Zum Linksystem: Scheiß auf Resource Files, einfach mit objcopy ne .data section mit meiner resource erstellen und direkt via pointer darauf zugreifen, weil dat ding einfach mit reingelinkt wird. echt schicke Sache ;)
Ansonsten dürfte C++ da echt mal was vertragen
Ansonsten dürfte C++ da echt mal was vertragen
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
-
- Establishment
- Beiträge: 426
- Registriert: 23.01.2013, 15:55
Re: Jammer-Thread
Also es gibt auch Pläne zu C++17, siehe hier:
https://isocpp.org/std/status
http://meetingcpp.com/index.php/br/item ... -core.html
Ein Übersetzungsmodul pro Projekt ist für schwierig. Es gibt zum Beispiel einzelne Dateien mit für sich sehr hohen Compile-Zeiten. Ein Teil des Codes hat auch noch weitere große (Include)-Abhänigkeiten die man nicht vom Header aus überallhin verbreiten muss. Was ich auf jeden Fall mal jetzt aber mal ausprobieren will ist das Gruppieren von Dateien in Compile Units. Das könnte die Sache echt beschleunigen. Ich habe hier doch einige Dateien mit wenig Inhalt. Trotzdem nervig, dass man auch das noch von Hand machen muss.
In C kann man aber doch dann genauso wenig wie in C auf die Member der Struct zugreifen. Und alle Funktionendeklarationen müsste man auch von Hand kopieren. Das stelle ich mir außerdem gefährlich bei Änderungen vor. Ich weiß ja ehrlich gesagt nicht so ganz, was da so viel besser ist. ;-)
EDIT:
@MasterQ32
Mache ich inzwischen auch so ähnlich. Auch Shadercode von OpenGL und was so anfällt.
Ich erstelle die Objektdateien allerdings momentan mit NASM. (Ich habe mir dazu auch ein Custom Build Tool in Visual Studio eingerichtet)
https://isocpp.org/std/status
http://meetingcpp.com/index.php/br/item ... -core.html
Ein Übersetzungsmodul pro Projekt ist für schwierig. Es gibt zum Beispiel einzelne Dateien mit für sich sehr hohen Compile-Zeiten. Ein Teil des Codes hat auch noch weitere große (Include)-Abhänigkeiten die man nicht vom Header aus überallhin verbreiten muss. Was ich auf jeden Fall mal jetzt aber mal ausprobieren will ist das Gruppieren von Dateien in Compile Units. Das könnte die Sache echt beschleunigen. Ich habe hier doch einige Dateien mit wenig Inhalt. Trotzdem nervig, dass man auch das noch von Hand machen muss.
In C kann man aber doch dann genauso wenig wie in C auf die Member der Struct zugreifen. Und alle Funktionendeklarationen müsste man auch von Hand kopieren. Das stelle ich mir außerdem gefährlich bei Änderungen vor. Ich weiß ja ehrlich gesagt nicht so ganz, was da so viel besser ist. ;-)
EDIT:
@MasterQ32
Mache ich inzwischen auch so ähnlich. Auch Shadercode von OpenGL und was so anfällt.
Ich erstelle die Objektdateien allerdings momentan mit NASM. (Ich habe mir dazu auch ein Custom Build Tool in Visual Studio eingerichtet)
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
In einen anderen Abschnitt? Dann kann man redundante Daten doch gar nicht aliasen. Gimp hat eine Funktion, die ein Bild zu einem C-Header exportiert; damit werden die Dateien direkt in den Quelltext geschmissen :P Nur besser nicht mit VC öffnen, die Syntaxhervorhebung geht bei sowas in die Knie …MasterQ32 hat geschrieben:Zum Linksystem: Scheiß auf Resource Files, einfach mit objcopy ne .data section mit meiner resource erstellen und direkt via pointer darauf zugreifen, weil dat ding einfach mit reingelinkt wird. echt schicke Sache ;)
Dann bekommt man ja unresolved external Symbols …Spiele Programmierer hat geschrieben:Und alle Funktionendeklarationen müsste man auch von Hand kopieren. Das stelle ich mir außerdem gefährlich bei Änderungen vor.
-
- Establishment
- Beiträge: 426
- Registriert: 23.01.2013, 15:55
Re: Jammer-Thread
Ich habe nie ganz den Sinn dahinter verstanden, warum man vorher die Daten in eine gigantische C-Datei umwandelt, um sie dann erst nochmal zu kompilieren. Wahrscheinlich bei großen Dateien auch ein Problem. Da schiebe ich die binären Daten doch lieber direkt ins Zielformat ohne so einen Hack.
In C++ deklariere ich sie einfach als externes Symbol und bekomme einen Zeiger auf die Daten und deren Größe.
In C++ deklariere ich sie einfach als externes Symbol und bekomme einen Zeiger auf die Daten und deren Größe.
Nicht in richtigem C-Code. Dort werden keine Überladungen unterstützt und die Parametertypen nicht ins Name Mangling integriert.Dann bekommt man ja unresolved external Symbols …
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Der Sinn ist, die Abhängigkeiten in der Toolchain zu minimieren. Man hat einfach ein paar Sachen weniger, die auf anderen PCs schiefgehen können. Aber da hatte ich ja das Video mit dem LOC-Vergleich zwischen Vista und Visual Studio noch nicht gesehen :D
Und richtigen C-Code will hier ja niemand; klar. Wir wollen ja schließlich alle auch irgendwo mal Templates. Aber im Gegensatz zu C++, wo zum Aufruf von Foo::method() die gesamte Klassendefinition vorliegen muss, geht method(struct Foo *) ohne Definition von Foo. Da spart man wirklich und das kann man auch in C++. Man muss nur seinen Stil anpassen.
Und richtigen C-Code will hier ja niemand; klar. Wir wollen ja schließlich alle auch irgendwo mal Templates. Aber im Gegensatz zu C++, wo zum Aufruf von Foo::method() die gesamte Klassendefinition vorliegen muss, geht method(struct Foo *) ohne Definition von Foo. Da spart man wirklich und das kann man auch in C++. Man muss nur seinen Stil anpassen.
-
- Establishment
- Beiträge: 426
- Registriert: 23.01.2013, 15:55
Re: Jammer-Thread
Dafür hat man in der Toolchain dann ein Tool das die Binärdaten in C-Code umwandelt. So den ganz großen Vorteil sehe ich nicht.
Also deine Methode überzeugt mich bisher nicht so. Freie Methoden bieten weniger Übersicht und keine bieten keine gute Auto-Vervollständigung.
Außerdem, wenn ich die Funktionsdeklarationen mitsamt der Klasse jetzt nicht mehr in den Header schreibe sondern überall direkt hineinkopiere, habe ich ja noch extremere Redundanz wie jetzt schon zwischen Header & Source.
Also deine Methode überzeugt mich bisher nicht so. Freie Methoden bieten weniger Übersicht und keine bieten keine gute Auto-Vervollständigung.
Außerdem, wenn ich die Funktionsdeklarationen mitsamt der Klasse jetzt nicht mehr in den Header schreibe sondern überall direkt hineinkopiere, habe ich ja noch extremere Redundanz wie jetzt schon zwischen Header & Source.