Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Category:

дневник, интересно только программистам итд.

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

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

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

Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 28 comments