avva: (Default)
[personal profile] avva

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

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

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

Date: 2006-11-05 09:30 am (UTC)
From: [identity profile] -pk-sly.livejournal.com
да, приятное ощущение того, что будешь делать ХОРОШУЮ вещь.

типа - рефакторинг лучше делать ДО написания кода 8)

Date: 2006-11-05 12:13 pm (UTC)
From: [identity profile] avva.livejournal.com
Именно :) очень качественный получился рефакторинг!

Date: 2006-11-05 09:44 am (UTC)
From: [identity profile] evr.livejournal.com
Нет, вы, конечно, все-таки монстр.

Date: 2006-11-05 09:49 am (UTC)
From: [identity profile] kouzdra.livejournal.com
Данное ощущение означает что у Perl6 хороший, но непривычный дизайн.

Date: 2006-11-05 12:03 pm (UTC)
From: [identity profile] avva.livejournal.com
Так и есть. Непривычный с точки зрения имплементирования языка, с точки зрения пользователя он очень похож на Perl5, конечно, хотя есть и заметные различия, и множество интереснейших новшеств.

Date: 2006-11-05 10:04 am (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Косвенно по поводу этого вспомнилаь байка про знаменитого физика (типа Резерфорда), который заметил, что некий его аспирант всё время проводит в лаборатории, что-то строит, экспериментирует, etc. Он спросил у него: "А когда же вы думаете?" :)

(И тут: стоило несколько дней пораздумывать, и...)

Date: 2006-11-05 10:12 am (UTC)
From: [identity profile] dimrub.livejournal.com
Что-то подобное делал Эдисон при наборе новых работников, как мне смутно припоминается.

Date: 2006-11-05 11:07 am (UTC)
From: [identity profile] cmm.livejournal.com
берегись злой Левой Рекурсии!

Date: 2006-11-05 12:01 pm (UTC)
From: [identity profile] avva.livejournal.com
Уже все, нет никакой левой рекурсии.

Date: 2006-11-05 01:42 pm (UTC)
From: [identity profile] shmel39.livejournal.com
Да, согласен - приятное ощущение. У меня месяца два назад такое произошло с Явой. Могу сказать, что снизошло озарение.

+ У меня такие вопросы. Сколько приблизительно времени Вы на затратили на это? Т.е. по сколько часов в день? Был ли он нужен в работе или в порядке хобби?

Date: 2006-11-05 02:03 pm (UTC)
From: [identity profile] avva.livejournal.com
В смысле, Лисп изучать? Я шел по этой книге, ровно одна глава в день - кроме нескольких последних, т.к. там один код, что в принципе тоже хорошо, но у меня свой есть теперь задача написать. На главу уходит от 15 до 30 мин прочитать, иногда еще столько же попробовать что-то в среде потыкать самому, если есть время - я специально не замерял. В конце месяца я начал писать что-то нетривиальное сам, и это уже заметно больше времени требует, конечно.

Date: 2006-11-06 02:48 am (UTC)
From: [identity profile] shmel39.livejournal.com
Спасибо за ссылку - почитаю.

И еще: какую среду Вы использовали? Lisp in a Box?

Date: 2006-11-06 06:39 am (UTC)
From: [identity profile] avva.livejournal.com
Я намеревался, но так и не преодолел некоторой неприязни к emacs'у (которая является маятниковой реакцией после 10+ лет его использования), и в результате просто пишу код в vim и загружаю его в clisp'е. Но может быть еще вернусь к Lisp in a Box (точнее, к SLIME, которая является его главной частью).

Date: 2006-11-06 06:50 am (UTC)
From: [identity profile] shmel39.livejournal.com
Понятно. Спасибо.

Подыскиваю себе занятие в свободное время, захожу почитать френдленту, а тут Вы описываете свой опыт с Lisp...

Date: 2006-11-06 07:18 am (UTC)
From: [identity profile] avva.livejournal.com
:)

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

Date: 2006-11-07 11:31 pm (UTC)
From: [identity profile] nm-work.livejournal.com
а в виде ебука она не встречалась?

Date: 2006-11-07 11:45 pm (UTC)
From: [identity profile] avva.livejournal.com
Да она вся бесплатно выложена на сайте автора.
http://www.gigamonkeys.com/book/

Date: 2006-11-07 11:56 pm (UTC)
From: [identity profile] nm-work.livejournal.com
я тормоз :) в четыре часа ночито :)

Date: 2006-11-05 01:59 pm (UTC)
From: [identity profile] amerind.livejournal.com
я так понял из вашего описания, perl шагнул в сторону ruby, это не может не радовать))

Date: 2006-11-05 02:00 pm (UTC)
From: [identity profile] avva.livejournal.com
гм, не совсем :)

Date: 2006-11-05 05:13 pm (UTC)
From: [identity profile] amerind.livejournal.com
я имел ввду больший уклов в ООП, переопределение операторов, мета-програамирование, а так конечно не совсем:)

Date: 2006-11-05 02:06 pm (UTC)
From: [identity profile] cmm.livejournal.com
изучайте первоисточники.

Date: 2006-11-05 03:39 pm (UTC)
From: [identity profile] sply.livejournal.com
Теперь осталось дойти до высшего дао - понять задачу настолько ясно, чтобы стало не интересно тратить время на ее набор ее решения :)

Date: 2006-11-06 07:00 am (UTC)

Date: 2006-11-05 05:08 pm (UTC)
From: [identity profile] angerona.livejournal.com
ну ты даешь.Cила!

Date: 2006-11-05 08:48 pm (UTC)
From: [identity profile] igorlord.livejournal.com
Ну, так всегда нисходит озарение, когда вместо того чтобы открывать Eclipse, Visual Studio, и т.д. открываешь emacs, Word, и т.д. и пишешь Functional Requirments и Design Specification. Даже если ты это пишешь исключительно для себя. Очень многие вещи находят свои места и становятся ровненько в красивый и "правилный" дизайн.

Date: 2006-11-07 08:08 am (UTC)
From: [identity profile] migmit.livejournal.com
А на сам Perl6 стоит глядеть? А то руки пока не дошли...

Date: 2006-11-14 11:13 am (UTC)
From: [identity profile] zlyuk.livejournal.com
типично математический экспириенс - действительно, дао а-ля математика. чем больше думаешь, тем глобальнее перспектива и понятнее конкретные случаи. computer science, в общем...

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. 30th, 2025 08:22 am
Powered by Dreamwidth Studios