- PVSM.RU - https://www.pvsm.ru -
Примечание от переводчика: типично пятничная статья во вторник утром… почему бы и нет?

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

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

Исходник [2]
Поворот дерева в Musl:

Исходник [3]
Двусторонняя очередь в Rust:

Исходник [4]
Внутренности компилятора Swift:

Исходник [5]
Расположение элементов в заголовке Malloc:

Исходник [6]
Профилирование Javascript:

Исходник [7]
RPC в Cloud Spanner:

Исходник [8]
Состояния потока ввода-вывода:

Исходник [9]
Поток управления в декомпилируемой программе NWScript:

Исходник [10]
Внутренности ECC:

Исходник [11]
Форматирование чисел:

Исходник [12]
Квантовый контур:

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

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

Исходник [15]
Формат файла DBF:

Исходник [16]
Lookup-таблица для обработки изображений:

Исходник [17]
Форма цветовой функции:

Исходник [18]
Структура URL:

Исходник [19]
«Краткая» справка по отмене операций в emacs:

Исходник [20]
Примечание переводчика: по ссылке еще очень много подобных графиков
Контроль высоты в бортовом компьютере Apollo (!!!):

Исходник [21]
Разбитие изображения на сегменты:

Исходник [22]
Траектории бумеранга в Nethack:

Исходник [23]
Отрисовка границ элемента в CSS:

Исходник [24]
Дерево квадрантов:

Исходник [25]
Управление скоростью работы станка:

Исходник [26]
Скроллинг веб-страниц:

Исходник [27]
Надеюсь, вам понравилось!
Дополнительный пример от переводчика:
График интерполяции значения:

Исходник [28]
Автор: Андрей
Источник [29]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/309275
Ссылки в тексте:
[1] Исходник: https://github.com/llvm-mirror/llvm/blob/release_80/lib/Analysis/SyncDependenceAnalysis.cpp#L75
[2] Исходник: https://github.com/JikesRVM/JikesRVM/blob/master/rvm/src/org/jikesrvm/objectmodel/TIBLayoutConstants.java#L19
[3] Исходник: https://git.musl-libc.org/cgit/musl/tree/src/search/tsearch.c?id=v1.1.21
[4] Исходник: https://github.com/rust-lang/rust/blob/57d7cfc3cf50f0c427ad3043ff09eaef20671320/src/liballoc/collections/vec_deque.rs#L1399
[5] Исходник: https://github.com/apple/swift/blob/master/lib/AST/NameLookup.cpp#L1521
[6] Исходник: https://code.woboq.org/userspace/glibc/malloc/malloc.c.html#1075
[7] Исходник: https://searchfox.org/mozilla-central/rev/00c0d068ece99717bea7475f7dc07e61f7f35984/tools/profiler/core/RegisteredThread.h#293-301
[8] Исходник: https://github.com/googleapis/google-cloud-go/blob/master/spanner/read.go#L353
[9] Исходник: https://github.com/carllerche/h2/blob/8a0b7ff64f5fe26324ee9f540722549231ac1ad6/src/proto/streams/state.rs#L13-L50
[10] Исходник: https://github.com/xoreos/xoreos-tools/blob/master/src/nwscript/controlflow.cpp#L328
[11] Исходник: https://github.com/dalek-cryptography/curve25519-dalek/blob/develop/src/backend/vector/avx2/edwards.rs#L123
[12] Исходник: https://searchfox.org/mozilla-central/source/js/src/builtin/intl/NumberFormat.cpp#592
[13] Исходник: https://github.com/Microsoft/QuantumKatas/blob/master/PhaseEstimation/Tasks.qs#L117
[14] Исходник: https://github.com/torvalds/linux/blob/v4.20/mm/page-writeback.c#L828
[15] Исходник: https://docs.racket-lang.org/2d/index.html
[16] Исходник: https://github.com/SocialExplorer/FastDBF/blob/master/FastDBF/DbfHeader.cs#L35
[17] Исходник: https://github.com/libvips/libvips/blob/master/libvips/convolution/sharpen.c#L412
[18] Исходник: https://github.com/chriscalo/design-system-utils/blob/master/src/color-scales.js
[19] Исходник: https://searchfox.org/mozilla-central/rev/00c0d068ece99717bea7475f7dc07e61f7f35984/netwerk/base/nsIURI.idl#9-36
[20] Исходник: https://github.com/emacsmirror/undo-tree/blob/master/undo-tree.el#L242-L751
[21] Исходник: https://github.com/chrislgarry/Apollo-11/blob/master/Comanche055/AUTOMATIC_MANEUVERS.agc#L193
[22] Исходник: https://searchfox.org/mozilla-central/rev/00c0d068ece99717bea7475f7dc07e61f7f35984/gfx/wr/webrender/src/image.rs#247
[23] Исходник: https://github.com/NetHack/NetHack/blob/1a8a774719abe55b5a57f63cc43f183339dc6433/src/zap.c#L3461-L3472
[24] Исходник: https://searchfox.org/mozilla-central/rev/00c0d068ece99717bea7475f7dc07e61f7f35984/layout/painting/nsCSSRenderingBorders.cpp#918-956
[25] Исходник: https://github.com/libfive/libfive/blob/master/libfive/src/render/brep/simplex/simplex_tree.cpp#L688-L717
[26] Исходник: https://github.com/grbl/grbl/blob/b237ad566ad25a1503e14fa5f487c34f88bec01f/grbl/stepper.c#L147
[27] Исходник: https://github.com/stipsan/compute-scroll-into-view/blob/d6447854d04031ee3942c6d5654a8477b6bb928f/src/index.ts#L124-L168
[28] Исходник: https://github.com/impworks/corund/blob/master/Corund/Tools/Interpolation/Interpolate.cs#L305
[29] Источник: https://habr.com/ru/post/440830/?utm_source=habrahabr&utm_medium=rss&utm_campaign=440830
Нажмите здесь для печати.