Leave a comment

ln_123 September 13 2012, 06:06:15 UTC
Странный вывод у вас получился.
Как из того что макросы используются в основном для написания своего синтаксического сахара следует что опыт лиспа не переносим на другие языки программирования не понятно. В лиспе видь и без макросов есть много всего разного например те же самые ФВП.
Кстати, а насколько переносим опыт типов Хаскеля на Java?

Reply

thesz September 13 2012, 06:55:45 UTC
Если главное в Лиспе - макросы, то главный опыт Лиспа не переносим на другие языки.

ФВП в Лиспе используются ограниченно из-за неудобства их использования и принципиальной изменяемости значений.

Что ещё в Лиспе есть, кроме макросов и ФВП?

Опыт Хаскеля переносим примерно так же, как и опыт OCaml - ФВП, плоские иерархии. Добавляется ещё опыт использования монад - специальных контекстов управления, - и ленивых вычислений.

Reply

ln_123 September 13 2012, 07:36:58 UTC
Почему вы решили что главное в Лиспе макросы? Макросы это просто удобная возможность использовать парсер лиспа для написания своего DSL и возможность расширения языка не более того. На архитектуру системы это не оказывает практически ни какого влияния, просто многие вещи становится возможным записывать более коротко и понятно, поэтому многим они нравятся.
Мне кажется что вырывать из языка какую-ту фишку и говорить что она главная это как то не правильно. Нужно смотреть на весь дизайн языка.
Как раз неудобство (кстати в чем оно?) использования ФВП в лиспе замечательно решается макросами.
А чем мешает принципиальная изменяемость значений использованию ФВП я честно говоря не понял, если вы поясните то буду очень благодарен.

Насчет переноса опыта, я постараюсь собраться с мыслями и напишу либо отдельным постом/коментарием

Reply

ln_123 September 13 2012, 08:35:30 UTC
> Что ещё в Лиспе есть, кроме макросов и ФВП?
Если говорить о концепциях (макросы я бы тут не назвал) то наверное то что данные можно воспринимать как программу и наоборот, для scheme можно было бы еще сказать о ленивых вычислениях т.к. там это часть стандарта, а вот для CL это уже не верно.
Лисп интересен тем что на нем те концепции которые есть в других языках довольно легко (легче чем в других языках) реализуются в нем а зачистую уже реализованы в виде какой нибудь библиотеки. Так же есть довольно итересные технические решения к ним как раз можно отнести макросы, система типов, система сообщений/обработки событий, CLOS, развитый REPL.
Расматривать CL как язык выучив который обязательно освоишь новые концепции нельзя т.к. программируя на нем слишком легко продолжать писать в том же стиле что и на любом другом языке программирования будь то Java или тот же Haskel :). Скорее это удобный язык в котором ты не привязан к какой то одной парадигме программирования.

Reply

thesz September 13 2012, 10:29:11 UTC
Программа, как данные и наоборот - это просто использование готового интерпретатора. Невелика проблема.

Вычисления в схеме действительно лениые, вычислятся один раз, не более?

Вы не сможете писать на лиспе, как на хаскеле или си. Не преувеличивайте.

Наличие нескольких парадигм создает трудности взаимодействия между ними.

Reply

ln_123 September 13 2012, 11:37:18 UTC
>Программа, как данные и наоборот - это просто использование готового интерпретатора. Невелика проблема ( ... )

Reply


Leave a comment

Up