Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Yuriy Al. Shirokov ([info]yushi)
@ 2006-11-29 11:38:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
"Они убили Кенни! Сволочи!"(с)
SICP переводят со Scheme на Python.

Похоже, эра Lisp-а заканчивается. Очень жаль.

На самом деле (гуманитарий я или где?), у меня скорее эстетические и философские, чем технологические претензии к этому факту. Помните, Пенроуз в "Новом уме короля" обосновывает "платоновскую реальность" математических объектов? Как всякое "доказательство бытия…", его рассуждения несостоятельны логически, но, как всякое хорошее такое доказательство, чрезвычайно убедительны эмоционально.

Так вот, SICP со Scheme в качестве рабочего языка был для меня доказательством "платоновской реальности" идеи языка программирования, того, что это настолько же фундаментальная абстракция, как, скажем, "число" или "сфера". Собственно, Схема как никакой другой язык близка к "эйдосу ЯП", не зависящему от конкретной архитектуры компьютера и даже, возможно, понятия "компьютер" как такового. Питон — тоже отличный язык, но этой вот архетипической красоты в нём нет.

Что ж, "at least they didn't switch to Java", как оптимистично замечает кто-то в комментах по ссылке.


(Добавить комментарий)


[info]toshische.livejournal.com
2006-11-29 11:57 (ссылка)
Любопытное совпадение. Я тут работу менять собрался. И новая, судя по всему, предполагает некоторое количество писания именно на схеме ;)

(Ответить) (Ветвь дискуссии)


[info]yushi
2006-11-29 15:01 (ссылка)
Круто! На мой дилетантский взгляд Scheme безумно красива.

Функциональные языки дважды оставляли у меня ощущения фокуса, если не чуда: когда я впервые увидел программу, считающую факториал на Прологе ("Но это же просто определение факториала? Где вычисления-то?") и когда я увидел в SICP следующее определение пары (на Scheme, понятное дело):
(define (cons x y)
  (define (dispatch m)
    (cond ((= m 0) x)
          ((= m 1) y)
          (else (error "Аргумент не 0 или 1 -- CONS"))))
  dispatch)

(define (car z) (z 0))
(define (cdr z) (z 1))
Впрочем, при чтении SICP чувство некоторой сказочности происходящего, можно считать, вообще не покидало (вот это-то, боюсь, теперь и исчезнет, хотя, конечно, для "real-world design challenges" сказочность — малоактуальное свойство =)).

Жаль, что пациент скорее мертв, чем жив. Я навскидку впомнил только четыре реальных проекта с применением Scheme: GIMP, Audacity, Lilypond и Alterator, причём в первых двух Scheme, похоже, для понта и реальных расширений на ней никто не пишет, Lilypond всё же очень нишевый (хотя и гениальный, конечно) продукт, а относительно будущего Alt Linux у меня самые мрачные предчувствия. =(

Такого ощущения конструктора, из которого можно сделать всё, что угодно, =) не даёт ни один известный мне язык, да.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]toshische.livejournal.com
2006-11-29 22:02 (ссылка)
Я тоже, в общем, дилетант. Я писал когда-то реальное расширение для gimp на схеме.

И насчёт альтератора -- ты угадал. А насчёт будущего alt -- посмотрим. Они набирают разработчиков и, возможно, будут открывать новый офис. В крайнем случае меня с удовольствием возьмут обратно на моё нынешнее место ;)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2006-11-29 23:19 (ссылка)
И насчёт альтератора -- ты угадал.

Я не нарочно. ;)

А насчёт будущего alt -- посмотрим.

Ну, в добрый путь. Я, в принципе, буду очень рад ошибиться — Alt'ом я пользуюсь начиная с Mandrake 6.0 RE, и в последнее время, постоянно имея дело на работе с зоопарком из Windows/SuSE/Mandrake/Fedora, успел понять, как грустно живётся без apt, chkconifg и т.д.

Просто больно уж мрачные размышления навевает одновременное использование Сизифа и Debian Unstable на одной машине. А человек, "подсадивший" меня на Alt, похоже, мигрирует (и свой отдел уведёт) на Ubuntu, не дождавшись очередного ALM — по крайней мере, собирается, как собственную софтину дорелизит. И вообще, по ощущениям (возможно, неверным, ни на какую репрезентативность я не претендую, конечно) пользователей Alt вокруг сейчас на порядок меньше, чем во времена ALM2.4…

Но Альтератор, судя по обрывкам документации, которые попадались мне на глаза — классная штука! Жалко одно — что использующийся там способ описания GUI нельзя использовать в других приложениях, могло бы выйти кабы не убойнее Tcl/Tk, ИМХО. =)

Я тоже, в общем, дилетант. Я писал когда-то реальное расширение для gimp на схеме.

Первое предложение как-то не очень вяжется со вторым. =)

Ты, кстати, обсуждаемую в постинге книжку читал? Не устаю рекламировать недавно вышедший русский перевод, сделанный пользователем [info]gogabr. На меня она произвела действие почти психоделическое — расширила сознание, ага.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]toshische.livejournal.com
2006-11-29 23:35 (ссылка)
Жалко одно — что использующийся там способ описания GUI нельзя использовать в других приложениях,
Вообще-то тамошний способ описания GUI весьма отделим от задачи конфигурирования системы. То есть alterator можно рассматривать как относительно универсальную платформу.

Первое предложение как-то не очень вяжется со вторым
Почему? Я дилетант. Самоучка. Понадобилось припрячь gimp -- почитал полдня и написал нечто работающее. Потом посмотрел сколько времени оно работает, плюнул и решил задачу при помощи autotrace & grep.

Ты, кстати, обсуждаемую в постинге книжку читал?
Кстати -- нет. Хорошая мысль, спасибо. Совсем я замотася что-то..

(Ответить) (Уровень выше)


(Анонимно)
2007-02-05 12:07 (ссылка)
Как это не пишет? Даже я пишу? А как там еще писать? Плугины-то сложнее..... К понту SIOD не имеет никакого отношения в GIMPе

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2007-02-05 17:11 (ссылка)
"Кто здесь?"© =)))

(Ответить) (Уровень выше)

наткнулся
[info]polytheme
2008-09-01 18:13 (ссылка)
у меня, кстати, тоже было несколько психоделических моментов с программированием, а именно
1) да, Пролог - он был совершенно замечательный
2) perl, где меня шокировало, что функции могут перегружаться
не по типу параметров, а по типу возвращаемого значения
3) scheme в основном благодаря книжке - там куча моментов,
как ступеньки - tail-recursion, функции высшего порядка, ленивые
вычисления, потоки как бесконечные списки
4) C++, когда я узнал, что можно написать class X: public Y,
а потом - когда понял, что на шаблонах можно сделать рекурсию
(после чего прочел Александреску, чтобы совсем крышу снесло)
5) ocaml, когда я понял отчетливо, что он вызывает ощущение
скриптового (из-за чего его многие воспринимают как недоперл-недопитон),
а ведь он, зараза, типизированный жестче C++
6) haskell, когда ознакомился с его системой типов
7) smalltalk, когда я осознал, как там реализован boolean :)
8) python, когда разобрался, как работают метаклассы
и какую мощь из этого можно выжать (правда, потом оказалось,
что эту мощь не очень приятно отлаживать :)
9) когда я наконец разобрался с camlp4 (но скоро стал чувствовать,
что там все-таки ощутимо не хватает информации о типах)

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: наткнулся
[info]yushi
2008-09-02 00:54 (ссылка)
Солидный список, где-то половина мне только предстоит.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: наткнулся
[info]polytheme
2008-09-02 03:21 (ссылка)
>> Насчёт Пролога
по большей части это правда, и вообще это проявление некоторой общей тенденции - когда говорится, что не нужно думать о конкретной реализации,
это недумание нередко выливается в головную боль (этим и хаскель страдает, и даже немного ocaml - например, в тех случаях, когда приходится задумываться, везде ли в вызовах рекурсия хвостовая, или где-то может стек переполниться)

но тем не менее, ветвь вроде бы не совсем тупиковая, есть например такая экспериментальная помесь ежа с ужом:
http://www.informatik.uni-kiel.de/~mh/curry/

(Ответить) (Уровень выше)

доп. :)
[info]polytheme
2008-09-02 09:48 (ссылка)
ну и хвостовая рекурсия - это в принципе во всей функциональщине, а у ocaml'а
есть своя прекрасная проблема - когда у тебя написано (for instance) List.map (function x -> g x y) ..., и компилятор выдает ошибку "x обладает типом int*'a list, а требуется тип ('b*int) list", приходится таскаться по всей программе и думать, откуда он чего так вывел, и где какие типы должны быть
от этого придумываются лекарства, но, думаю, и разветвление поиска истинности в бесконечность в Прологе тоже должно как-то диагностически лечиться

(Ответить) (Уровень выше)

поправка
[info]polytheme
2008-09-02 03:24 (ссылка)
#@%&*)$$' html ! имелось в виду, конечно, class X: public Y<X;> :)

(Ответить) (Уровень выше)


[info]haron.livejournal.com
2006-11-29 13:47 (ссылка)
Слушай, а вот ты людей учишь программировать. Ты какой язык им даешь?

(Ответить) (Ветвь дискуссии)


[info]yushi
2006-11-29 14:36 (ссылка)
Кресты. До этого они ещё учат Питон (текущий поток делал это не со мной), и под занавес будет немного Паскаля в виде Delphi.

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

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

С другой стороны, когда я этим летом разговаривал с [info]gogabr (помимо всего прочего, это как раз автор русского перевода SICP), он довольно скептически отнёсся к идее начинать обучение программированию с функциональных языков. А он-то в вопросе разбирается заметно лучше меня. Я, впрочем, всё равно попросил его привезти мне из Штатов "The Little schemer". =)

(Ответить) (Уровень выше)


[info]kstoor.livejournal.com
2006-11-29 15:10 (ссылка)
Эх... Этот перец там русским языком объясняет, что к чему: "to better prepare students for <...> real-world design challenges". Имхо, это часть фундаментального противоречия между педагогическим процессом и современным real-world chalenge. Первое все еще предполагает ориентацию на научность, логичность, или как минимум правильность -- за неправильно решенную задачу ставить положительную оценку до сих пор как-то не принято. В реал-лайфе все давно сфокусировано на достижении ближайшей цели: пусть программа, строго говоря, работает неправильно, главное, чтобы выдавался "правильный" результат. Жалко, не сохранил ссылку -- недавно на каком-то форуме чел очень грамотно побил пхп именно за подход "it works for me". Истинная правда, только все пишут и не жалуются.

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

(Ответить) (Ветвь дискуссии)


[info]yushi
2006-11-29 23:34 (ссылка)
"to better prepare students for <...> real-world design challenges".

Да, если говорить о более практических материях, то вот это и смущает больше всего. В конце концов, не в языке дело — тот же Питон достаточно гибок, чтобы сделать из некоторого его подмножества этакий маленький псевдо-Лисп, позволяющий объяснить все концепции SICP — а что он будет тормозной (из-за отсутствия хвостовой рекурсии) и эстетически уродливый, так это уже лирика. В Питоне хватает средств, делающих его ближе к Scheme, чем, скажем, к PHP — ;) lambda (и вообще функции как first class objects), генераторы, списковые включения — но, насколько я понимаю, народом они не очень востребованы. "Yes, I do, а что толку?"

Мне, конечно, свойственно сгущать краски, но, похоже, нормальным явлением становится "программист", хорошо знающий определённую IDE и кучу библиотек, но не способный написать, скажем, обход дерева. Костя [info]savenkov@lj, кажется, рассказывал о старшекурснике ВМК, не знавшем, что такое "пространство имён".

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]toshische.livejournal.com
2006-11-29 23:39 (ссылка)
Ага. Видел полно таких выпускников Бауманки на предыдущей работе. Программисты на Delphy 6.0, блин.

Насчёт обхода дерева вспомнилась история как группа программистов неделю писала обход дерева на... XSLT. И жаловались что язык уродский и т.п. ;) Хотя синтаксис дейстительно тот ещё..

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2006-11-30 02:13 (ссылка)
группа программистов неделю писала обход дерева на... XSLT

Э… а что, на XSLT можно написать что-нибудь ещё? Или я чего-то не понимаю?

Синтаксис там… своеобразный, да. Но я в своё время (кстати, по твоей наводке) с ним поигрался и получил массу удовольствия. Оно даже пригодилось впоследствии — братец попросил помочь сделать небольшой сайт, и я ему сосватал XSLT + make в качестве недо-CMS.

Собственно, именно благодаря XSLT я понял, что такое декларативное программирование.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]toshische.livejournal.com
2006-11-30 10:42 (ссылка)
Они написали обход дерева ВРУЧНУЮ. То есть у них был xsl:template match="/", а дальше всё через xsl:for-each и рекурсию. В общем -- спать в спальнике неплохо, но душно, и очень мёрзнут ноги ;)))

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2006-11-30 12:35 (ссылка)
О-ой… *сваливается под стол*

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

(Ответить) (Уровень выше)


[info]gns-ua.livejournal.com
2009-04-10 19:05 (ссылка)
> Э… а что, на XSLT можно написать что-нибудь ещё?

ну он Turing complete, если чо.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2009-04-11 01:40 (ссылка)
Ну кагбе имелось в виду, что это в некотором смысле его основная ниша. " — Они умудрились спилить дерево бензопилой. — А что, бензопилой можно сделать что-нибудь ещё? — Да, но они её не включали".

(Ответить) (Уровень выше)


[info]polytheme
2008-09-01 18:17 (ссылка)
>> но, насколько я понимаю, народом они не очень востребованы.
это ты зря. генераторы начинают торчать из практически любой программы за тысячу строк (когда начинается уже проектирование, а не гоночное писание с чистого листа), list comprehensions и lambda вообще на каждом шагу,
и более-менее опытные ребята всегда ругаются, когда вместо xrange используется range :)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2008-09-01 19:25 (ссылка)
Я слышал, что Гвидо не любит функциональщину и грозится из Python 3000 все эти лямбды-шлямбды нафиг повыкидывать. Впрочем, на уровне слухов, за разработкой Python3000 я не слежу.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]polytheme
2008-09-02 03:57 (ссылка)
ну нет, все-таки задницы бабам резать не будут:
lambda will not be renamed.
у Россума действительно как-то проскользнуло такое желание
(в основном ему не нравился невнятный fold, который в питоне называется
reduce - и я частично с ним согласен, но скорее в ту сторону, что fold нужно прояснить, а не избавляться от него),
но народ встал с вилами, и Россум сдался

(Ответить) (Уровень выше)


[info]kstoor.livejournal.com
2006-11-29 17:45 (ссылка)
А вот интересно -- час назад здесь комментов было гораздо больше. Это глюки лж.россия.орг или проделки супое%а носика?

(Ответить) (Ветвь дискуссии)


[info]kstoor.livejournal.com
2006-11-29 17:46 (ссылка)
Едрить твою. При перезагрузке они обратно появились. Суп, как есть суп.

(Ответить) (Уровень выше)


[info]smilga.livejournal.com
2006-11-29 18:50 (ссылка)
Real-world design challenges my ass. Суки позорные.

(Ответить)


(Анонимно)
2006-12-04 08:39 (ссылка)
Олег Медведев Москва 14 декабря - сольный концерт в ДомЖуре (без давки и сигаретного дыма)
Билеты продаются круглосуточно!!! Приобретайте заранее.
Москва, Центральный Дом Журналиста http://domjour.ru/ начало в 19 часов.м.Арбатская, Никитский б-р. 8-А. Концертный зал (сталинский ампир) - 180 мест. Стоимость билетов от 200 до 600 рублей. Продажа билетов в ЦДЖ ежедневно, тел. 291-5698

(Ответить)


(Анонимно)
2007-02-09 23:36 (ссылка)
Насколько я знаю — это всего-лишь эксперимент.
Ещё не родился тот человек, который способен убить лисп.
--
ljuser: sdfgh153
Логиниться влом, с чужой машины (-:

(Ответить)


[info]max630.livejournal.com
2009-04-13 03:56 (ссылка)
гы, я когда почитывал его, как раз делал упражнения на питоне.

(Ответить) (Ветвь дискуссии)


[info]yushi
2009-04-13 10:47 (ссылка)
С помощью какого интерпретатора, Stackless что ли?

Потому что со стандартным CPython, не поддерживающим хвостовую рекурсию, упражнения из SICP особо не поделаешь.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]max630.livejournal.com
2009-04-13 11:04 (ссылка)
нет, на обычном.

Да, было такое. Ничего не делал про это, видимо ужимал объёмы. По крайней, мере, в коде следов переделок на циклы не вижу. Подробностей уже не помню.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2009-04-13 11:18 (ссылка)
Ой.

Не обижайтесь, но ваш опыт мне напомнил вот эту историю про глинтвейн.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]max630.livejournal.com
2009-04-13 11:26 (ссылка)
Сходство больше чем вам кажется - я не нашёл scheme для maemo (там было guile в репозиториях, но что-то там не заладилось), а на большом десктопе мне как-то не до того было.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yushi
2009-04-13 11:35 (ссылка)
Сходство больше чем вам кажется

Ну, понятно — любой динамически типизированный язык, где функции — это first class objects, для этих упражнений как-то подойдёт. Видел где-то SICP'овские упражнения на JavaScript, кстати — при всей моей любви к Питону, это производило куда лучшее впечатление. Может быть, потому, что в JS аналог lambda не такой куцый, как в Питоне.

я не нашёл scheme для maemo

N800, OS2008, guile — полёт нормальный. Или у вас 2007?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]max630.livejournal.com
2009-04-13 12:21 (ссылка)
> в JS аналог lambda не такой куцый, как в Питоне

Состояние lambda в python печально, но при наличии вложенных функций это косметический недостаток, по-моему. Меня больше бы беспокоило отсутствие макросов, но они в SICP как раз не ипользуются.

у меня всё то же. Почему не поставил guile - не помню совсем.

(Ответить) (Уровень выше)