LINUX.ORG.RU

[lisp] История успеха

 


1

2

Ни для кого не секрет, что многие ЛОРовцы любят поговорить об этом замечательном языке, аргументированно обсудить сильные и слабые его стороны, то, какую роль он сыграл в успехах некоторых компаний, как именно обеспечил их конкурентное преимущество.

Когда-то я участвовал в переводе замечательной книги «Practical Common Lisp», в частности главы «Макросы: Создание собственных макросов». И вот сейчас вот осознал, что она содержит одну из лучших историй успеха Lisp из виденных мною, тем более успех сей был обеспечен самой важной, как знает каждый завсегдатай ЛОР, возможностью языка: макросами. Надеюсь она направит юных программистов на правильный путь и вдохновит их на свершения, а сомневающиеся смогут отбросить последние сомнения!

А вот и непосредственно сама история:

~~~~~

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

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

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

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

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

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

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

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



Последнее исправление: satanic-mechanic (всего исправлений: 1)

Это определенно успех, я считаю.

satanic-mechanic
() автор топика

Трололо-копипаста на моём ЛОРе.

vladimir-vg ★★
()
Ответ на: комментарий от satanic-mechanic

> archimag, а зачем так грубо?

А зачем так грубо троллить? А потом люди, и обоснованно, говорят, что главная проблема лиспа это неадекватные фанбои...

archimag ★★★
()
Ответ на: комментарий от archimag

> А зачем так грубо троллить?

Не грубо, а толсто. Не я первый, не я последний. Боишься, что отрицательно скажется на популярности CL? Нет? Так в чем проблема?

А потом люди, и обоснованно, говорят, что главная проблема лиспа это неадекватные фанбои...

Это не совсем так. Одна из значительных проблем, но не главная, ИМХО.

satanic-mechanic
() автор топика
Ответ на: комментарий от korvin_

Красиво в ней проявление воображения автора, так замечательно рассказавшего историю появления макросов в Lisp. Только и всего.

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

> Боишься, что отрицательно скажется на популярности CL?

Нет? Так в чем проблема?


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

archimag ★★★
()
Ответ на: комментарий от archimag

>Мне не нравится, когда язык программирования использую не для разработки программ, а как развлечение в балагане, никто к нему в итоге и не будет относиться как к языку программирования, а только как к предлогу для троллинга.

Лисп уже.

Yareg ★★★
()
Ответ на: комментарий от archimag

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

Один язык уже есть, обсуждение которого начинается с двух подходов к штанге с очень серьёзным лицом. А Лисп - это весёленький язык ))))))

mv ★★★★★
()
Ответ на: комментарий от archimag

> Мне не нравится, когда язык программирования использую не для разработки программ, а как развлечение в балагане, никто к нему в итоге и не будет относиться как к языку программирования, а только как к предлогу для троллинга.

Да и лисп тут не при чём. Кажется, назови 2 любых языка и уже набегут тролли)

different_thing
()
Ответ на: комментарий от archimag

Собственно благодаря такому ажиотажу вокруг него, я как-то стал им интересоваться. Хоть до практики мало когда дело доходит (как и с любыми другими языками, я ж не программист)), но всё же.

different_thing
()

забавно, я не читал. Хотя частенько мне кажется, что обсуждение удобства и крутости лиспа это все чем может заниматься лисп сообщество.

Zubchick
()
Ответ на: комментарий от satanic-mechanic

Мне было интересно и забавно почитать. Спасибо за копипасту.

urxvt ★★★★★
()
Ответ на: комментарий от Zubchick

>Хотя частенько мне кажется, что обсуждение удобства и крутости лиспа это все чем может заниматься лисп сообщество.

Это фанбои, они не несут полезной или смысловой нагрузки.

dmitry_vk ★★★
()
Ответ на: комментарий от archimag

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

Язык программирования — это средство, инструмент выражения мыслей. Более ограниченный и формальный чем естественный, но его так же можно любить, получать удовольствия выражая мысли на нем, наслаждаться образцами «поэзии» и, хорошо если получается, относиться к нему, к его достоинствам и недостаткам, с юмором. Многие так и делают, взгляни на эмблему Lisp и слоган «Lisp — made with secret alien technology». Это и есть здоровое и веселое отношение к любимому инструменту, а нервничать и ворчать, ну что же, может и это чей-то выбор.

satanic-mechanic
() автор топика
Ответ на: комментарий от different_thing

> Да, PCL мне не понравился, CLTL куда лучше, ИМХО

Это совсем разные книги о, соответственно, совсем разном, которые прекрасно дополняют друг друга.

satanic-mechanic
() автор топика

Да, Сибэль (Сейбель?) - тот еще перчик.

yoghurt ★★★★★
()
Ответ на: комментарий от satanic-mechanic

Таки, как не странно, все они про Common Lisp. Разные они тем, что в одной воды дофига, в другой инфы много, но систематизирована она фигово. Это моё и только моё мнение.

different_thing
()
Ответ на: комментарий от different_thing

> все они про Common Lisp

Это только их и объединяет. Первая — учебник, вторая — справочник. По определению в первой воды больше, как иначе? Но разве это отменяет пользу обоих подходов к написанию книг?

P.S. Искренне считаю, что PCL — одна из тех немногих (но, разумеется, не единственная) вещей, которые как раз-таки способствовали возрождению интереса к Common Lisp.

satanic-mechanic
() автор топика
Ответ на: комментарий от archimag

> а просто чей-то частный взляд

Пусть неофициальный, но (как сложилось впечатление: встречал нередко) вполне адекватно воспринятый сообществом взгляд. Вполне здоровый, хочу заметить.

satanic-mechanic
() автор топика
Ответ на: комментарий от different_thing

> Язык как язык. Все эти возгласы про какую-то там особенность

- фигня на мой взгляд.


А вот это правильно.

archimag ★★★
()
Ответ на: комментарий от different_thing

> Все эти возгласы про какую-то там особенность - фигня на мой взгляд.

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

То есть в нем нет чего-то специфического, невероятного, чудодейственного; но в то же время это один из языков (семейство языков), в котором есть идея, которая некую значимую уникальность привносит.

Их всего этого следует простой вывод: для одних задач/проектов он вполне прекрасно подойдет и обеспечит некоторые приятные возможности, для других лучше выбрать что-нибудь еще, потому что эти возможности не нивелируют отсутствие готовых решений. А сверху эта дилемма приправлена личными пристрастиями, склонностями, особенностями, а в некоторых случаях и фанатизмом человека, осуществляющего выбор.

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

> о в то же время это один из языков (семейство языков), в котором

есть идея, которая некую значимую уникальность привносит.


Хм, какая? Мне так казалось, что во всех языках что-то такое есть, что придаёт им «значимую уникальность».

archimag ★★★
()
Ответ на: комментарий от archimag

Эх, вот о таком дискутировать — задача неблагодарная... Здесь вопрос в значимости этой идеи (тут разумеется сложно с объективностью оценки) и степени уникальности. То есть эта идея должна лежать в основе дизайна языка и при этом быть уникальной.

Просто чтобы стало более понятно последнее, у, например Python, нет такой уникальной идеи. Идея там, оказывающая влияние на весь дизайн — простота, но она не уникальна, поэтому не придает ему «значимую уникальность».

Для меня в случае CL такой идеей единство кода и данных, что позволяет некоторым вещам «быть осуществляемыми» более естественным или как минимум простым образом. Это почти без вопросов важная часть дизайна языка и она достаточно уникальна: как минимум без колебаний можно сказать, что этому языку эта идея вообще обязана своей жизнью и распространением.

satanic-mechanic
() автор топика
Ответ на: комментарий от satanic-mechanic

И в предыдущем также (как раз в скобках уточнял про семейство языков)... спать пора.

satanic-mechanic
() автор топика

Сначала я расстроился, что так и не смогу узнать что это за история, ибо неосилить... Но потом заметил знакомые слава - да это же баян!1

quasimoto ★★★★
()

Может о BrainFuck поговорим? Как крут и полон этот язык! В нём не нужны макросы! 8 операторов! А всё остальное - комментарии!!! Это песня! В отличие от Lisp, в нём нет круглых скобочек! Квадратные и угловые! Как приятно бывает написать что-то вроде:

+<->+++>>>.<<>[+][+][++][++-+++-+].

И оно может быть даже скомпилируется! А может о Whitespace??

Как-то вот так...

m4n71k0r
()
Ответ на: комментарий от archimag

> Забаньте кто-нибудь тролля

Это хороший, годный тролль. Не трогай.

one_more_hokum ★★★
()

Сказочки надо в talks постить, а не в development.

Zloddey
()

Забавная история, спасибо!

gizzka ★★
()
Ответ на: комментарий от shelA

>Кто-нибудь это прочитал целиком?

Я в оригинале прочитал

yoghurt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.