Zehn Codezeilen, die meine Welt verändert haben
Ten Lines of Code That Changed My World
In diesem persönlichen Rückblick teilt der Autor zehn Codezeilen, die ihm viel bedeuten – von einem BASIC-Einzeiler, der ihn einst mit einem Computer kommunizieren ließ, über selbstmodifizierenden 6502-Assemblercode bis hin zu einem animierten CSS-Gedicht in 280 Zeichen. Jede Zeile erzählt eine kleine Geschichte aus über vier Jahrzehnten Programmierleidenschaft.
Maschinensprache ist so nah an der Hardware, wie es nur geht. Keine Warnungen, keine Logs, keine Schutzgeländer. Sie erlaubt es sogar, sich selbst zu verändern, indem sie die tatsächlichen Bytes des Codes während der Ausführung überschreibt.
- dahart
Die BASIC print+goto-Schleife war vielleicht auch mein allererstes Programm (in den 80ern), aber eines ist für mich sicher: Es war definitiv nicht „Hello, World“. Ich und andere füllten den Bildschirm mit allerlei albernen Dingen, zufälligen Wörtern, Witzen und kindischen Ausdrücken, was auch immer, aber aus irgendeinem Grund war „Hello, World!“ eine C-Sache, und ich erinnere mich, es zum ersten Mal in einem C-Kurs in der High School gesehen zu haben und dann viel häufiger im College.
Ich habe auch Erinnerungen an ‚poke‘. Auf dem Atari 800 konnte man den Speicher mit poke ändern, um die Tastenwiederholungsrate und die Verzögerung vor dem Beginn der Wiederholung zu ändern, also drehten wir natürlich die Verzögerung auf null und die Wiederholung auf Maximum (es waren vielleicht 60 Zeichen pro Sekunde), sodass jeder, der versuchte zu tippen, nicht schnell genug die Tasten drücken konnte, um Wiederholungen zu vermeiden. Man musste den Rechner aus- und wieder einschalten, um das zu beheben, was für den 11-jährigen mich urkomisch war.
Ähnlich wie seine Beschreibung von ‚poke‘, aber anderer Mechanismus – mit debug.com auf einem IBM PC jr die Ultimate III-Speicherdateien bearbeiten und sich selbst maximales Geld und Leben geben.
Gute Zeiten!
- andsoitis
Hier sind 3 Zeilen, die etwas Tiefgründiges über Lisp einfangen: Code kann Code erzeugen, der Code erzeugt:
———————
(defmacro twice (form)
`(progn ,form ,form))
(twice (print "Reality"))
———————
twice führt sein Argument nicht zweimal aus. Es schreibt das Programm selbst vor der Ausführung um in:
(progn
(print "Reality")
(print "Reality"))
- probably_wrong
Ich habe kleine Codeschnipsel gesammelt, die gute Tattoos abgeben würden, und ich muss sagen, einige davon wären wahrscheinlich eine gute Ergänzung für die Sammlung.
Ich bin teilweise eher für „red“ statt „hotpink“ in CSS, aber das ist nur meine Meinung.
- bigbezet
Der CSS-Debugger-„Trick“ ist wirklich ein schlechter Rat. CSS-Rahmen beeinflussen das Layout und können Dinge kaputt machen. Verwende stattdessen einen outline.
- tptacek
Hmm. Was für eine großartige Frage.
while(1) { fork(); }
Muss mir etwas bedeutet haben, denn es stand in meiner Usenet-Sig. Und dann:
exit(main(kfp->kargc, argv, environ));
aus FreeBSD crt0; ein ziemlich großer Moment für mich, als ich realisierte, dass unter main() noch mehr C-Code steckt.
Dann:
statements: /*E*/ | statement statements
Der Moment, in dem es bei Yacc klick machte; diese Zeile war tiefgründig, aber eine genauere Darstellung des Moments war die Erkenntnis, dass man mit dem Parsergenerator nur einen Baum baut und dass die Seiteneffekte jeder Produktion dazu da sind, Baumknoten zurückzugeben und einzufügen.
Wenn es eine einzelne Zeile gäbe, die ich für „verdopple die Größe der Hashtabelle, wenn sie voll ist“ finden könnte, hätte die hier einen Platz verdient.
Dann natürlich (wir dürfen schummeln, weil Assembly):
jmp .call
.pop: pop esi
...
.call: call .pop
Der „Delta-Offset“-Trick, der meiner Meinung nach aus der x86-Virenkultur stammt, aber in den 90er Jahren bei Overflow-Exploits universell war, um positionsunabhängige Referenzen auf Strings und andere Speicherdinge zu bekommen.
Auf jeden Fall:
void walk(node *n) { if(!n) return; walk(n->left); visit(n); walk(n->right); }
Ich sollte einen Weg finden, ein write-select(2) in eine Zeile zu packen, denn das war ein weiterer „Oh Scheiße“-Moment für mich.
Ähnlich: als Vern Paxson mir erklärte, dass er TCP-Reassembly implementiert hatte, indem er einfach eine Datei öffnete und „seek“ benutzte, um eingehende Segmente an die richtige Position zu setzen. Ich könnte das wahrscheinlich auf eine Zeile golfen! Aber es wäre ein an […]