понедельник, 9 февраля 2009 г.

Происхождение слова MACRO

Для тех кто дружит с gentoo макрос это не пустое слово, мне очень понравилась эта история повествующая откуда взялись эти макросы =)


Давным давно, много лет назад, была компания Lisp программистов. Это было так давно, что Lisp не имел макросов. Каждый раз все то, что не могло быть определенно с помощью функций или сделано с помощью специальных операторов, должно было быть написанно в полном объеме, что было очень тяжело. К сожалению программисты в этой компании были хоть и блестящи, но очень ленивы. Нередко в середине процесса написания своих программ, когда скука от написания больших объемов кода становилась слишком велика, они вместо кода писали комментарии, описывающие требуемый в этом месте программы код. К еще большему сожалению, ведь они были ленивы, программисты также ненавидели возвращаться назад и действительно писать код, описанный в комментариях. Вскоре компания стала иметь большую кучу кода, которую никто не мог запустить, потому что он был полон комментариев с описанием того, что еще предстоит написать.

В отчаяньи большой босс нанял младшего (junior) программиста, Мака, чьей работой стал поиск комментариев, написание требуемого кода и вставка его в программу на место комментариев. Мак никогда не запускал программы, ведь они не были завершены и поэтому он попросту не мог этого сделать. Но даже если бы они были завершены, Мак не знал, какие данные необходимо подать на их вход. Поэтому он просто писал свой код, основываясь на содержимом комментариев, и посылал его назад создавшему комментарий программисту.

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

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

Следующая инновация появилась, когда программист вставил в самый верх одной из своих программ комментарий, содержащий определение функции и пояснение, гласившее: «Мак, не пиши здесь никакого кода, но сохрани эту функцию на будущее; я собираюсь использовать ее в некоторых своих комментариях.» Другие комментарии в этой программе гласили следующее: «Мак, замени этот комментарий на результат выполнения той функции с символами x и y как аргументами.»

Этот метод распространился так быстро что в течение нескольких дней большинство программ стало содержать дюжины комментариев с описанием функций, которые использовались только кодом в других комментариях. Чтобы облегчить Маку различение комментариев, содержащих только определения и не требующих немедленного ответа, программисты отмечали их стандартным предисловием: «Definition for Mac, Read Only» (Определение для Мака, только для чтения). Это (как мы помним, программисты были очень ленивы) быстро сократилось до «DEF. MAC. R/O», а потом до «DEFMACRO».

Очень скоро в комментариях для Мака вообще не осталось английского. Целыми днями он читал и отвечал на электронные письма от компилятора, содержащие DEFMACRO комментарии и вызывал функции, описанные в DEFMACRO. Так как Lisp программы в комментариях осуществляли всю реальную работу, то работа с электронными письмами перестала быть проблемой. У Мака внезапно стало много свободного времени, и он сидел в своем кабинете и грезил о белых песчаных пляжах, чистой голубой океанской воде и напитках с маленькими бумажными зонтиками.

Несколько месяцев спустя программисты осознали что Мака уже довольно давно никто не видел. Когда они пришли в его кабинет, они обнаружили на всем тонкий слой пыли, стол был усыпан брошюрами о различных тропических местах, а комьютер был выключен. Но компилятор продолжал работать! Как ему это удавалось? Выяснилось, что Мак сделал последнее изменение в компиляторе: вместо отправления электронного письма с комментарием Маку компилятор теперь сохранял функции, описаные с помощью DEFMACRO коментариев, и запускал при вызове их из других комментариев. Программисты решили, что нет оснований говорить большим боссам, что Мак больше не приходит на работу. Так происходит и по сей день: Мак получает зарплату и время от времени шлет программистам открытки то из одной тропической страны, то из другой.


Разве LISP был раньше ассемблера?)) или какой то фан ЛИСПа пропустил текст через "s/ассемблер/лисп/" :) в любом случае прикольно)

Комментариев нет:

Отправить комментарий