Странный вывод у вас получился. Как из того что макросы используются в основном для написания своего синтаксического сахара следует что опыт лиспа не переносим на другие языки программирования не понятно. В лиспе видь и без макросов есть много всего разного например те же самые ФВП. Кстати, а насколько переносим опыт типов Хаскеля на Java?
Если главное в Лиспе - макросы, то главный опыт Лиспа не переносим на другие языки.
ФВП в Лиспе используются ограниченно из-за неудобства их использования и принципиальной изменяемости значений.
Что ещё в Лиспе есть, кроме макросов и ФВП?
Опыт Хаскеля переносим примерно так же, как и опыт OCaml - ФВП, плоские иерархии. Добавляется ещё опыт использования монад - специальных контекстов управления, - и ленивых вычислений.
Почему вы решили что главное в Лиспе макросы? Макросы это просто удобная возможность использовать парсер лиспа для написания своего DSL и возможность расширения языка не более того. На архитектуру системы это не оказывает практически ни какого влияния, просто многие вещи становится возможным записывать более коротко и понятно, поэтому многим они нравятся. Мне кажется что вырывать из языка какую-ту фишку и говорить что она главная это как то не правильно. Нужно смотреть на весь дизайн языка. Как раз неудобство (кстати в чем оно?) использования ФВП в лиспе замечательно решается макросами. А чем мешает принципиальная изменяемость значений использованию ФВП я честно говоря не понял, если вы поясните то буду очень благодарен.
Насчет переноса опыта, я постараюсь собраться с мыслями и напишу либо отдельным постом/коментарием
> Что ещё в Лиспе есть, кроме макросов и ФВП? Если говорить о концепциях (макросы я бы тут не назвал) то наверное то что данные можно воспринимать как программу и наоборот, для scheme можно было бы еще сказать о ленивых вычислениях т.к. там это часть стандарта, а вот для CL это уже не верно. Лисп интересен тем что на нем те концепции которые есть в других языках довольно легко (легче чем в других языках) реализуются в нем а зачистую уже реализованы в виде какой нибудь библиотеки. Так же есть довольно итересные технические решения к ним как раз можно отнести макросы, система типов, система сообщений/обработки событий, CLOS, развитый REPL. Расматривать CL как язык выучив который обязательно освоишь новые концепции нельзя т.к. программируя на нем слишком легко продолжать писать в том же стиле что и на любом другом языке программирования будь то Java или тот же Haskel :). Скорее это удобный язык в котором ты не привязан к какой то одной парадигме программирования.
Comments 39
Reply
Как из того что макросы используются в основном для написания своего синтаксического сахара следует что опыт лиспа не переносим на другие языки программирования не понятно. В лиспе видь и без макросов есть много всего разного например те же самые ФВП.
Кстати, а насколько переносим опыт типов Хаскеля на Java?
Reply
ФВП в Лиспе используются ограниченно из-за неудобства их использования и принципиальной изменяемости значений.
Что ещё в Лиспе есть, кроме макросов и ФВП?
Опыт Хаскеля переносим примерно так же, как и опыт OCaml - ФВП, плоские иерархии. Добавляется ещё опыт использования монад - специальных контекстов управления, - и ленивых вычислений.
Reply
Мне кажется что вырывать из языка какую-ту фишку и говорить что она главная это как то не правильно. Нужно смотреть на весь дизайн языка.
Как раз неудобство (кстати в чем оно?) использования ФВП в лиспе замечательно решается макросами.
А чем мешает принципиальная изменяемость значений использованию ФВП я честно говоря не понял, если вы поясните то буду очень благодарен.
Насчет переноса опыта, я постараюсь собраться с мыслями и напишу либо отдельным постом/коментарием
Reply
Если говорить о концепциях (макросы я бы тут не назвал) то наверное то что данные можно воспринимать как программу и наоборот, для scheme можно было бы еще сказать о ленивых вычислениях т.к. там это часть стандарта, а вот для CL это уже не верно.
Лисп интересен тем что на нем те концепции которые есть в других языках довольно легко (легче чем в других языках) реализуются в нем а зачистую уже реализованы в виде какой нибудь библиотеки. Так же есть довольно итересные технические решения к ним как раз можно отнести макросы, система типов, система сообщений/обработки событий, CLOS, развитый REPL.
Расматривать CL как язык выучив который обязательно освоишь новые концепции нельзя т.к. программируя на нем слишком легко продолжать писать в том же стиле что и на любом другом языке программирования будь то Java или тот же Haskel :). Скорее это удобный язык в котором ты не привязан к какой то одной парадигме программирования.
Reply
Leave a comment