Sie müssen nicht programmieren, dieses tolle Rant zu schätzen verstehen
Linus Torvalds ist eine legendäre Software-Ingenieur und Gründer des Linux-Kernels. Er kann nicht auch schlechten Code stehen, also hinsetzen, schnappen Sie sich das Popcorn und genießen.
Torvalds veröffentlicht diese Reaktion auf einen neuen Code, der in Linux-Version 4.3 aufgetaucht. Es ist sehr technisch, aber auch wenn Sie nicht die Nuancen zu erfassen, die feinen fluchen kann werden von allen geschätzt:
Christus-Menschen. Dies ist nur sh * t
. Der Konflikt bekomme ich ist aufgrund der dummen Mist in neuen Gcc-Header-Datei. Aber was macht mich verärgert ist, dass der Mist aus völlig falschen Gründen.
Dies ist der alte Code in net/ipv6/ip6_output.c:
MTU-= auwählen + Sizeof (Struct Frag_hdr);
und das ist der neue "verbesserte" Code, der ausgefallene Sachen, die magische integrierte Compiler unterstützen will und dumme Wrapperfunktionen verwendet für wenn es nicht vorhanden ist:
Wenn (Overflow_usub (Mtu, auwählen + Sizeof (Struct Frag_hdr) & Mtu) ||
MTU<=>=>
GOTO Fail_toobig;
und wer glaubt, dass die oben (a) lesbar (b) eine effiziente (auch mit der magischen Compiler-Unterstützung) (c) besonders sicher ist einfach inkompetent und Mittagspause.
Der obige Code ist sh * t, und es wird Scheiße Code generiert. Es sieht schlecht aus, und es gibt keinen Grund dafür.
Der Code könnte * leicht * mit nur eine einheitliche und verständliche bedingte getan worden und der Compiler würde eigentlich besseren Code generiert, und der Code würde besser aussehen und Moreunderstandable. Warum ist dies nicht
Wenn (Mtu< hlen="" +="" sizeof(struct="" frag_hdr)="" +="">
GOTO Fail_toobig;
MTU-= auwählen + Sizeof (Struct Frag_hdr);
Das ist die gleiche Anzahl von Zeilen, verwendet keine verrückten Hilfsfunktionen, dass niemand weiß, was sie tun, und ist viel offensichtlicher, was es wirklich tut. Ich garantiere, dass die zweite deutlicher Version einfacher ist zu lesen und zu verstehen. Hat jemand wirklich wollen, dies zu bestreiten?
Wirklich. Gib mir * ein * Grund, warum es war geschrieben in diese idiotische Weise mit zwei verschiedenen Bedingungen, und eine glänzende neue nicht dem Standard entsprechende Funktion, die will bestimmten Compiler unterstützt, sogar halbwegs vernünftigen Code generieren, und sogar dann schlechter Code generiert? Eine glänzende Funktion, dass wir nie und nimmer irgendwo anders gebraucht, und zwar nur Compiler-Masturbation.
Und ja, man konnte noch Überlauf Probleme haben, wenn der ganze "auwählen + Xyz" Ausdruck überläuft, aber ehrlich gesagt, hatte der Code "overflow_usub()", die auch. Also wenn Sie, dass befürchten, tun nicht dann Sie verdammt gut das richtige zu.
Ich sehe wirklich keinen Grund für diese Art von kompletten idiotischen Mist.
Sag mir, warum. Weil ich nicht diese Art von völlig verrückt Sachen ziehen, die Konflikte rc7 Zeitpunkt generiert, und das scheint absolut keinen Grund dafür eine idiotische unlesbar durcheinander haben.
Der Code scheint * ausgelegt *, das neue "overflow_usub()" Code zu verwenden. Es scheint ein Vorwand, um diese Funktion zu verwenden.
Und es ist ein f * Cking schlechte Ausrede für die Gehirnverletzung.
Tut mir leid, aber wir nicht wie die idiotische neue Schnittstellen wie diese idiotische neue Code hinzufügen.
Ja, ja, wenn dies innerhalb der Netzwerkschicht geblieben wäre würde ich nie bemerkt haben. Aber da ich * habe * bemerken, ich möchte wirklich nicht, dies zu ziehen. In der Tat, ich will es klar, * alle * code, wie das ist völlig inakzeptabel. Wer glaubt, dass Code wie diesen ist "sicher" und "sicher", weil sie ausgefallene Überlauf Erkennung Funktionen verwendet ist so weit zum Mittagessen, das ist es nicht sogar lustig. Alles, was diese Art von Scheiße tut ist, machen dem Code eine unlesbare Durcheinander mit Code, dass kein vernünftiger Mensch jemals wirklich verstehen wird, was es wirklich tut.
Es loswerden. Und ich weiß nicht * immer * diese Scheiße wieder sehen wollen.
Linus
Lektion gelernt: Leg dich nicht mit Linus Code.