LINUX.ORG.RU
 
satanic-mechanic

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


0

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 комментариев, и запускал при вызове их из других комментариев. Программисты решили, что нет оснований говорить большим боссам, что Мак больше не приходит на работу. Так происходит и по сей день: Мак получает зарплату и время от времени шлет программистам открытки то из одной тропической страны, то из другой.

ЗАСТАВЬ КОМПЬЮТЕР ПОЛИВАТЬ ОГОРОД

автоматизация своими руками: электроприборы под контролем компьютера
beware of programmers who carry screwdrivers!
http://www.unicontrollers.com/products/unc01x

[#]  
satanic-mechanic

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

* ()
[#]  

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

* ()
[#]  

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

** ()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 21:40:44  

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

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

** ()
[#] Ответ на: комментарий от archimag 20.10.2010 21:46:58  
satanic-mechanic

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

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

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

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

* ()
[#] Ответ на: комментарий от archimag 20.10.2010 21:46:58  
satanic-mechanic

А история красивая, пусть народ почитает. Вот и все.

* ()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 21:53:21  
korvin_

> А история красивая

что в ней красивого?

** ()
[#]  
Zubok

Это не история успеха, а сказка успеха. Или лучше -- байка успеха. :)

***** ()
[#] Ответ на: комментарий от korvin_ 20.10.2010 21:56:33  
satanic-mechanic

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

* ()
[#]  
balodja

Фильм уже сняли?

*** ()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 21:52:50  

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


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

** ()
[#] Ответ на: комментарий от archimag 20.10.2010 22:10:02  

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

Лисп уже.

*** ()
[#] Ответ на: комментарий от archimag 20.10.2010 22:10:02  
mv

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

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

***** ()
[#]  
different_thing

Читал лет сто назад.

()
[#]  
different_thing

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

()
[#] Ответ на: комментарий от archimag 20.10.2010 22:10:02  
different_thing

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

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

()
[#] Ответ на: комментарий от archimag 20.10.2010 22:10:02  
different_thing

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

()
[#]  
Zubchick

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

* ()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 22:07:39  
urxvt

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

*** ()
[#] Ответ на: комментарий от Zubchick 20.10.2010 22:53:24  

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

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

** ()
[#] Ответ на: комментарий от archimag 20.10.2010 22:10:02  
satanic-mechanic

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

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

* ()
[#] Ответ на: комментарий от different_thing 20.10.2010 22:40:04  
satanic-mechanic

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

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

* ()
[#]  
yoghurt

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

***** ()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 23:23:22  
different_thing

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

()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 23:21:57  

> взгляни на эмблему Lisp и слоган "Lisp -- made with secret alien
> technology".


Это никакая не эмблема (у лисп нет никакой эмблемы), а просто чей-то частный взляд (http://www.lisperati.com/).

** ()
[#] Ответ на: комментарий от different_thing 20.10.2010 23:34:33  
satanic-mechanic

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

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

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

* ()
[#] Ответ на: комментарий от archimag 20.10.2010 23:37:12  
satanic-mechanic

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

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

* ()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 23:40:00  
different_thing

Хз. Может быть. Особенно для начала PCL мне больше помог.

()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 23:44:45  
different_thing

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

()
[#] Ответ на: комментарий от different_thing 20.10.2010 23:45:59  

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


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

** ()
[#] Ответ на: комментарий от different_thing 20.10.2010 23:45:59  
satanic-mechanic

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

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

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

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

* ()
[#] Ответ на: комментарий от satanic-mechanic 20.10.2010 23:59:58  

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


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

** ()
[#] Ответ на: комментарий от archimag 21.10.2010 0:11:40  
satanic-mechanic

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

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

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

* ()
[#] Ответ на: комментарий от satanic-mechanic 21.10.2010 0:42:33  
satanic-mechanic

В последнем посте описался: CL заменить на Lisp.

* ()
[#] Ответ на: комментарий от satanic-mechanic 21.10.2010 0:44:06  
satanic-mechanic

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

* ()
[#]  

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

** ()
[#]  
m4n71k0r

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

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

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

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

()
[#] Ответ на: комментарий от archimag 20.10.2010 21:25:48  

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

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

* ()
[#]  

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

* ()
[#]  
shelA

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

# ()
[#] Ответ на: комментарий от shelA 21.10.2010 9:32:17  
balodja

Да, я прочитал, лет 7 назад.

*** ()
[#]  

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

** ()
[#] Ответ на: комментарий от shelA 21.10.2010 9:32:17  
runtime

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

Да.

** ()
[#] Ответ на: комментарий от shelA 21.10.2010 9:32:17  
yoghurt

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

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

***** ()
[#] Ответ на: комментарий от balodja 21.10.2010 10:03:27  
yoghurt

>лет 7 назад

А разве PCL не в 2005 вышёл?

***** ()
[#]  

Я когда читал PCL вообще не понял, к чему там вставлен этот бредовый фрагмент.

** ()
[#] Ответ на: комментарий от yoghurt 21.10.2010 13:32:18  
balodja

Значит не 7. В общем, давно было.

*** ()