Десять строк кода, изменивших мой мир

Ten Lines of Code That Changed My World

Автор вспоминает десять фрагментов кода, которые повлияли на его жизнь: от классического Hello World на BASIC до анимированного стихотворения на CSS, умещающегося в 280 символов. Среди них — самоизменяющийся ассемблер для 6502, трюк с бесконечными жизнями через POKE и скрипт для сканирования паролей в школьной сети. Каждая строка — это история о том, как код открывает новые возможности или просто веселит.

Машинный язык — это максимально близко к железу. Никаких предупреждений, логов, ограничений. Он даже позволяет изменять себя, перезаписывая байты кода во время выполнения.
  1. dahart

    Цикл print+goto на BASIC, возможно, был и моей первой программой (в 80-х), но одно я знаю точно: это уж точно был не «Hello, World». Я и другие заполняли экран любыми глупостями, случайными словами, шутками и детскими фразами, чем угодно, но «Hello, World!» почему-то был темой C, и я помню, как впервые увидел его на уроке C в старшей школе, а потом гораздо чаще в колледже.

    У меня также сохранились воспоминания о 'poke'. На Atari 800 можно было через poke изменить скорость повтора нажатой клавиши и задержку перед началом повтора, так что мы, естественно, сбрасывали задержку до нуля и выкручивали повтор на максимум (это было, наверное, 60 символов в секунду), так что любой, кто пытался печатать, не успевал нажимать клавиши достаточно быстро, чтобы избежать повторов. Чтобы исправить это, приходилось перезагружать машину, так что для меня в 11 лет это было уморительно.

    Похоже на его описание 'poke', но механизм другой — использование debug.com на IBM PC jr для редактирования файлов сохранений Ultimate III и выдачи себе максимального количества денег и жизней.

    Хорошие были времена!

  2. andsoitis

    Вот 3 строки, которые схватывают нечто глубокое о Lisp: код может порождать код, который порождает код:

    ———————

    (defmacro twice (form)

    `(progn ,form ,form))

    (twice (print "Reality"))

    ———————

    twice не выполняет свой аргумент дважды. Он переписывает саму программу до выполнения в:

    (progn

    (print "Reality")

    (print "Reality"))

  3. probably_wrong

    Я коллекционирую небольшие фрагменты кода, которые хорошо бы смотрелись в качестве татуировок, и должен сказать, что некоторые из этих, вероятно, станут хорошим дополнением к коллекции.

    Я, пожалуй, больше склоняюсь к "red" вместо "hotpink" для CSS, но это только моё мнение.

  4. bigbezet

    Трюк с отладкой CSS — на самом деле плохой совет. Границы CSS влияют на макет и могут всё сломать. Используйте вместо этого outline.

  5. tptacek

    Хм. Отличный вопрос.

    while(1) { fork(); }

    Должно быть, это что-то для меня значило, раз было в моей подписи в Usenet. А потом:

    exit(main(kfp->kargc, argv, environ));

    из FreeBSD crt0; своего рода важный момент для меня — осознать, что под main() есть ещё C-код.

    Затем:

    statements: /*E*/ | statement statements

    Момент, когда до меня дошёл Yacc; эта строка была глубокой, но более точным описанием момента было осознание того, что всё, что ты делаешь с генератором парсеров, — это строишь дерево, и для этого нужны побочные эффекты каждой продукции: возвращать и вставлять узлы дерева.

    Если бы я мог придумать одну строку для «удвоить размер хеш-таблицы, когда она заполнится», она бы заслужила место здесь.

    Затем, конечно (нам можно схитрить, ведь это ассемблер):

    jmp .call

    .pop: pop esi

    ...

    .call: call .pop

    Трюк с «дельта-смещением», который, как я полагаю, пришёл из культуры x86-вирусов, но был универсален в эксплойтах переполнения 90-х как способ получить позиционно-независимые ссылки на строки и другие участки памяти.

    Несомненно:

    void walk(node *n) { if(!n) return; walk(n->left); visit(n); walk(n->right); }

    Мне стоит придумать, как втиснуть write-select(2) в одну строку, потому что это ещё один момент «о чёрт» для меня.

    Аналогично: когда Верн Паксон объяснил мне, что реализовал пересборку TCP, просто открыв файл и используя «seek», чтобы разместить входящие сегменты в нужной позиции. Я, наверное, мог бы сократить это до одной строки! Но это было бы не […]

Ещё за этот день

2026-09-27