Происхождение отступа кода

31

Мне интересно узнать, кто ввел отступ кода, а также когда и где он был введен.

Это кажется настолько важным для понимания кода, но оно не было универсальным. Большая часть кода на Фортране и Базовом языке была (есть?) Без отступов, и то же самое относится и к Коболу.

Я почти уверен, что даже видел старый код на Лиспе, написанный как непрерывный текст с переносом строк. Вы должны были посчитать скобки в своей голове, просто чтобы разобрать это, не говоря уже о том, чтобы понять это.

Итак, откуда появилось такое огромное улучшение? Я никогда не видел упоминаний о его происхождении.

Помимо оригинальных примеров его использования, я также ищу оригинальные обсуждения отступов.

Дэниел Малер
источник
Я не уверен, что у этого есть единственная точка происхождения. Кроме того, для некоторого раннего кода проблема была бы занята самими пробелами.
Джек Эйдли,
1
На самом деле, Фортран был с отступом. В роде. Он был размещен в столбцах, первый из которых был зарезервирован для Cперсонажа, если вы делали комментарий.
Джонатан Ландрум
За исключением случаев, когда отступ используется для изменения семантического значения кода (то есть, когда изменение отступа помещает его в циклы или как часть if, как в F #), отступ на самом деле не является языковой функцией, это особенность IDE ( и немного в компиляторе, чтобы игнорировать ведущие пробелы). @ Джек прав - изначально программы были перфорированы на карточках, а отступы буквально не существовали в хранилище (и, возможно, не должны сейчас тоже). Колонка RPG не использует отступы (в любом случае у вас есть только ~ 20 символов на строку), но IDE может «мягко» сделать отступ для вас.
Заводная муза
6
Размышляя об этом в одночасье, мне приходит в голову, что в значительной степени отступы, вероятно, предшествуют программированию. Отступы, вероятно, использовались в списках команд до того, как кто-либо писал компьютерные программы. Я пытаюсь найти пример.
Джек Эйдли,
@ Clockwork-Muse Отступы были языковой функцией в языке COBOL примерно 20 лет назад («Область A», «Область B», т . Д. ).
Росс Паттерсон

Ответы:

21

Истоки кода с отступом, вероятно, можно найти в ALGOL :

ALGOL представил блоки кода и пары beginand endдля их разделения, а также был первым языком, реализующим определения вложенных функций с лексической областью действия.

Грег Хьюгилл
источник
Это звучит разумно, хотя мне интересно, может, прога Лиспа не появилась первой? В любом случае я действительно после специфики о введении отступа.
Даниэль Малер
4
@DanielMahler - Просмотрите руководство по программированию LISP 1 и убедитесь сами. Часть кода примера имеет отступ, но в лучшем случае она случайна. Большая часть кода примера расположена слева.
Дэвид Хаммен
@DavidHammen Должно быть, это была одна из худших пишущих машинок ... Вы бы подумали, что они просто написали все это от руки.
Panzercrisis
6
Я не думаю, что цитируемый текст на самом деле поддерживает использование / существование отступа . Это поддержка секционирования кода. Java использует скобки ( {}) для разделения блоков, и вы можете определять вложенные функции, но это ничего не говорит мне о том, действительно ли код имеет отступ.
Заводная муза
12

Код с отступом должен был появиться до 1958 года, поскольку он присутствовал - но не был повсеместным - в LISP и ALGOL. Самое раннее, что я могу найти, это COMTRAN который был представлен в 1957 году, хотя я могу найти только руководство 1960 года (см. Стр. 90ish). Этот отступ отличается от современной концепции, так как в COMTRAN отсутствует блочная структура большинства языков со времен ALGOL, но я думаю, что он все равно должен учитываться.

Я подозреваю, что это на самом деле не первый пример, но я не могу найти его раньше.

обновленный

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

Джек Эйдли
источник
-1

Расширение комментария Росса Паттерсона - компиляторы COBOL (или, по крайней мере, компиляторы IBM, которые я использовал в своей карьере до открытия систем) заставили отступы (области «A» и «B», которые он упоминает). Если какой-либо из элементов, которые должны были находиться в этих областях, не был размещен точно, ваш код не сможет скомпилироваться. Однако помимо этого никаких особых отступов не требовалось - это часто приводило к затруднениям при изменении кода другого разработчика, стиль отступов которого отличался от вашего - этикет предлагал бы вам следовать существующему шаблону, поскольку это сохраняло мир среди сверстников; Кроме того, различные стили в одном и том же источнике могут ухудшить внешний вид, похожий на тетрис.

Прошло много лет с тех пор, как я думал о COBOL и его отступах - спасибо, что задали вопрос и сделали небольшую поездку в прошлое!

Marty

Марти Пауэр
источник