LINUX.ORG.RU

Главная концепция common lisp


1

7

Ладно посмеялись и хватит. А вот кто мне сможет внятно объяснить, где применяется главная концепция common lisp - эквивалентность кода и данных? Макросы? Но это как-то приметивно, как мне кажиться. Жду примеров использования сей концепции, а то в сети как-то не густо

У меня уже есть соображение, почему это делается не часто и в такой форме, но я пока не буду раскрывать карты



Последнее исправление: mastercoder1 (всего исправлений: 1)

приметивно

лол.

У меня уже есть соображение, почему это делается не часто и в такой форме, но я пока не буду раскрывать карты

лол.

Ну DSL например. А вообще, ты нанотроль и тебя несомненно зобанят.

auto12884839
()
Ответ на: комментарий от mastercoder1

Что ты понимаешь под DSL?

Ты не хочешь этого знать. Ты хочешь готовиться к пересдаче экзаменов по русскому языку. Когда ты достаточно овладеешь им, ты сможешь прочитать учебники по лиспу самостоятельно.

auto12884839
()

главная концепция common lisp - эквивалентность кода и данных

Сфига это главная концепция?

archimag ★★★
()
Ответ на: комментарий от auto12884839

Ололо. Ты просто настолько анскилен, что сам сказал какой-нибудь buzzword, чтобы показаться умником.

Я облегчу тебе задачу:

http://ru.wikipedia.org/wiki/Dsl

Если ты имеешь в виду domain-specific language, то мимо. Commom lisp - общего назначения

mastercoder1
() автор топика
Ответ на: комментарий от archimag

Да ладно, решил потролить, а потом думаю, что и впрям не смешно.

REPL же, интерактивная разработка.

Я вот так не думаю, однако. Это, конечно, хорошо, что можно, скажем поменять поведение программы без остановки, но не оно главное, ИМХО

anonymous
()
Ответ на: комментарий от anonymous

Это, конечно, хорошо, что можно, скажем поменять поведение
программы без остановки

Не-не-не, смысл не в том, что бы менять поведение программы без остановки, а в том, что принципиально меняется схема разработки.

archimag ★★★
()
Ответ на: комментарий от archimag

Что, совсем для любой программы? А пример есть этой схемы разработки?

Я обычно делаю так: стараюсь продумать заранее по максимуму, потом начинаю кодить, начиная с описания классов/структур, потом пишу методы/функции, проверяя мелочевку в REPL.

Когда база уже более-менее готова, я добавляю что-то ещё, запускаю реализацию (sbcl, например). Какой-нибудь скриптик запускает asdf:load-system и некий тест, проверяющий этот новый код, потом закрываю реализацию, повторяю.

Но я такой быдлокодер, что особо как-то не заморачивался о том, как писать эффективнее.

anonymous
()

Советую не пользоваться данным языком программирования.

А если серьезно, то какова производительность лиспа? Она на уровне с C++? Я понимаю крутость разработки и платформы, но что если оно работает в 10 раз медленнее, примерно как питон? ^_^

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)
Ответ на: комментарий от anonymous

А пример есть этой схемы разработки?

Эта схема разработки очень похожа на TDD (и частно используется совместно с TDD), но только, вместо написания отдельных тестов, небольшие куски кода запускаются непосредственно в REPL (при этом, некоторые из этих кусков могут быть в итоге оформлены в виде тестов).

Возможность изменение код работающего образа вместе с таким экспериментами в REPL приводят к ещё более коротких циклам разработки, чем это обычно достигается при использовании TDD. Плюс, есть разные плюшки, типа инспектора объектов, которые обеспечивают совершенно другой уровень комфорта, чем, скажем, при сочетании Python+TDD.

archimag ★★★
()
Ответ на: комментарий от I-Love-Microsoft

Я понимаю крутость разработки и платформы, но что если оно
работает в 10 раз медленнее, примерно как питон?

То что? Вон, Ruby медленне чем Python, и ничего, активно юзают.

SBCL в среднем в 2-3 быстрее, чем PyPy (зависит от кода, разумеется), который в среднем раз в 6 быстрее чем CPython. Итого, SBCL быстрее чем СPython раз этак в 10-15.

archimag ★★★
()
Ответ на: комментарий от I-Love-Microsoft

http://benchmarksgame.alioth.debian.org/u32q/benchmark.php?test=all&lang=...

SBCL, в среднем, в 2-4 раза медленней C++. И сравни это с проседаниями Python 3 в некоторых тестах на порядки: http://benchmarksgame.alioth.debian.org/u32q/benchmark.php?test=all&lang=...

Norgat ★★★★★
()
Последнее исправление: Norgat (всего исправлений: 1)

Главная концепция common lisp — похлёбывая мамкин борщок, писать очередной никому не нужный кластер метапарадигм, обсуждать на форумах анафорические лямбды и смотреть на всех, как на говно.

anonymous
()
Ответ на: комментарий от anonymous

А, случайно, новоявленные регистранты - не ваши «аватары»? Просто чувствуется неявная рука «мастера».

anonymous
()
Ответ на: комментарий от drBatty

Быстрее оно. А мощная функциональность CLOS'а нужна редко. В таких случаях и на С++ ее сделать не проблема. А вообще я за Scala.

anonymous
()

приметивно
кажиться

нутыпонел

главная концепция common lisp - эквивалентность кода и данных

ВНЕЗАПНО, есть и другие языки программирования, обладающие этим свойством.

а вообще, язабан этого клоуна.

ymn ★★★★★
()
Ответ на: комментарий от archimag

Вы с mv, меня уговорили ;) Попробую делать так. Я всё не решался ставить SLIME, так как не был уверен, подойдет ли оно именно мне. Реплом пользовался из clisp'а, потому что там readline

anonymous
()
Ответ на: комментарий от archimag

Классная штука ваш этот Slime. А вот питоновцы себя обделили. У них там нет возможности перенаправить стандартный поток ввода что ли?

anonymous
()
Ответ на: комментарий от anonymous

Откуда такой тупой анонимус на лоре в теме про лиспы?

anonymous
()
Ответ на: комментарий от Norgat

SBCL, в среднем, в 2-4 раза медленней C++

Тут надо поправить, такой вот код:

http://benchmarksgame.alioth.debian.org/u32q/program.php?test=mandelbrot&...

да, в среднем, в 2-4 раза медленней C++, но это далеко не типичный код на CL. Сравни его с кодом на С++:

http://benchmarksgame.alioth.debian.org/u32q/program.php?test=mandelbrot&...

который как раз крайне прост, гораздо более компактен и читабелен, и, что важно, типичен. А если сравнивать всякие CLOS, то разница вообще будет огромной.

П.С. да - это плата за «фишки» ЯП, тут все нормально, но «2-4 раза» откровенно притянуты.

wota ★★
()
Ответ на: комментарий от anonymous

У них там нет возможности перенаправить стандартный
поток ввода что ли?

А SLIME работает не через стандартные потоки ввода/вывода, вместо этого в процессе запускается специальный SWANK-сервер, который взаимодействует с Emacs через сокеты. Это, например, даёт возможность подключаться с помощью SLIME к удалённым серверам.

А с Python проблема в том, что структура модулей там прибита к файловой системе.

archimag ★★★
()

эквивалентность кода и данных?

примитивно

фигасе, ты хоть понял что сказал?

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от archimag

REPL же, интерактивная разработка.

Такого говна в любом педоне. А вот гомоиконность, все же что-то присущее почти только лиспам

vertexua ★★★★★
()
Ответ на: комментарий от archimag

вместо написания отдельных тестов, небольшие куски кода запускаются непосредственно в REPL

Есть в такой схеме один недостаток: мусор от предыдущего теста и редактирования кода остаётся. Перед commit'ом обязательно приходится делать перезагрузку лиспа (желательно ещё и судалением fasl'ов) и ещё раз прогонять тесты. Иначе часто получается, что у тебя всё работает, а у всех вокруг, кто скачал твою программу — не работает (иногда даже не компилируется).

Есть правильный вариант: xcvb. Для теста из REPL запускается ещё один процесс лиспа и всё тестируется в нём. Но это уже почти ничем не отличается от хорошей IDE для C++/Java/Python.

monk ★★★★★
()
Ответ на: комментарий от monk

желательно ещё и судалением fasl'ов

Это ещё зачем?

Есть правильный вариант: xcvb.

Ну при чём тут xcvb? он же совсем о другом.

archimag ★★★
()

У меня уже есть соображение, почему это делается не часто и в такой форме, но я пока не буду раскрывать карты

Ну, колись!

dave ★★★★★
()
Ответ на: комментарий от vertexua

Чем REPL лиспа отличается от REPLа всех других языков?

Я это объясняю в каждой теме и ты в них регулярно появляешься. Я устал.

archimag ★★★
()
Ответ на: комментарий от vertexua

Разница между гомоиконностью лиспа и шаблонами в C++11 или D исчезающе мала и сугубо абстрактна.

anonymous
()
Ответ на: комментарий от archimag

желательно ещё и с удалением fasl'ов

Это ещё зачем?

1. module1 определяет макрос, module2 зависти от module1 и ASDF перекомпилирует module2, если меняется макрос в module1. Соответственно в REPL всё работает (новые версии только тех функций, что явно ткнул через C-c C-c), а при компиляции с нуля всё разваливается, а то и вовсе не компилируется.

2. Если в командной строке SLIME экспериментировал с readtable, то все fasl будут с учётом этих изменений

monk ★★★★★
()
Ответ на: комментарий от archimag

REPL же, интерактивная разработка.

REPL - киллер-фича CommonLisp? Он есть если не для любого, то для почти любого динамического ЯП.

Deleted
()
Ответ на: комментарий от I-Love-Microsoft

Советую не пользоваться данным языком программирования.

Лисп-гуру в треде?

А если серьезно, то какова производительность лиспа? Она на уровне с C++? Я понимаю крутость разработки и платформы, но что если оно работает в 10 раз медленнее, примерно как питон? ^_^

За быстродействие плюсов мы платим их крайней негибкостью. Использование плюсов оправдано только тогда, когда основной решающий фактор - быстродействие. Если быстродействие - не решающий фактор, то не вижу, что мешает использовать удобные средства, как, например, тот же Python.

При этом современные реализации Common Lisp - довольно быстрые.

Deleted
()
Ответ на: комментарий от Deleted

REPL - киллер-фича CommonLisp? Он есть если не для любого, то для почти любого динамического ЯП.

Archimag имеет в виду не REPL, а возможность компилировать в рабочий REPL функции по отдельности. Причём если что-то в REPL уже есть, то оно должно перезаписывается. То есть фича не столько REPL, сколько SLIME.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.