singalen: (humpty-dumpty)
singalen ([personal profile] singalen) wrote2005-11-22 09:36 am

Несортированные заметки по треку SICP (книга по Scheme)

Кстати, вот SICP на вебе.
По предисловию: "Стал основой текстовых редакторОВ, шеллОВ и CAD-ОВ". Где теперь те редакторы, или тот ЛИСП в них? Аддоны к Автокаду давно пишут на плюсах и т.д. SchemeShell - кто им пользуется? EMACS-ом пользутся, но он своё отживает - есть Eclipse. "Хорошая ОС, но в ней хреновый текстовый редактор".

Замена итерации на рекурсию требует некоторой практики мышления - особенно на "хвостовую" рекурсию, которую Лисп-машина таки-развернёт в итерацию.

Что было нового


* Синтаксис :) Оказывается, в нём есть-таки локальные имена.
Подстановочная и нормальная модели вычисления. Оказывается, Лисп-программу можно вычислять разными путями :)

* Отслеживание породжаемого процесса в Лисп-машине. Хвостовая и "деревянная" рекурсии имеют очень-очень разное воздействие на выполнение программы, а заметить разницу достаточно сложно - минус Лиспу.

* Как легко решается задачка о размене монет. Почти как на Прологе, тоьлко больше скобок :)

* Передача процедур параметром или возвращаемым значением. С этим всё понятно, это мы до сих пор видели только в виде неудобоваримых function objects. Ну ничего, разгрызём libboost_lambda, ещё не ту будет :)
Кстати, почитал туториал по libboost_lambda. А знаете, не так страшен чёрт, как его малюют. Очень приятный синтаксис :) Но опасный. Есть шанс запутать текст на плюсах ещё хуже чем на Лиспе :)

Что осталось непонятным


* Почему Лисп-программы из упражнений первой главы будут вычисляться по-разонму, если их считать в разных моделях. Если эти программы корректны, конечно. См. упражнение 1.5:
Ben Bitdiddle has invented a test to determine whether the interpreter he is faced with is using applicative-order evaluation or normal-order evaluation. He defines the following two procedures:
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))

Then he evaluates the expression
(test 0 (p))
- может, здесь для аппликативной модели просто будет бесконечная рекурсия? Тогда программа решает свою задачу, мягко скажем, неоптимально.

* Есть ли принципиальное отличие определения функции (deffunc в Common Lisp) от define, setq и let? Я знаю, что они немного отличаются синтаксически, но отличаются ли функционально?

* Что в русском PDF-е SICP-а с чарсетом? На PC показывает русские буквы, но Copy-n-Paste вклеивает мусор в кодировке us-ascii. Наладонник показывает тот же us-ascii. Может, кто-то знает, как подредактироват этот PDF на предмет информации о чарсете?


Просьба остальным участникам трека, хоть они и далеко впереди, просмотреть первые главы и написать аналогичный документик.
Потом его можно распечатать и предложить остальным пройтись по нему.

Да, Саша Долгин так и не получил от нас вразумительного ответа, что же хорошо писать на Лиспе, кроме неизвестных почти никому задач ИИ. Будем искать :)


Цитаты:
(Сергей забыл на работе документы на машину) "Бегать за документами ногами - это по си-плюс-плюсному. Позвони гардам".
(по поводу каких-то рецептов того, как писать хороший код) "Чтобы попки были сухими и чистыми, их надо чисить и сушить".

[identity profile] dottedmag.livejournal.com 2005-11-22 07:04 am (UTC)(link)
Emacs не отживает. Eclipse слишком негибок.

[identity profile] dottedmag.livejournal.com 2005-11-22 07:35 am (UTC)(link)
C-h t пробовал? ;)

[identity profile] dottedmag.livejournal.com 2005-11-22 07:43 am (UTC)(link)
Ещё бы эта 'подручная IDE' расширялась быстро, без отладки второй копии самой себя в себе самой и перезагрузки по каждому чиху и поставленному плагину.

[identity profile] dottedmag.livejournal.com 2005-11-22 07:55 am (UTC)(link)
Это уже, наверное, метауровень - когда вычленяешь не только одинаковые действия в своей программе, но и одинаковые действия в работе над своей программой, и отдаёшь их на откуп редактору. Скажем, не нравится мне, как оно выполняет comment-block на питоне - взял и поправил пару строк, или как оно делает отступы в pmake-mode, или что-то ещё, вместо того, чтобы каждый раз идти и править ручками то, что не сделано редактором.

[identity profile] dottedmag.livejournal.com 2005-11-22 08:15 am (UTC)(link)
Способен, способен. Привязка первых двух фич к IDE - это идиотизм, ибо означает, что любые автотесты на сервере, или любая другая автоматизация невозможно. Исходим из того, что их программисты - не полные идиоты, значит это отдельные инструменты, которые легко обвязываются и втягиваются внуть Emacs.

На третье способен. Кстати, в Eclipse CDT неюзабелен.

[identity profile] dottedmag.livejournal.com 2005-11-22 08:39 pm (UTC)(link)
XRefactory по заказу собирается под любую вменяемую платформу.

А сколько, говоришь, в CDT просасывается в память большой проект, мег этак на дцать?

[identity profile] dottedmag.livejournal.com 2005-11-22 11:24 pm (UTC)(link)
Стоит? Скажи это тому xrefactory, который на моей машинке крутится =)

[identity profile] dottedmag.livejournal.com 2005-12-07 01:18 am (UTC)(link)
Да-да. И это был баг и две константы, нужные мне, хе-хе. It just works.

[identity profile] dottedmag.livejournal.com 2005-12-07 07:09 am (UTC)(link)
Эээ. Читаем между строк то, чего там нет? Мешающий мне баг (точнее, два бага) были исправлены в течение двух дней.

Re: Reply to your comment...

[identity profile] dottedmag.livejournal.com 2005-12-08 06:47 am (UTC)(link)
Пользователей не слишком много, но и багов невелико число: я что-то
ужасное сделал на шаблонах, чуть ли не ML-вывод типов =)

А можно поподробнее про индустрию? Какую конкретно индустрию?
Индустрии - они разные бывают. Где-то Java много, где-то - C++, где-то
C, где-то PHP, где-то Perl (да, есть и такие), где-то Fortran вне
конкуренции, и никто его заменять не собирается.

Re: Reply to your comment...

[identity profile] dottedmag.livejournal.com 2005-12-08 07:23 am (UTC)(link)
Ладно, взял первые две страницы вакансий IT с job.ngs.ru, отбросив
непрограммерские должности типа "оператор ПК", "менеджер по продажам"
или сисадминские должности (нашёл, кстати, требование на кисководов =):

архитектор - 1
архитектор Java - 1
аналитик - 2
программист поддержки - 2
программист C - 1
программист C++ - 2
программист C# - 2
программист абстрактный - 2
программист 1C - 3
программист PHP - 2
программист Java - 3
программист Lotus Notes - 1
спец. по информационной безопасности - 1
SAP-программист - 1
программист Unix - 1 (хе, там, где я работаю =)

(инженер QA - наверное не надо сюда включать)

Так что "индустрия" - это понятие весьма расплывчатое.

ps: А с чего ты взял, что я считаю, что C++ не нужно похоронить? :)
Вообще он в топике только из-за вопроса "а <это> emacs умеет?" Вообще
мне больше языки того же ML-семейства нравятся.

[identity profile] dottedmag.livejournal.com 2005-11-22 07:44 am (UTC)(link)
Да, это tutorial. О чём было написано сразу при загрузке Emacs =)

[identity profile] http://users.livejournal.com/_radiant_/ 2005-11-22 07:31 am (UTC)(link)
> слишком негибок

f. ex?
чего в нём не хватает и хочется поменять, а не можется?

[identity profile] dottedmag.livejournal.com 2005-11-22 07:34 am (UTC)(link)
Жёстко забитый стиль IDE с его тулбарчиками, менюшками et al, отсутствующая система кросс-редакторной расширяемости (нельзя взять autocompletion оттуда, раскраску синтаксиса - оттуда, и добавить в меню фичу от вот этого режима), плюс невнятная runtime-поддержка (новый плагин на ходу не добавишь).

vim eclipse.java - это, конечно, круто, но слишком долго.

[identity profile] http://users.livejournal.com/_radiant_/ 2005-11-22 07:56 am (UTC)(link)
> Жёстко забитый стиль IDE с его тулбарчиками, менюшками
В смысле, скин или расположение тулбаров?
Последнее вообще вроде автоматом в воркспейсе сохраняется.
Или что-то другое?

> новый плагин на ходу не добавишь
запуск второго Eclipse-приложения ни катит?
(мне эта фишка наоборот нравится: обкатал в отдельном, понравилось, добавил в воркспейс по умолчанию)

> vim eclipse.java
не всё так плохо :)
к этому самолёту плагины нормально прикладываются. и вроде, многое могут...

[identity profile] dottedmag.livejournal.com 2005-11-22 08:11 am (UTC)(link)
В смысле то, что совершенно ненужные мне элементы UI, такие, как менюшки, тулбары, статусбары, списки workspace'ов и прочее мешаются на экране и их не отключить.

[identity profile] http://users.livejournal.com/_radiant_/ 2005-11-22 08:26 am (UTC)(link)
ну во-первых, у меня по дефолту нет "статусбары, списки workspace'ов".
во-вторых, это лечится выбором нужной перспективы и убиранием ненужных view.
если нужной перспективы не находится, можно написать новую -- в синтаксисе нужного xml разобраться можно.

Варнинг: я говорю про еклипс 3.1.

[identity profile] dottedmag.livejournal.com 2005-11-22 09:09 am (UTC)(link)
Ага, статусбара и списка воркспейсов нет, а менюшки и тулбара - есть. И не убрать. Мне, который браузер клавиатурой использует - дико мешает. Глаза зацепляются, уменьшает высоту окошка с текстом.

Далее - интерфейс так просто не меняется. Вот утомляет меня то, что в перспективе oxygen при сохранении файла он проверяется на синтаксис и если таковой невалиден - UI выходит из режима "распахнуть на весь экран" и показывает свой идиотский View 'problems', а хрен поменяешь: плагин компилировать, ставить, и нет прослойки между функциональностью, и интерфейсом, которую можно менять как хочешь.

Мы же не домохозяйки какие, которым M$Word хватает.

[identity profile] dottedmag.livejournal.com 2005-11-22 08:41 pm (UTC)(link)
Мне они не нравятся с точки зрения usability. Точка. На инструментах, look, а главное - feel, которых нельзя изменить, работать неудобно.

Если вводить abstraction layer - да, но это путь недожабщиков. Нормальные люди лишь развязывают реалиацию функциональности и UI, не вводя особой сложности: тут не нужен никакой abstraction layer.