Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Stefan Reuther Newsgroups: de.comp.security.misc Subject: Re: Vertraegliche Sonderzeichen Date: Sat, 26 Dec 2020 10:22:51 +0100 Lines: 53 Message-ID: References: <5fd6b53d$0$32756$7b62cf90@news1.net.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net WA+HZ7uo+Ocok/zGqFUtxgsuU3nadn61rb8DlPA6i3YIpQ4w+l Cancel-Lock: sha1:FTjL2Ta9IbfVl4KuHbf48XMguWA= User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 Hamster/2.1.0.1538 In-Reply-To: Xref: csiph.com de.comp.security.misc:33140 Am 25.12.2020 um 20:47 schrieb Bonita Montero: >> Ahead-of-time-Compiler auch. > > Ja, aber die haben nicht den Pferdefuß der Referenz-Semantik von Java > und C#, wobei C# noch Wert-Typen bzw. structs hat, was oft einen wesent- > lichen unterschied in der Performance macht. Die Referenzsemantik macht insofern einen wesentlichen Unterschied in der Performance als dass der durchschnittliche C++-Programmierer alles per Referenz übergibt, weil er das für schneller hält (und weil ihm "hilfreiche" Tools entsprechende Warnungen geben). Und dann hat der arme C++-Compiler das Problem des möglichen Aliasing, worüber ein Java-JIT nur müde lächelt. >> Ein JIT kann virtuelle Methoden inlinen ("oh, von diesem Interface gibt >> es ja nur eine Implementierung im ganzen System"), und er kann eine >> getroffene Optimierungsentscheidung revidieren ("oh, da wurde eine >> weitere Implementierung geladen"). > > Alles pure Theorie. Schau dir das Computer Languages Benchmark Game > an. Da ist Java im Schnitt 2,5 mal langsamer als C++, und dabei macht > der Benchmark noch zur Auflage, dass man paradigmatisch programmieren > soll, d.h. viele C Lowlevel-Tricks sind in C++ bei diesem Benchmark > nicht erlaubt. Wenn ich mir z.B. https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/pidigits.html ansehe (hab nur mal flüchtig durchgeklickt) ist der Gewinner ein C++-Programm, das 4 Kerne auslastet und gmp benutzt. 15% langsamer ist ein Single-Threaded-C++-Programm ebenfalls mit gmp (schon mal ein Armutszeugnis, dass man mit 4 Kernen nur 15% Speedup schafft, aber das mal am Rande). Weitere ca. 10% langsamer folgt dann ein Single-Threaded-Java-Programm, das ebenfalls gmp nutzt. In anderen Worten: da wird der Overhead des JNI (Java -> C -> Java Übergang) gemessen. Das sagt nicht wirklich was über einen Java-Compiler aus. Und wenn ich mir dann https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/mandelbrot-gpp-1.html anschaue: da wird selbstverständlich tief im Dreck gewühlt, das Top-C++-Programm operiert mit #ifdef __AVX__, union usw. >> Ein JIT muss sich nicht an die ABI halten ... > > Muss ein AOT-Compiler mit Link-Time-Compiling auch nicht. Das halte ich wieder für pure Theorie. Stefan