avva: (Default)
[personal profile] avva
В этом году исполняется 50 лет языку Лисп.

В честь этого события я распечатал и прочитал LISP 1.5 Programmer's Manual, полную спецификацию первой версии Лиспа, которая широко распостранилась за пределами MIT. Это 62-й год. Очень интересная книга. Забавно наблюдать смешение универсального и конкретных подробностей имплементации на архитектуре IBM 7090, одного из больших компьютеров того времени (32k слов по 36 бит каждое - около 140kb памяти в сегодняшних байтах).

Одна из самых странных особенностей этой книги с точки зрения современного Лиспа состоит в том, что к тому времени Маккарти еще не отказался от отдельного синтаксиса для M-expressions - мета-языка программ, отдельного от S-expressions, из которых состоит собственно Лисп. Все алгоритмы в книге написаны на M-expressions, и отдельно указано, как переводить их в программы для системы LISP. Это обстоятельство не мешает LISP 1.5 "схлопывать" уровни данных, программ, и интерпретатора программ, как это свойственно Лиспу в целом, просто это схлопывание не столь очевидно выражено в книге, из-за использования отдельного метаязыка для описания большинства функций.

Один из лучших советов, которые я могу дать программистам, стремящимся расширить свой кругозор: выучите Лисп. Это далеко не так страшно, не так сложно, и не так архаично, как кажется издалека; вы многому научитесь и на многое сможете смотреть по-другому, даже и продолжая работать с любым другим языком.

Я изучил Лисп год назад, после того, как много лет - больше десяти - это откладывал по тем или иным зряшным причинам. Современный учебник, который обычно хвалят знатоки Лиспа - Practical Common Lisp - заслуживает все эти похвалы, и доступен как в виде книги, так и в сетевой версии. Сделайте себе одолжение, и если вы хотите научиться чему-то новому в 2008 году, и еще не знаете Лисп, попробуйте ее прочитать.
Page 1 of 3 << [1] [2] [3] >>

Date: 2008-01-04 09:02 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
Спасибо за совет. Поставить что ли в планы на год "расширение кругозора"?

П.ЭС. Именные часы не желаешь?
http://amigofriend.livejournal.com/560743.html

;)

Date: 2008-01-04 09:08 pm (UTC)
From: [identity profile] alexott.livejournal.com
может быть даже не лисп, а схему - тогда очень пригодится sicp. в общем, схема даже наверное лучше - сам язык проще по сравнению с лиспом

Date: 2008-01-04 09:30 pm (UTC)
From: [identity profile] theukrainian.livejournal.com
Image (http://www.flickr.com/photos/carlzimmer/sets/72157601351535771/)

Date: 2008-01-04 09:31 pm (UTC)
From: [identity profile] ex-alexkon.livejournal.com
А как относятся знатоки Лиспа к Scheme? Хвалят или ругают? В «Practical Common Lisp» в сносках иногда упоминаются отличия Scheme, но без углубления в детали. Насколько я понимаю, разница между этими диалектами Лиспа (http://community.schemewiki.org/?scheme-vs-common-lisp) не ограничиваются парой-тройкой мелочей. Не могу решить, что выбрать для подробного ознакомления: Common Lisp или Scheme? Интересно узнать скорее не факты о наличии/отсутствии фич, а личные впечатления человека, который писал и читал код на обоих языках.

Date: 2008-01-04 09:36 pm (UTC)
From: [identity profile] alexott.livejournal.com
если быстро учить, то выбор за схеме - язык очень простой, по сравнению с common lisp. но в коммон лиспе есть много интересных и удобных вещей, например, CLOS. Правда сейчас стандарт Scheme становится больше и сложнее.
у меня был опыт коммерческого программирования на схеме, конкретно на mzscheme - так что могу ее порекомендовать. А common lisp у меня для всяких моих поделок :-)

кстати, забыл

Date: 2008-01-04 09:38 pm (UTC)
From: [identity profile] alexott.livejournal.com
есть проект перевода Practical Common Lisp на русский язык - http://pcl.catap.ru
Проект пока в стадии перевода, хотя много что переведено, но требуется вычитка. Я надеюсь, что ссылка будет полезна для многих

Date: 2008-01-04 09:38 pm (UTC)
From: [identity profile] grundik.livejournal.com
Изучать лучше scheme, а промышленно писать на common lisp.

Date: 2008-01-04 09:44 pm (UTC)
From: [identity profile] avva.livejournal.com
Проще, но с другой стороны больше соблазн во время обучения списать его как игрушечный теоретический язык (хоть это и недалекая точка зрения).

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

Date: 2008-01-04 09:46 pm (UTC)
From: [identity profile] avva.livejournal.com
Я бы сказал, что во-первых лучше Common Lisp, а во-вторых, это не очень важный выбор. Важнее начать один из них, чем пытаться выбрать между двумя :)

(я не писал код на схеме, впрочем)

Date: 2008-01-04 09:52 pm (UTC)

Date: 2008-01-04 09:55 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Я несколько раз садился за изучение лиспа и схемы, и ни разу не дошел до стадии, когда мог бы сказать, что я "знаю" этот (эти) язык(и). Однако, основные концепции, все же, знаю. Вот и думаю, стоит ли - если практической пользы не ожидается (разве что я вдруг перейду с вима на имакс :)).

Date: 2008-01-04 09:56 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Много лет назад мне кто-то рассказывал, что Схеме пытались учить детей с отставанием в развитии, и даже чему-то научили - якобы лучше, чем процедурным языкам.

Date: 2008-01-04 09:56 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Что интересно в этом всем, это осознание того, что люди, изучавшие самые первые версии лиспа в универе, только сейчас выходят на пенсию.

Date: 2008-01-04 10:00 pm (UTC)
From: [identity profile] jerom.livejournal.com
А что больше смысла учить: lisp или haskell, если я сейчас не знаком ни с одним?

Date: 2008-01-04 10:00 pm (UTC)
From: [identity profile] kot-begemot.livejournal.com
Честно говоря, лисп как язык совершенно не вызывает никакого желания его учить. То есть совсем. Может быть потому что я уже лет пятнадцать его использую?

Date: 2008-01-04 10:03 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Я примерно в таком же состоянии; и хотя редактирую в имаксе, но его скриптовыми возможностями не пользуюсь.

Date: 2008-01-04 10:04 pm (UTC)
From: [identity profile] avva.livejournal.com
Лисп. Он намного сильнее отзывается в других языках и ситуациях. Хаскель больше замкнут в себе, своих понятиях и идиомах. Его тоже очень стоит изучить, но я бы посоветовал начать с Лиспа.

Date: 2008-01-04 10:10 pm (UTC)
From: [identity profile] avva.livejournal.com
Я бы сказал, что несомненно полезно изучить хотя бы до такой стадии, когда можешь сказать, что понимаешь пользу и силу следующих понятий, в случае Лиспа:

- мощь системы макросов (почти не имеющую аналогов среди популярных современных языков)

- гибкость системы исключений, по сравнению с обычными Java-like exceptions

- мощь итеративной системы разработки прямо внутри REPL

- то, как устроен CLOS и метаобъектные возможности в нем (переворачивает понимание того, что такое OOP)

Date: 2008-01-04 10:14 pm (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
смотря какая цель. Haskell гораздо сложне (я бы сказал, даже не на один „порядок”), притом сложность эта не беспричинная (не запутанность и неаккуратность самого языка, как мы видим , например, в C++), она скорее смысловая. Уж очень много нетривиальных вещей есть в языке.
Lisp (я бы всё же советовал Scheme) прост, и этим хорош для отработки понимания многих базовых вещей. Если есть возможность, стоит наверно разобраться и с Lisp, и с Haskell.

Date: 2008-01-04 10:17 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Haskell - совсем другая тема, нежели Lisp. Но его imho следует учить после ML (или O'Caml) - просто потому, что Haskell - развитие ML, в определенном смысле содеражащий почти весь его. Проще разбираться по частям.

Date: 2008-01-04 10:18 pm (UTC)
stas: (Don't panic!)
From: [personal profile] stas
T.e. теперь тот факт, что мне не удалось толком выучить Схему, можно толковать как свидетельство отсутствия отставаний в моем развитии?

Date: 2008-01-04 10:22 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Только если тебе вместо Схемы удалось толком выучить какой-нибудь процедурный язык. :) Пуанта рассказа (или пересказа статьи), если я правильно помню, был в том, что Лого пресловутый им совсем не давался, а Схема - хоть как-то.

Date: 2008-01-04 10:29 pm (UTC)
From: [identity profile] smilga.livejournal.com
Писал на обоих, и сейчас Коммон у меня один из основных языков разработки. На мой взгляд, большой разницы, с чего начинать, нет. (Так для зрелого программиста; юноше, обдумывающему житьё, начинать скорее стоит со Схемы.)

Date: 2008-01-04 10:30 pm (UTC)
stas: (Don't panic!)
From: [personal profile] stas
Лого я когда-то учил, в детстве, но уже не помню. Могу вместо этого предложить C :)

Date: 2008-01-04 10:35 pm (UTC)
From: [identity profile] slobin.livejournal.com
К сожалению, довольно быстро начинаешь понимать, что весь этот богатый набор примитивов какой-то очень уж не от мира сего. От современного языка ожидаешь вещей пусть не фундаментальных, но зато каждодневно нужных. Ну там юникод, регекспы, сокеты. Всё-таки фундаментальная чисто алгоритмическая часть языка должна быть сравнительно маленькая. А то учишь-учишь, а задачки по прежнему можешь решать только их учебника, а не из реальной жизни. Это многих отпугивает. Одно возможное решение я сейчас напишу в ответе на другой комментарий.

... Nec tempora mutantur, sed mutamus tempora ...

Page 1 of 3 << [1] [2] [3] >>

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 28th, 2025 06:55 am
Powered by Dreamwidth Studios