Це дещо складне запитання, оскільки відмінності є як технічними, так і (що, що важливіше, на мій погляд) культурними. Відповідь може дати лише неточний, суб’єктивний погляд. Це те, що я збираюся надати тут. Деякі вихідні технічні подробиці див. У схемі Wiki .
Схема - це мова, побудована на принципі забезпечення елегантної, послідовної, продуманої основи базової мови, на якій можуть бути побудовані як практичні, так і академічні мови застосування.
Рідко ви зустрінете когось, хто пише додаток із чистою схемою R5RS (або R6RS), і через мінімалістичний стандарт більшість кодів не можна переносити в реалізаціях схеми. Це означає, що вам доведеться ретельно вибирати реалізацію своєї схеми, якщо ви захочете написати якусь програму для кінцевого користувача, оскільки вибір значною мірою визначатиме, які бібліотеки вам доступні. З іншого боку, відносна свобода у розробці фактичної мови додатків означає, що реалізації схеми часто надають функції, нечувані деінде; Наприклад, PLT-ракетка дозволяє використовувати статичне введення тексту та забезпечує дуже знану мову IDE.
Взаємодія за межами базової мови забезпечується процесом SRFI, керованим спільнотою, але доступність будь-якого даного SRFI залежить від реалізації.
Більшість діалектів та бібліотек Схеми зосереджуються на функціональних ідіомах програмування, таких як рекурсія замість ітерації. Існують різні об'єктні системи, які ви можете завантажувати як бібліотеки, коли хочете зробити ООП, але інтеграція з існуючим кодом сильно залежить від діалекту Схеми та навколишньої культури (Куряча Схема, схоже, більш об'єктно-орієнтована, ніж Ракет, наприклад).
Інтерактивне програмування - ще один момент, в якому розрізняються підгрупи Scheme. Схема MIT відома сильною підтримкою інтерактивності, тоді як PLT Racket відчуває себе набагато статичніше. У будь-якому випадку, інтерактивне програмування, здається, не є основною проблемою для більшості підспільнот Схеми, і я ще не бачив середовища програмування настільки ж інтерактивного, як і найбільш поширені Ліспи.
Common Lisp - це виснажена мова, призначена для практичного програмування. Він сповнений потворних бородавок та зламань сумісності - цілком протилежний елегантному мінімалізму Схеми. Але це також набагато цікавіше, якщо взяти для себе.
Common Lisp створив відносно велику екосистему портативних бібліотек. Зазвичай ви можете змінити реалізацію в будь-який час, навіть після розгортання програми, без зайвих проблем. Загалом, Common Lisp набагато більш уніфікований, ніж Scheme, і більш радикальні мовні експерименти, якщо взагалі їх робити, зазвичай вбудовуються як портативна бібліотека, а не визначають цілком новий діалект мови. Через це розширення мови, як правило, є більш консервативними, але також і більш комбінованими (і часто необов’язковими).
Універсально корисні розширення мови, такі як інтерфейси із зовнішніми функціями, не розробляються формально, а спираються на квазістандартні бібліотеки, доступні у всіх основних реалізаціях Common Lisp.
Мовні ідіоми - це дика суміш функціонального, імперативного та об’єктно-орієнтованого підходів, і загалом Common Lisp відчуває себе більше імперативною мовою, ніж функціональною. Це також надзвичайно динамічно, можливо більше, ніж будь-яка з популярних мов динамічного сценарію (перевизначення класу застосовується, наприклад, до існуючих примірників, а система обробки умов має вбудовану інтерактивність), а інтерактивне, дослідницьке програмування є важливою частиною "загальнодоступний шлях". Це також відображається в середовищах програмування, доступних для Common Lisp, практично всі вони пропонують якусь пряму взаємодію з запущеним компілятором Lisp.
Common Lisp має вбудовану об'єктну систему (CLOS), систему обробки умов, значно потужнішу, ніж просто обробка винятків, можливість виправлення часу виконання та різні типи вбудованих структур даних та утиліт (включаючи горезвісний макрос LOOP , ітерацію підмова занадто потворна для Scheme, але занадто корисна, щоб не згадувати, а також механізм форматування подібний до printf з підтримкою GOTO у рядках формату).
І через інтерактивну розробку на основі зображень, і через більшу мову, реалізації Lisp, як правило, менш портативні в операційних системах, ніж реалізації схеми. Отримати Common Lisp для роботи на вбудованому пристрої, наприклад, не для слабонервних. Подібно до віртуальної машини Java, ви також стикаєтеся з проблемами на машинах, де віртуальна пам’ять обмежена (наприклад, віртуальні сервери на основі OpenVZ). З іншого боку, реалізації схем, як правило, є більш компактними та портативними. Зростання якості впровадження ECL дещо пом'якшило цей момент, хоча його суть все ще відповідає дійсності.
Якщо вам потрібна комерційна підтримка, є кілька компаній, які надають свої власні реалізації Common Lisp, включаючи графічний графічний графічний інтерфейс, спеціалізовані системи баз даних тощо.
Підводячи підсумок , схема - це більш елегантно розроблена мова. Це насамперед функціональна мова з деякими динамічними властивостями. Його реалізації представляють різні несумісні діалекти з відмінними рисами. Common Lisp - це повноцінна, високодинамічна, багатопарадигмна мова з різними потворними, але прагматичними рисами, реалізації яких значною мірою сумісні між собою. Діалекти схеми, як правило, є більш статичними та менш інтерактивними, ніж Common Lisp; Загальні реалізації Lisp, як правило, важчі та складніші у встановленні.
Яку б мову ви не вибрали, я бажаю вам багато задоволення! :)