Я учу Lisp (язык программирования такой, для тех, кто не знает). Немного стыдно, что до сих пор его не знал (совсем простые куски кода я умею читать, подцепил где-то случайно, в emacs'е скорее всего; но писать не могу, и язык по-настоящему не понимаю), но как-то не нужен он мне был. Да он мне и сейчас не нужен особенно, но захотелось вот заполнить эту лакуну. От лакуны к лакуне -- так, глядишь, и дойдёшь до чего-то хорошего.
Взял в библиотеке две книги пару недель назад: Lisp (Winston&Horn, 3rd edition), и Programming in Common Lisp (Brooks). Сегодня начал их читать, и если найду ещё немного времени, скачаю и установлю какой-нибудь Лисп поиграться.
Книга Винстона и Хорна более подробна, основательна; вместе с тем более "попсовая" что ли. В тексте сквозит настойчивое стремление объяснить читателю, что Лисп - это совсем не страшно. Вместо car и cdr всегда используются first и last. И много ещё подобных мелочей. Книга Брукса куда более лаконична, написана более уверенным тоном и для людей, уже что-то знающих и уверенных в себе.
Концептуальная простота Лиспа меня восхищает. Я вообще очень падок на концептуальную простоту, и потому очень люблю, например, Smalltalk и Forth, хоть и не работал в них сколько-нибудь долго, не писал ничего действительно серьёзного. Теперь Лисп, наверное, присоединится к этому списку.
Взял в библиотеке две книги пару недель назад: Lisp (Winston&Horn, 3rd edition), и Programming in Common Lisp (Brooks). Сегодня начал их читать, и если найду ещё немного времени, скачаю и установлю какой-нибудь Лисп поиграться.
Книга Винстона и Хорна более подробна, основательна; вместе с тем более "попсовая" что ли. В тексте сквозит настойчивое стремление объяснить читателю, что Лисп - это совсем не страшно. Вместо car и cdr всегда используются first и last. И много ещё подобных мелочей. Книга Брукса куда более лаконична, написана более уверенным тоном и для людей, уже что-то знающих и уверенных в себе.
Концептуальная простота Лиспа меня восхищает. Я вообще очень падок на концептуальную простоту, и потому очень люблю, например, Smalltalk и Forth, хоть и не работал в них сколько-нибудь долго, не писал ничего действительно серьёзного. Теперь Лисп, наверное, присоединится к этому списку.
Re:
Date: 2003-02-08 05:38 am (UTC)почему старый LISP?
Date: 2003-02-08 12:42 pm (UTC)(пардон за репостинг, палец соскочил)
Re: почему старый LISP?
Date: 2003-02-08 12:47 pm (UTC)Типовой контроль - вовсе необязательно преимущество; поклонники Лиспа считают его нудным недостатком, и их точка зрения заслуживает изучения, мне кажется. Это одна из причин, по которой я хочу выучить Лисп.
А до Хаскеля я ещё доберусь.
Re: почему старый LISP?
Date: 2003-02-08 01:46 pm (UTC)Про типы — это, конечно, один из главных камней преткновения споров вроде "что лучше, Бэйсик или Паскаль" :^). Хорошо продуманная система типов языка помогает системно подходить к задаче (в книжке про Хаскел, которую я читал, так и говорится: продумывание и переработка набора типов данной программы — ядро процесса проектирования / перепроектирования). Типовая вседозволенность же даёт возможность быстро прототипировать не слишком крупные задачи (и не в критической области). Ну так вот Лисп — для предпочитающих удобство прототипирования; после него эволюция функциональных языков всё-таки двигалась в сторону совершенствования системы типов.
Re: почему старый LISP?
Date: 2003-02-08 01:38 pm (UTC)три грубые ошибки в одном предложении. так держать, товарисч!
Re: почему старый LISP?
Date: 2003-02-08 01:48 pm (UTC)Re: почему старый LISP?
Date: 2003-02-08 02:19 pm (UTC)кстати: если впредь захотите поругать Лисп, ни в коем случае не пишите LISP. такое написание названия языка выдаёт в вас либо человека, не знающего о чём он говорит, либо человека, смутно знакомого с каким-то лиспом 30-летней давности, то есть опять-таки не знающего о чём он говорит. короче, всерьёз не воспримут, ага.
ошибка #1: "старый". даже игнорируя очевидную демагогичность использования слова "старый" в данном контексте (ничего такого ужасного в старости нет, хорошие идеи не стареют), ANSI стандарт Common Lisp датирован 1991 годом. это было не так давно.
ошибка #2: "функциональный". это вы путаете со Схемой, я думаю. Common Lisp можно, конечно, использовать "чистым функциональным" образом (всё что надо имеется: мусоросборка и first-class functions), но ни один человек в своём уме этого делать не станет. ML с Haskell'ем для таким образом повёрнутых мозгов куда удобнее, факт.
ошибка #3: "без типового контроля". правильно будет сказать "без типового контроля во время компиляции". чему Вас в школе учили я не знаю (полагаю что в книге про Хаскель, которую Вы прочли, было написано что это ужасно), но вообще по-моему это очень даже замечательная фича. я на ML писал, и от постоянной борьбы с компилятором ни малейшего удовольствия не получил. а в run-time типовой контроль есть, полный. и производительность, кстати, не страдает.
вообще складывается ощущение, что strong-typing мафия основательно промыла всем мозги. что и понятно, впрочем: теория типов чрезвычайно "наукоёмка", статей они много пишут и докторатов много делают, а уж сколько жаргона туда пихают -- офигеть можно. если много заниматься теорией типов, Computer Science может даже показаться наукой.
(ой, а ещё вы написали что-то про то как Лисп используется только для задач искусственного интеллекта. нееет, Вы всё-таки видимо безнадёжны).
Re: почему старый LISP?
Date: 2003-02-08 03:09 pm (UTC)#0 Назвав LISP именно так, а также обозвав его «старым функциональным языком без типового контроля», я, воспользовавшись грязными демагогическими приёмами, предпринял попытку отвадить уважаемого владельца журнала от изучения замечательного современного нефункционального языка с строгим динамическим контролем типов Лисп, а заодно и наехать на (ранее абсолютно незнакомых мне) уважаемых Разбирающихся Людей. Я не учёл того, что мои происки оказались шиты белыми нитками и теперь безмерно рад, что нашёлся добрый человек, выводящий меня на чистую воду.
#1 Старым я назвал Лисп, демагогически воспользовавшись датой создания первой версии (заложенной в ноябре 1958 года); благодаря вашему объяснению, я понял, что языку на самом деле каких-то 12 лет. К сожалению, в современности он немного проигрывает Фортрану (хоть Фортран и начали разрабатывать в 1954 году, всё же последняя версия его ANSI стандарта датирована 1995 годом, так что получается моложе, и, значит, современнее Лиспа), но это мелочи. Беру первый свой демагогический трюк назад.
#2 Не, конечно, Лисп никакой не функциональный язык — куда там; ну применил его автор словечко LAMBDA — так это так, для красного словца. А эти функциональные извращенцы воспользовались и давай его везде поминать — мол, первый функциональный язык (да какой он к чёрту первый — мы ведь уже в #1 выяснили, что язык очень молодой, моложе только Фортран). Ну и я , неуч, под их дудку и ляпнул. Тут не демагогия, невежество моё дремучее просто сыграло.
#3 Ах, как же я забыл динамический контроль-то? Без него всё так и сыпалось, так и сыпалось бы. А так — всё аккуратненько, исключеньице программное приходит небось (опять, видно, чепуху порю, невежда я невежда) — его обработать тихонечко, и считать дальше, как будто ничего не случилось. Вот ещё была такая светлая идея динамический контроль на уровень хардвера перенести (Эльбрус великий и ужасный, да для Вас это старьё несусветное по сравнению с современным Лиспом), каждая ячеечка с тэгом аппаратным, всё чин-чином, программируй в своё удовольствие! Не, статический контроль — это только для ленивых, кому лень программу отлаживать, да для педантов, душащих живую программистскую мысль прокрустовыми рамками систем типов. Ну, тут опять моя демагогия была, плюс склероз прогрессирующий, да, да и мафией я подкуплен с потрохами, круговая порука, понимаешь.
Чувствую, дышать легче становится. Ещё немного, и воду пить можно будет. А там, глядишь, может и глаза у меня прозреют, чем чёрт не шутит? Спасибище Вам огромное, мил человек! Хочется надеяться, что не безнадёжен я, не безнадёжен, Вы уж только меня не бросайте на полпути! (хотя и боязно, а вдруг мафия пронюхает и разборки устроит? Ну хоть помру чисетньким да зряченьким)
Re: почему старый LISP?
Date: 2003-02-08 03:43 pm (UTC):)))
прошу прощения за резкость. просто Ваш набор утверждений был ну настолько типовым, что подозревать что-либо кроме тупости и стёба мне было сложно. издержки разницы, тыкскыть, бэкграундов. считайте коммунистом.
> Беру первый свой демагогический трюк назад.
ага. можно совершенно серьёзный и некаверзный вопрос: в Ваших глазах новизна как таковая в самом деле является достоинством? (я говорю о программистских вещах, конечно). если да, почему? мне правда ужасно интересно.
> да какой он к чёрту первый ? мы ведь уже в #1 выяснили, что язык очень молодой, моложе только Фортран
Common Lisp в самом деле имеет мало общего с оригинальным дитём Джона Маккарти. правда. честно. вот Вам магендовид. книжку про него почитайте и поймёте. where does this incredible arrogance come from?
> Не, статический контроль? это только для ленивых, кому лень программу отлаживать, да для педантов, душащих живую программистскую мысль прокрустовыми рамками систем типов.
ну что тут сказать? в данное время используются телефонные свитчи, написанные на Лиспе и Ерланге. Ерланг -- тоже язык "динамический" в смысле контроля типов. я не знаю, существуют ли свитчи, написанные на Хаскеле.
радости статического типирования -- действительно во многом демагогия. программы типа тестировать надо.
(тут надобно ещё различать относительно разумные подходы к типированию вроде ML и Хаскель с горюшком типа C++. отдельная печальная тема, да.)
> А там, глядишь, может и глаза у меня прозреют, чем чёрт не шутит?
практически всем людям свойственно хотя бы про что-нибудь болтать, не понимая объекта болтовни. это нормально. вы не переживайте так, правда.
Re: почему старый LISP?
Date: 2003-02-08 05:20 pm (UTC)прошу прощения за резкость. просто Ваш набор утверждений был ну настолько типовым, что подозревать что-либо кроме тупости и стёба мне было сложно. издержки разницы, тыкскыть, бэкграундов. считайте коммунистом.
Принято. Извиняюсь за стёб в свою очередь — зацепили Вы меня первым комментом. Последние штришки: заметьте, что из двух книжек, упомянутых Анатолием, название только одной из них упоминает Common (хотя вероятно и другая — про него, раз уж это мэйнстрим). Далее, из нескольких десятков лично знакомых мне программистов только один (на самом деле не совсем программист, а профессор CS) пишет (писал?) какое-то искусственно-интеллектное составление расписаний на Лиспе (уж не знаю, Common или каком другом) так что разница бэкграундов/среды общения действительно имеет место. Функциональным язык назван не зря (вот уж не думал, что это слово можно принять за ругательное) и тот факт, контроль типов «динамический» в наше время — практически простое отрицание наличия статического контроля типов. Конечно, корректнее было написать «без статического контроля типов», но для меня это звучит несколько тавтологично. Это моя последняя попытка отбрыкнуться от того, что я носитель типового набора заблуждений о Лиспе. После Ваших поправок он уже никогда не станет обратно девственно-типовым :^). Коммунистом меня считать не стоит, но давайте жить дружно («Нам нужен мир. Желательно, весь» :^) )
Перехожу к существу:
ага. можно совершенно серьёзный и некаверзный вопрос: в Ваших глазах новизна как таковая в самом деле является достоинством? (я говорю о программистских вещах, конечно). если да, почему? мне правда ужасно интересно.
Конечно, нет. Но я верю в небесполезность прогресса, который привёл от программирования на тумблерах к языку ассемблера, потом к Лиспу, и, наконец (в Вашем случае, вероятно), к Common Lisp-у. Так вот в случае функциональных языков мне более интересна та его ветвь, которая привела к ML и Хаскелю. В чём достоинство этой интересной мне разновидности новизны? Повышение уровня абстракций приводит к расширению того круга «глупых» ошибок, которые ловятся различными инструментами ещё до тестирования и отладки. Прогресс в системах типов (видимо, нелюбимый Вами за то, что опирается на некоторые математические построения), произойди он вовремя, помог бы избежать миллионов проблем (я имею в виду, например, дурацкие C баги типа разыменования нуля и присваивания вместо равенства в условии. Вы не читали про Cyclone? Чудовищно запоздалая попытка «исправить» C, а не обвешивать новыми концепциями, как поступил Страуструп). Мои взгляды на программирование маргинальны и расположены сильно в стороне от «столбовой дороги прогресса», но я бы предпочёл писать и отлаживать исполняемые спецификации, доказывая статически их разные полезные свойства, с тем чтобы инструменты сгенерировали по ним гарантированно корректный код (в том смысле, что он удовлетворяет той спецификации, по которой сгенерирован, и которая была протестирована/прочекана на предмет соответствия техзаданию). В реальности же приходится писать на монструозном C++, подыскивая подходящие (современные) инструменты анализа и проверки кода. На функциональных языках я, честно, не писал, но с Прологом дело имел.
Common Lisp в самом деле имеет мало общего с оригинальным дитём Джона Маккарти. правда. честно. вот Вам магендовид. книжку про него почитайте и поймёте. where does this incredible arrogance come from?
Мы близки по возрасту, но учились, очевидно, в разных местах (я закончил питерский матмех в 92м) — вот типа откуда. Книжку про первоначальный Лисп читал, про поздние диалекты — нет (вроде валяется какая-то книжка про какой-то RLisp в коробке — так и не стал читать). Ну неинтересен он мне! А современные «академические» языки — интересны.
Re: почему старый LISP?
Date: 2003-02-08 05:54 pm (UTC)a в техзадании будет указано, что программа должна когда-то остановиться? :)
если серьёзно, то подобный подход возможен только при реализации полностью изученных задач. по моему скромному опыту, таких задач не бывает (то есть бывают, но так там и программисты нафиг не нужны), и нет никаких предпосылок к их появлению. посему языки, в которых Нужно Как Можно Больше Знать Заранее, А Не То Будет Больно -- мне как класс не нравятся. надо идти к реальности, потому что реальность к нам идти не желает.
(это некоторым образом self-fulfilling selection, если можно так выразиться. полностью решённые задачи бывают, но они неинтересны -- так будет точнее).
> Ну неинтересен он мне! А современные «академические» языки — интересны.
легитимно. я не агитацией занимаюсь, просто на дезинформацию болезненно реагирую. особенно на добросовестную дезинформацию по незнанию -- это самая разрушительная разновидность.
> А к вызыванию на флейм у Вас талант или любовь, не иначе.
скорее уж талант, ага. :)
Re: почему старый LISP?
Date: 2003-02-08 06:07 pm (UTC)А какже, с оценочкой сложности, желательно :^)
если серьёзно, то подобный подход возможен только при реализации полностью изученных задач. по моему скромному опыту, таких задач не бывает (то есть бывают, но так там и программисты нафиг не нужны), и нет никаких предпосылок к их появлению. посему языки, в которых Нужно Как Можно Больше Знать Заранее, А Не То Будет Больно -- мне как класс не нравятся. надо идти к реальности, потому что реальность к нам идти не желает.
(это некоторым образом self-fulfilling selection, если можно так выразиться. полностью решённые задачи бывают, но они неинтересны -- так будет точнее).
Согласен (я ведь назвал свои воззрения маргинальными, верно?), но обратный процесс (забивание всё больших кусков реальности в хорошо структурированные, изученные и потому Вам неинтересные блоки) тоже имеет место, и именно в нём польза "новизны" и "прогресса".
легитимно. я не агитацией занимаюсь, просто на дезинформацию болезненно реагирую. особенно на добросовестную дезинформацию по незнанию -- это самая разрушительная разновидность.
ОК, хорошо среагировали, сильно. Вы почаще за программирование пишите, я Вас читать буду.
Re: почему старый LISP? (продолжениу длинного коммента)
Date: 2003-02-08 05:21 pm (UTC)Свичи — благодатная область, там можно разные языки применять и потом доказывать, что применённый — лучше всех. С Хаскелем, вероятно, просто не совпало. Про применение Хаскеля к практическим задачам на его сайте забавная статейка имеется, выглядящая для меня, правда, излишне хвастливо.
радости статического типирования -- действительно во многом демагогия. программы типа тестировать надо.
Надо, кто ж спорит — обидно не вылавливать до тестирования дурацкие ошибки, которые могут быть выловлены статическим анализом. Ну я об этом писал выше.
(тут надобно ещё различать относительно разумные подходы к типированию вроде ML и Хаскель с горюшком типа C++. отдельная печальная тема, да.)
Согласен, C++ — горюшко ещё то, но если некоторые изыски искоренять (виртуальное наследование, например) а другие использовать только по делу (темплэйты), жить можно (хоть и осторожно).
практически всем людям свойственно хотя бы про что-нибудь болтать, не понимая объекта болтовни. это нормально. вы не переживайте так, правда.
Ну так я не переживаю :^). Болтовня для того и предназначена, по-моему (а объектом исходного постинга был не только Лисп, между прочим). Если все всё понимают, получается Разговор (короткий к тому же — чего рассусоливать, если всем всё понятно?) А к вызыванию на флейм у Вас талант или любовь, не иначе.