- Кстати, лисп - не функциональный, а мультипарадигменный язык, на нем можно писать чисто функциональные, императивные, объектно-ориентированные, логические программы, или же придумать свой стиль.
- А Ока - многофункциональная машина. В ней можно жить, заниматься сексом, хранить картошку, ей можно подпирать забор, чтобы не упал, её можно сбрасывать с самолёта на голову агрессору, или придумать собственное применение.
конечно нужно. по крайней мере, если вы действительно хорошо знаете C а тем более C++, то после того, как вы таки овладеете Lisp-ом или ещё какой хренью вам всё равно будет чем заняться и где работать. в конце-концов, Lisp ни чем не хуже коллекционирования бабочек или марок так что почему нет. кому что нравится.
>Он намекает, что в реальной жизни на Лиспе писАть не придется,
Я пишу. Я живу в нереальной жизни?)
>И молодой паладин может привести список полезных вещей, которым может научить _только_ Лисп? ;)
На вскидку таких, чтобы "_только Лисп_" -- не придумаю. Но, например, метапрограммирование наиболее приятно осваивать на Лиспе (думаю понятно почему?;))
>> Он намекает, что в реальной жизни на Лиспе писАть не придется,
> Я пишу. Я живу в нереальной жизни?)
За деньги и в команде? Если да, то ты одно из немногочисленных исключений.
> Но, например, метапрограммирование наиболее приятно осваивать на Лиспе (думаю понятно почему?;))
Не-а. Я его осваивал на lexx и yacc, когда оно еще не называлось "метапрограммированием". Ну и вообще интересно, чем качественно макросы Лиспа отличаются от какого-нибудь ocamlp4 или Nemerle (подозреваю, что ничем).
>За деньги и в команде? Если да, то ты одно из немногочисленных исключений.
Да. И с каждым днём таких "исключений" всё больше.
>Не-а. Я его осваивал на lexx и yacc, когда оно еще не называлось "метапрограммированием". Ну и вообще интересно, чем качественно макросы Лиспа отличаются от какого-нибудь ocamlp4 или Nemerle (подозреваю, что ничем).
Ocamlp4 и Nemerle не щупал, но подозреваю, что у них макры пишутся на чуть другом языке, нежели код. Лисповские же макры написаны на лиспе, и то, что можно делать вне макры, можно и внутри неё. Со всеми вытекающими...
> Ocamlp4 и Nemerle не щупал, но подозреваю, что у них макры пишутся на чуть другом языке, нежели код. Лисповские же макры написаны на лиспе, и то, что можно делать вне макры, можно и внутри неё. Со всеми вытекающими...
В Nemerle макры пишутся на Nemerle, в CamlP4 - на OCaml. И quasiquotation там есть, и возможность прочитать AST (не так просто, как в Лиспе, но тоже более-менее доступно). Чего там нет, так это инкрементальной компиляции. В Nemerle надо скомпилировать макры в отдельную dll, и потом на эту dll ссылаться при компиляции кода, использующего эти макры. Нельзя, как в Лиспе, воспользоваться макрой сразу после её определения, ну а о локальных макрах не стоит даже и мечтать. Так что, возможности такого метапрограммирования очень ограниченны, максимум, что можно сделать (и что обычно и делают) - это добавлять новые примитивные конструкции в язык. Для серьёзной разработки DSLей этот подход не очень годится.
> В Nemerle надо скомпилировать макры в отдельную dll, и потом на эту dll ссылаться при компиляции кода, использующего эти макры. Нельзя, как в Лиспе, воспользоваться макрой сразу после её определения, ну а о локальных макрах не стоит даже и мечтать. Так что, возможности такого метапрограммирования очень ограниченны
Мне это не кажется "очень ограниченным". Локальных макр нет - ну и что?
> Для серьёзной разработки DSLей
Ну он позиционировался как язык общего назначения, а не для "разработки DSLей". Впрочем, Лисп тоже - с какой радости его некоторые ограничивают областью разработки DSL, я не понимаю.
> И молодой паладин может привести список полезных вещей, которым может научить _только_ Лисп? ;)
ну "образ мышления - Форт" -- это вещь, которой в первую очередь может научить Форт. А в вторую -- лисп со смоллтоком, в последнюю -- какой-нибудь C/yacc. Наверное, и для скобочек что-то нативное есть.
В порядке упражнения, сделай на Nemerle что либо подобное примеру examples/ssheet/ssheet.al из MBase-0.6 (я знаю, что в принципе это возможно, только это будет заметно сложнее). На Схеме (с нормальным define-macro, конечно же) и на CL я такое легко могу сделать.
> Мне это не кажется "очень ограниченным". Локальных макр нет - ну и что?
Это от того, что ты не понимаешь, как пользоваться метапрограммированием.
Локальные макры - офигенно полезная технология, позволяет передавать информацию от одной макры к другой. Пример применения - eDSL для описания структуры данных, который генерит набор итераторов и визитёров для этой структуры (что гораздо удобнее чем pattern matching в Haskell или ML). Визитёр сам по себе определяется как макра, разворачивающаяся в код, содержащий локальные макры для определения структуры в каждом конкретном узле.
> Ну он позиционировался как язык общего назначения, а не для "разработки DSLей".
А DSLи везде и всегжа нужны. Более общей задачи сложно придумать.
> Ненене, я вяло осваиваю Окамл, а ты мне предлагаешь учить еще и MBase O_o
Я не предлагаю ничего учить, я предлагаю тебе сделать встраиваемый spreadsheet на любом выбранном тобой метаязыке. CamlP4 подойдёт, если Nemerle не желаешь трогать.
> Анонимный брат, любую решаемую задачу можно решить более чем одним способом.
Некоторые способы намного проще всех остальных.
Традиционный Лисповский подход (инкрементальная компиляция) намного проще чем раздельная компиляция, и намного интуитивно понятнее. Отсутствие ограничений всегда почти лучше, чем их наличие.
Задумайся, почему в этой книге используется именно Лисп, а не какой либо ещё язык:
> В порядке упражнения, сделай на Nemerle что либо подобное примеру examples/ssheet/ssheet.al из MBase-0.6 (я знаю, что в принципе это возможно, только это будет заметно сложнее)
в детстве писал excel-подобный калькулятор на Turbo Pascal 5.5. У меня были определения функций, текстовый UI. Исходников было явно не на 5 Кб, как в MBase на лиспе, что-то килобайт на 20-50. И то, ленивостью в функциях естественно не пахло, стек можно было обвалить в первой версии, ну и стандартные заморочки вроде "сколько файлов надо перетряхнуть для добавления новой функции в интерпретатор".
Это ясно из Acknowledgements - 1975, 1987, дальше куча ссылок на работы 70-х... тогда кроме Лиспа ничего распространенного и не было (Prolog и ML не катят для целей книги, как я понимаю).
> тогда кроме Лиспа ничего распространенного и не было (Prolog и ML не катят для целей книги, как я понимаю).
Почему же? Вполне катят. Более ранние работы Колмогорова по этой теме вообще были на основе машины Тьюринга. Однако же, при всём богатстве выбора, Чейтин остановился на Лиспе - и продолжает им пользоваться до сих пор.
да-да. Потом, макры -- это функции высокого порядка, описание спредшита -- это спецификация не только для калькулятора функций, но и GUI. И сгенерированный код как исполняемая модель, сразу по готовой спецификации, одна точка изменений для расширения/доработки.
> да-да. Потом, макры -- это функции высокого порядка, описание спредшита -- это спецификация не только для калькулятора функций, но и GUI. И сгенерированный код как исполняемая модель, сразу по готовой спецификации, одна точка изменений для расширения/доработки.
...а потом программы начинают писать сами себя и крутого лиспера увольняют. за ненадобностью. и в чём профит :-?
> ...а потом программы начинают писать сами себя и крутого лиспера увольняют. за ненадобностью. и в чём профит :-?
Кого поувольняли с появлением автоматизированных сборочных линий? Наладчиков роботов и станков, или же простых работяг, которых роботы заменили? А простых работяг то как раз и не жалко, пусть себе похапе-кодеры без работы останутся. Поголовье программистов сократится (сейчас оно раздуто до неприличия), останутся как раз лисперы, наладчики искусственного интеллекта.
> Кого поувольняли с появлением автоматизированных сборочных линий? Наладчиков роботов и станков, или же простых работяг, которых роботы заменили? А простых работяг то как раз и не жалко, пусть себе похапе-кодеры без работы останутся. Поголовье программистов сократится (сейчас оно раздуто до неприличия), останутся как раз лисперы, наладчики искусственного интеллекта.
наивные лисперы не могут просчитать события дальше, чем на один шаг вперёд и увидеть, что как только скайнет сможет воспроизводить себя в коде, он очень быстро приберёт к рукам и автоматизированные производства и вообще все-все-все? и не будут больше нужны ни простые работяги, ни наладчики роботов, ни пхпкодеры да и вообще никто, включая "наладчиков искусственного интеллекта" которые по наивности думают, что будут жить вечно...