LINUX.ORG.RU

Какой Lisp лучше в каких случаях и почему? И вообще в чём принципиальна разница между ними.

 , , ,


3

6

И есть ли такой диалект лиспа который бы был одинаков для всей этой необъятной кучи смайлоязыков. Ну и до кучи объясните мне, зачем диалекты вообще нужны, ну вот зачем? Когда общий синтаксис которого нет одинаков, а новые возможности это просто сахар с верху и ключевые слова которые просто как расширения или там библиотеки можно делать, но зачем делать по сути. Не холивара ради, просто интересно.

Сабж.

Deleted

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

А что, в языке кроме синтаксиса больше ничего нету?

theNamelessOne ★★★★★ ()

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

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

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

Ну так я же и про то. Языковых конструкций особо нет, а те что есть не настолько с виду принципиально отличны что бы делать - «Ещё один лисп» - Я вот и говорю в чём соль то? Если языки и не языки то, а диалекты подмножества/надмножества. Разницы между ними всеми с виду мало. Ну или я (скорее всего) чего то не понимаю.

Deleted ()

Разница между ними только в степени разложения.

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

Языковых конструкций особо нет, а те что есть не настолько с виду принципиально отличны

Есть принципиальные отличия.

Common Lisp: отдельные пространства имён функций и переменных. Из-за этого можно писать (let ((list 1)) (list list 2)) и ничего не ломается, но чтобы запустить функцию из переменной приходится писать (funcall f), а не просто (f). Макросы работают со списками обычных символов.

Scheme: Наличие call/cc. Гигиенические макросы, то есть в макросе не символ, а привязка, которая однозначно указывает, внешняя она или созданная в макросе.

Clojure: привязка к JVM, много синтаксического сахара.

Плюс идеологические различия при написании среды и стандартной библиотеки: Анализ пользователей Common Lisp и Racket

monk ★★★★★ ()

Ну и до кучи объясните мне, зачем диалекты вообще нужны, ну вот зачем?

Также как и диалекты Си++: Java, Javascript, Go, Rust. Попробуй из них слепить один язык, хотя синтаксически они похожи.

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

Разницы между ними всеми с виду мало.

Между сишкой и крестами разницы с виду никакой. Дахе можно канпелировать их одним канпелятром. Вот и зачем я спрашиваю это нужно? Только людям голову морочат.

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

Вот смотри, есть Clojure, который компилируется и работает в JVM, а есть LFE, который компилируется и работает в BEAM. Синтаксис похожий, а на практике совсем разные языки.

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

Так я же написал. В массовом сознании любые языки со скобочками — лиспы.

Но по сути разница между Common Lisp и Scheme примерно того же уровня, как между C++ и Java.

А ещё есть picolisp, newLisp, AutoLisp, eLisp, ...

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

В мире всего два языка: с фигурными скобками и без, остальное - их диалекты.

Паскаль — диалект лиспа? Прикольно...

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

Хм, чувствительность пациента к обобщениям притуплена, но все еще присутствует.

t184256 ★★★★★ ()

Между разными лиспами разницы на порядок больше чем между C# и Java.

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

Да, спасибо. Попеременно чтению комментариев гуглю. С этим понял, сфера применения разная и платформы тоже (уровня исполнения). Вроде допёр, ладно, разница между ними в реализации и подстройке под задачи. (Про кложуру вспомнилось весёлое https://www.youtube.com/watch?v=R4sTvHXkToQ) Тогда ещё вопрос, это к тому что «Лучше». Какой lisp* наиболее лаконичен, не перегружен излишествами и сахарами которые можно реализовать и вынести в библиотеки если надо. Да без возможных плюшек и фигнюшек упрощающих что-то. Ну вот возьмём Си, это баланс между абстракцией удобством и скоростью работы + полное понимание что происходит внутри. Ничего лишнего, а то что нужно реализуется. Вот тоже самое хочется от выбора лиспа для изучения на досуге. Короче кто из лиспов будет как Си если сравнивать семейства языков, тоесть ниже уже некуда и всё строго, зависит от рук, а выше если надо реализуется самим языком.

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

А посоветовать можешь, вот давай по аналогиям раз уж пошло тут на них всё. Есть Си и последователи как синтаксические так и по иным видам, тоесть синтаксис его остальное надмножества плюшек от раздутости c++ до своей машины исполнения java. Вот кто в мире лиспов как Си в мире фигуроскобочных языков ))) Пишу с шуткой юмора, но по сути серьёзно.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

Какой lisp* наиболее лаконичен, не перегружен излишествами и сахарами которые можно реализовать и вынести в библиотеки если надо

Схемка скорее всего.

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

Ты сломал мне аналогию что выше!

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

Ну Rust даже синтаксически ушёл довольно далеко.

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

А диалектом какого языка Rust является? Претендовать на роль принципиально другого языка как у лиспа или форта ему сильно жирно как-то.

ados ★★★★★ ()

пишу прод на Clojure, судьбой доволен

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

Почти все интерпретирующие языки позаимствовали кучу идей из лиспа, что не делает первых диалектами лиспа.

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

Ты латентный лингвист? Откуда это дерьмо про «диалекты»? Вот C можно считать «диалектом» C++ (не наоборот!), потому что компилятор C++ может переварить сишный код. Но это, знаете ли, такое утверждение, не имеющее никакой ценности.

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

Например, C++ был не гибридом.

Гибридом C и Симулы.

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

Ещё стоит добавить, что Clojure крутится вокруг concurrency и parallelism`а, это там чуть ли не основная тема. Хотя в том же Racket недостатков по этой части перед Кложей не заметил. Разве что в последней software transactional memory вшита в ядро, а в Racket stm нет.

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

Вот кто в мире лиспов как Си в мире фигуроскобочных языков

Lisp 1.5

Как C++ — Common Lisp.

monk ★★★★★ ()

флейм и япознаюмир в /dev

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

Clojure: lisp 1, immutability, concurrency, батарейки от Java и свои.

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

У всех них фигурные скобки - железная логика.

так если всё с круглыми скобками называют «лиспом».

P.S. У Go и Rust ещё и языковые конструкции и система типов схожи с C++'ными.

Вот Рефал, несмотря на фигурные скобки, C/C++ не родственник.

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

потому что компилятор C++ может переварить сишный код

Не может. В последних стандартах довольно жирные расхождения.

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

Есть Си и последователи как синтаксические так и по иным видам

Си - это, скорее, последователь ассемблера, чем всё остальное, которое идёт с C-like syntax.

Вот кто в мире лиспов как Си в мире фигуроскобочных языков )))

Вся прекрасность лиспа в том, что лисповая программа может работать в терминах маш.кода, и это не слишком по внешнему виду отличается от GAS-вставок в GCC или Watcom - смотри исходники бакэндов у SBCL, например. А может быть и рекурсивными макросами. Или совсем нифига не лиспом, и даже не для последовательного исполнения на обычно процессоре, а какой-то параллельный DSL для ПЛМ-железки.

Лисп может быть, чем угодно.

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

потому что компилятор C++ может переварить сишный код

Не может. В последних стандартах довольно жирные расхождения.

По счастью (или несчастью) не везде есть версии компиляторов, реализующие последние стандарты.

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