Я думаю, что идея восходит к Почтовым системам , переписывающим со строками («если вы видите эту строку, замените ее этой строкой»). Почтовые системы способны к Тьюрингу и, таким образом, могут вычислять что угодно (включая тексты программ!). Бумага Эмиля Поста на них датирована 1943 годом, но предположительно он сделал первоначальную концептуализацию в 1920-х годах.
Макропроцессор общего назначения , один из первых широко используемых, был доступен в начале 60-х годов.
TRAC - еще один ранний макропроцессор, относящийся к тому же периоду. История компьютерных языков (TRAC) гласит, что она была разработана в 1959 году.
Оба эти макропроцессора с поддержкой Тьюринга.
СНОБОЛ также датируется тем же периодом.
Тот факт, что макропроцессоры очень общего назначения строились в начале 60-х годов, намекает мне на то, что, вероятно, до того времени были созданы макропроцессоры специального назначения, чтобы вдохновлять. Я почти уверен, что макропроцессоры использовались в ассемблерах до этого момента, но у меня нет конкретных доказательств.
Я знаю, что в COBOL есть так называемые библиотеки COPY, которые представляют собой нечто среднее между макросами и включаемыми файлами. Я не знаю, когда это было введено в COBOL, но язык восходит к 1958 году.
Интересно отметить, что макросы LISP можно рассматривать как особый случай переписывания с дерева на дерево («если вы видите s-выражение, которое выглядит так, замените его s-выражением, которое выглядит как тот"). Деревья могут быть легко смоделированы как строки (см .: «LISP» :), и, таким образом, макросы LISP представляют собой особый случай переписывания строк.
Обобщенный случай переписывания деревьев теперь является основой для Системы преобразования программ , которые могут вносить значительные изменения в текст программы.