[Перевод] Объясняем код с помощью ASCII-арта

Примечание от переводчика: типично пятничная статья во вторник утром… почему бы и нет?

614c7ada8fa9c432327c7c1c938c7efa.png

Большинство людей — визуалы. Они используют изображения, чтобы вникнуть в суть проблемы. А вот мэйнстримные языки программирования, напротив, основаны на текстовом представлении. Возникающую пропасть между текстом и графикой заполняют ASCII-изображения, нарисованные с помощью текстовых символов и вставленные в исходный код программы. Я их обожаю! Как-то раз я кинул клич в Twitter и мне прислали гораздо больше примеров, чем я ожидал. Спасибо всем участвовавшим. В этой теме попалось несколько прекрасных примеров, которые я собрал и разложил на категории. Для каждого изображения дается ссылка на соответствующий репозиторий.

Структуры данных


Одно из самых распространенных применений ASCII-арта в коде — наглядно показать структуру данных.

Первый пример из исходного кода LLVM:

ff57cb208f11f9b31188822a08f4a90c.png
Исходник

Расположение полей в структуре данных в Jikes RVM:

bb3e0cdabb582517d8c23946eabec191.png
Исходник

Поворот дерева в Musl:

c122e14b9beb666c4e36495be3c7ff81.png
Исходник

Двусторонняя очередь в Rust:

c72c4f0cea0281700e587dd43ed4031a.png
Исходник

Внутренности компилятора Swift:

6332bbf95a2bc5d1490b8818a406d3f4.png
Исходник

Расположение элементов в заголовке Malloc:

dd0b2c86246df9d16bda8e51ac280249.png
Исходник

Конечные автоматы


Профилирование Javascript:

317e78afa9d6b7d26d3ae64ecd9485f4.png
Исходник

RPC в Cloud Spanner:

3ec5245ff6dc5eb47ac7771a1eaaf28a.png
Исходник

Состояния потока ввода-вывода:

3e11f121175100ec0325edb1107f38a4.png
Исходник

Логика предметной области


Поток управления в декомпилируемой программе NWScript:

7dbaf2a8826aaea457899e18197cb055.png
Исходник

Внутренности ECC:

d201891bc063b794ec7959e4e08dd4c9.png
Исходник

Форматирование чисел:

0aad4aba5e907c7bbad6d2110402f27e.jpg
Исходник

Квантовый контур:

129fc9747fc4ea6c6e043e47a924cc04.png
Исходник

Балансировка задач управления памятью в ядре операционной системы:

0d87347b04abf48ec8597ee582f81ea8.png
Исходник

Совместимость типов (это особенно впечатляющий случай, потому что здесь ASCII-арт является кодом!)

db5ebb24f9fa331ff7318e07b572d447.png
Исходник

Формат файла DBF:

31f500249dcc973e7f1bcae9e409aba5.png
Исходник

Lookup-таблица для обработки изображений:

594be17056cc3fe6d71389e24dea98a2.png
Исходник

Форма цветовой функции:

b28bcf9c2adf188df33e74a18410ae64.png
Исходник

Структура URL:

e9c3936671ccbfed7d6738e0eee513d9.png
Исходник

«Краткая» справка по отмене операций в emacs:

54b0b844f9d246c035dfad33a68702df.png
Исходник
Примечание переводчика: по ссылке еще очень много подобных графиков

Геометрия


Контроль высоты в бортовом компьютере Apollo (!!!):

2c5d56f2926246c9ad833e9bacb3766b.png
Исходник

Разбитие изображения на сегменты:

5f51211f663ee97b3c40e1b6b90708e4.png
Исходник

Траектории бумеранга в Nethack:

45b482d7b5634e1d0e6e68d0abe61b41.png
Исходник

Отрисовка границ элемента в CSS:

0cf55e9644f5d91bee34be75dbd36a29.png
Исходник

Дерево квадрантов:

a8ba2c7157885843a1a9647b84e160c9.png
Исходник

Управление скоростью работы станка:

7e9990d45b135907b0af18088f60ea3b.jpg
Исходник

Скроллинг веб-страниц:

894c42fd7d0619db9e21b0af356b290b.png
Исходник

Надеюсь, вам понравилось!

Дополнительный пример от переводчика:

График интерполяции значения:

1d26af485dae4b491e7f0bb6a3edd141.png
Исходник

© Habrahabr.ru