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