?

Log in

дневник, интересно только программистам итд. - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

дневник, интересно только программистам итд. [ноя. 5, 2006|11:08 am]
Anatoly Vorobey

В начале октября я взял на себя обязательство изучить за месяц язык Лисп, и в целом выполнил его раньше срока. К концу месяца я достаточно свободно читал программы на Лиспе, и писал что-то пусть простое, но не вполне тривиальное с точки зрения языка (в первый раз, когда у меня окончательно отладился и заработал небольшой набор макросов, использующих другие макросы и в целом выполняющих свою работу сквозь 2-3 степени вложения/разложения обратными кавычками и запятыми, на душу снизошел покой).

Теперь мне хочется написать что-то нетривиальное на Лиспе (Common Lisp'е, если быть точным), чтобы немного закрепить изученное, и я решил в свободное время -- которого и так, конечно, очень мало -- написать парсер языка Perl6, т.е. новой, находящейся сейчас в разработке версии Перла. Это достаточно глупая затея, потому что очень хороший парсер, да и интерпретатор, да и значительная часть компилятора уже есть, в рамках проекта Pugs, написанного частично на Хаскеле, частично уже на Perl6; чтобы следить за этим проектом и в чем-то в нем участвовать, я в начале этого года изучил Хаскель и участвовал в хакатоне на эту тему. Но тем не менее, так вот захотелось. Посмотрим, что из этого выйдет, и выйдет ли что-нибудь.

На самом деле я пишу эту запись, чтобы зарегистрировать забавное ощущение, с которым я и прежде был знаком, но не в столь очищенной форме. То, что я хочу сделать - не такая уж простая задача, потому что Perl6 - язык, позволяющий динамически менять не только значения своих операторов (как operator overloading в C++), но и вообще почти всю структуру языка, включая ключевые слова и как они работают, включая введение новых операторов и мета-операторов в язык, и многое другое. При этом эти новые операторы или макросы (похожие по своему действию на макросы Лиспа, т.е. несравнимо более мощные, чем макросы таких языков, как C/C++) могут вводится динамически, их действие может быть лексически ограничено блоком кода, итд. итп. Где-то три дня назад я закончил простенький, но достаточно мощный parser generator для рекурсивных top-down parsers (этого вполне достаточно в данном случае), и казалось бы, сиди и выписывай правила. Но последние три дня получилось так, что я не написал ни строчки кода (причем я как бы все время порывался начать, но что-то все время меня останавливало, очередная навязчивая мысль), а вместо этого думал и передумывал то, как это в принципе должно быть устроено, перечитывал spec итд. И по мере того, как я об этом думал, у меня в голове постепенно все пере-укладывалось в гораздо более стройную картину, всякие вещи, которые я сначала думал, что будут сложными специальными случаями, оказались частными случаями общего принципа, всякие отдельные правила, которые я собирался выписывать, оказались уже готовыми, если я сделаю другую общую вещь, итд. итп. В подробности нет смысла вдаваться, но общее ощущение было такое - я не написал ни строчки, но объем работы, который мне предстоит, уменьшился где-то раза в три, не говоря уж о том, что все очень прояснилось. Очень забавное (и приятное) ощущение.

СсылкаОтветить

Comments:
[User Picture]From: _pk_sly
2006-11-05 09:30 am
да, приятное ощущение того, что будешь делать ХОРОШУЮ вещь.

типа - рефакторинг лучше делать ДО написания кода 8)
(Ответить) (Thread)
[User Picture]From: avva
2006-11-05 12:13 pm
Именно :) очень качественный получился рефакторинг!
(Ответить) (Parent) (Thread)
[User Picture]From: evr
2006-11-05 09:44 am
Нет, вы, конечно, все-таки монстр.
(Ответить) (Thread)
[User Picture]From: kouzdra
2006-11-05 09:49 am
Данное ощущение означает что у Perl6 хороший, но непривычный дизайн.
(Ответить) (Thread)
[User Picture]From: avva
2006-11-05 12:03 pm
Так и есть. Непривычный с точки зрения имплементирования языка, с точки зрения пользователя он очень похож на Perl5, конечно, хотя есть и заметные различия, и множество интереснейших новшеств.
(Ответить) (Parent) (Thread)
From: 9000
2006-11-05 10:04 am
Косвенно по поводу этого вспомнилаь байка про знаменитого физика (типа Резерфорда), который заметил, что некий его аспирант всё время проводит в лаборатории, что-то строит, экспериментирует, etc. Он спросил у него: "А когда же вы думаете?" :)

(И тут: стоило несколько дней пораздумывать, и...)
(Ответить) (Thread)
[User Picture]From: dimrub
2006-11-05 10:12 am
Что-то подобное делал Эдисон при наборе новых работников, как мне смутно припоминается.
(Ответить) (Parent) (Thread)
[User Picture]From: cmm
2006-11-05 11:07 am
берегись злой Левой Рекурсии!
(Ответить) (Thread)
[User Picture]From: avva
2006-11-05 12:01 pm
Уже все, нет никакой левой рекурсии.
(Ответить) (Parent) (Thread)
[User Picture]From: shmel39
2006-11-05 01:42 pm
Да, согласен - приятное ощущение. У меня месяца два назад такое произошло с Явой. Могу сказать, что снизошло озарение.

+ У меня такие вопросы. Сколько приблизительно времени Вы на затратили на это? Т.е. по сколько часов в день? Был ли он нужен в работе или в порядке хобби?
(Ответить) (Thread)
[User Picture]From: avva
2006-11-05 02:03 pm
В смысле, Лисп изучать? Я шел по этой книге, ровно одна глава в день - кроме нескольких последних, т.к. там один код, что в принципе тоже хорошо, но у меня свой есть теперь задача написать. На главу уходит от 15 до 30 мин прочитать, иногда еще столько же попробовать что-то в среде потыкать самому, если есть время - я специально не замерял. В конце месяца я начал писать что-то нетривиальное сам, и это уже заметно больше времени требует, конечно.
(Ответить) (Parent) (Thread)
[User Picture]From: shmel39
2006-11-06 02:48 am
Спасибо за ссылку - почитаю.

И еще: какую среду Вы использовали? Lisp in a Box?
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2006-11-06 06:39 am
Я намеревался, но так и не преодолел некоторой неприязни к emacs'у (которая является маятниковой реакцией после 10+ лет его использования), и в результате просто пишу код в vim и загружаю его в clisp'е. Но может быть еще вернусь к Lisp in a Box (точнее, к SLIME, которая является его главной частью).
(Ответить) (Parent) (Thread)
[User Picture]From: shmel39
2006-11-06 06:50 am
Понятно. Спасибо.

Подыскиваю себе занятие в свободное время, захожу почитать френдленту, а тут Вы описываете свой опыт с Lisp...
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2006-11-06 07:18 am
:)

Если решитесь, то очень рекомендую именно эту книгу. Ее очень хвалили знатоки, и я не пожалел, что ее выбрал, очень хорошая, действительно.
(Ответить) (Parent) (Thread)
[User Picture]From: nm_work
2006-11-07 11:31 pm
а в виде ебука она не встречалась?
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2006-11-07 11:45 pm
Да она вся бесплатно выложена на сайте автора.
http://www.gigamonkeys.com/book/
(Ответить) (Parent) (Thread)
[User Picture]From: nm_work
2006-11-07 11:56 pm
я тормоз :) в четыре часа ночито :)
(Ответить) (Parent) (Thread)
From: amerind
2006-11-05 01:59 pm
я так понял из вашего описания, perl шагнул в сторону ruby, это не может не радовать))
(Ответить) (Thread)
[User Picture]From: avva
2006-11-05 02:00 pm
гм, не совсем :)
(Ответить) (Parent) (Thread)
From: amerind
2006-11-05 05:13 pm
я имел ввду больший уклов в ООП, переопределение операторов, мета-програамирование, а так конечно не совсем:)
(Ответить) (Parent) (Thread)
[User Picture]From: cmm
2006-11-05 02:06 pm
изучайте первоисточники.
(Ответить) (Parent) (Thread)
From: sply
2006-11-05 03:39 pm
Теперь осталось дойти до высшего дао - понять задачу настолько ясно, чтобы стало не интересно тратить время на ее набор ее решения :)
(Ответить) (Thread)
[User Picture]From: gianthare
2006-11-06 07:00 am
Eto 5.
(Ответить) (Parent) (Thread)
[User Picture]From: angerona
2006-11-05 05:08 pm
ну ты даешь.Cила!
(Ответить) (Thread)
[User Picture]From: igorlord
2006-11-05 08:48 pm
Ну, так всегда нисходит озарение, когда вместо того чтобы открывать Eclipse, Visual Studio, и т.д. открываешь emacs, Word, и т.д. и пишешь Functional Requirments и Design Specification. Даже если ты это пишешь исключительно для себя. Очень многие вещи находят свои места и становятся ровненько в красивый и "правилный" дизайн.
(Ответить) (Thread)
[User Picture]From: migmit
2006-11-07 08:08 am
А на сам Perl6 стоит глядеть? А то руки пока не дошли...
(Ответить) (Thread)
[User Picture]From: zlyuk
2006-11-14 11:13 am
типично математический экспириенс - действительно, дао а-ля математика. чем больше думаешь, тем глобальнее перспектива и понятнее конкретные случаи. computer science, в общем...
(Ответить) (Thread)