Що так чудово в Clojure? [зачинено]


40

Нещодавно я дивився на Clojure, і я натрапив на цю посаду в Stackoverflow, яка вказує на деякі проекти, що слідують за найкращими методами, і загальний хороший код Clojure. Мені хотілося обробити мову, прочитавши кілька основних навчальних посібників, тому я ознайомився з деякими проектами "реального світу".

Подивившись на ClojureScript і Compojure (два в вищезазначених «хороші» проекти), я просто відчуваю , як Clojure це жарт. Я не розумію, чому хтось перебирає Clojure над, скажімо, Ruby або Python, двома мовами, які я люблю, і мають такий чистий синтаксис, і їх дуже легко підібрати, тоді як Clojure використовує стільки круглих дужок та символів скрізь, що це руйнує читабельність для я.

Я думаю, що Ruby та Python - красиві, читабельні та елегантні. Їх легко читати навіть для того, хто не знає мови зсередини. Однак Clojure для мене непрозорий, і мені здається, що я повинен знати кожну крихітну деталь щодо мовної реалізації, щоб мати можливість зрозуміти будь-який код.

Тож, будь ласка, просвіти мене!

  • Що так добре в Clojure?
  • Який абсолютний мінімум, який я повинен знати про мову, щоб оцінити її?

14
I don't understand why someone would pick Clojure over say, Ruby or Python- він працює на jvm і може використовувати всю бібліотеку Java. ... have such a clean syntaxМожливо, у функціональних мов lisp дуже чіткий синтаксис і структура, до цього просто ніхто не звик.

22
Його ім'я сексуальне.
програміст

4
Будь-який підліток, який проживає в підвалі, може забрати Пітона і Рубі за лічені місяці. Якщо це все, що вони коли-небудь хочуть використати, то вони ніколи не вийдуть з підвалу. Я не кажу, що хтось, хто багато років займався професійною розробкою Python, є меншим смертним порівняно з тим, хто пише вбудований C, але якщо Python і Ruby - це все, що вони знають, і все, що вони коли-небудь хочуть знати, то щось є рибним. До речі, мені знадобилося особисто 6 років після закінчення навчання, щоб відкрити та оцінити функціональне програмування та Lisps. Моя перша реакція на Схему була відштовхуванням колін.
Робота

4
"Можливо, у функціональних мов lisp дуже чіткий синтаксис і структура. Її просто більшість людей не звикли". У мене з Ліспом дуже мало досвіду, і я щойно почав читати книгу "Практичний звичайний Lisp". Поки що у мене не виникло жодних проблем із синтаксисом; ІМХО, міфи про менш читабельний синтаксис Ліспа - лише FUD.
Джорджіо

4
Я недавно почав дивитися на Clojure (але я мав попередній досвід роботи з Haskell і Scala, тому синтаксис не такий шок). Я насправді вважав це напрочуд читабельним. За fewмежами дужок є дуже символи порівняно з багатьма мовами, і майже немає зарезервованих слів. Причина, яку ви вважаєте нечитаною, полягає в тому, що це абсолютно нова парадигма і працює принципово іншим чином, ніж типова об'єктно-орієнтована мова. Дайте йому час і сили.
KChaloux

Відповіді:


47

Якщо ви переказали, перегляньте:

  1. Ви знайомі з Ruby / Python.
  2. Ви ще не бачите переваг Clojure.
  3. Синтаксис Lisp і Clojure не знаходять ясними.

... Я думаю, що найкраща відповідь - прочитати книгу Програмування Clojure від Емерика, Карпера та Гранда. У книзі є численні явні порівняння коду з Python, Ruby та Java, і є текстові пояснення, що стосуються кодерів з цих мов. Особисто я приїхав до Clojure після створення хороших проектів з Python, маючи певний досвід Lisp; Читання цієї книги допомогло переконати мене почати використовувати Clojure не тільки в побічних проектах, але і для професійних цілей.

Щоб вирішити свої два питання безпосередньо:

  1. Що так добре в Clojure? Чимало відповідей на цьому веб-сайті та в інших місцях, наприклад, див. Https://www.quora.com/Why-would-someone-learn-Clojure
  2. Який абсолютний мінімум, який я повинен знати про мову, щоб оцінити її? Я б запропонував знати великі ідеї дизайну Clojure, як це сформульовано як у програмах Clojure, так і в книзі The Joy of Clojure , а також у розмовах Річака Хікі, особливо. розмова Simple Made Easy . Коли ви дізнаєтесь, що / чому потім зможете почати розуміти, як читати код Clojure, esp. як змінити своє мислення з класів, об’єктів, стану / мутації на "просто функції та дані" (функції вищого порядку, карти / набори / послідовності, типи).

Додаткові пропозиції: Елегантність та потужність Ліспа частково випливають із його мінімалістичного та цілком послідовного синтаксису. Це набагато простіше оцінити з хорошим редактором, наприклад, Emacs з режимом clojure та ParEdit. Познайомившись із ним, синтаксис згасає, і ви "побачите" семантику, наміри та стислі абстракції. По-друге, не починайте з читання джерела для ClojureScript або Compojure, вони занадто багато одночасно; спробуйте деякі проблеми 4clojure.org і порівняйте рішення з найкращими кодерами там. Якщо ви бачите 4-6 інших рішень, незмінно хтось написав би справді ідіоматичне, лаконічне рішення в стилі FP, яке ви можете порівняти з незграбним, багатослівним та непотрібним складним рішенням імперативного стилю.


20

Лістські діалекти мають унікальну нішу завдяки простому синтаксису. Цей простий синтаксис робить метапрограмування за допомогою використання макросів дуже простим. Це дозволяє моделювати мову відповідно до проблемного домену, а не моделювати так, щоб ваш проблемний домен підходив до вашої мови. Це дуже здорово, коли ти обіймаєш голову, і це дозволяє легко робити багато справ, що дуже складно в інших мовах.

Мінус полягає в тому, що оскільки кожна програма Lisp по суті визначає свою власну мову, вам дійсно потрібно добре зрозуміти речі, щоб зрозуміти, що відбувається.

Тепер, щоб відповісти на ваші запитання ...

  1. Clojure - це сучасний діалект Ліспа, який працює в JVM / CLR. Це дозволяє легко скористатися потужністю Lisp у існуючій інфраструктурі.

  2. Важливо зрозуміти, як використовувати макроси для створення Lisp у вашому проблемному домені, щоб оцінити його використання. Я дійсно зрозумів це лише після впровадження програми Lisp, коли я виявив, що значна частина основних мовних функцій легко може бути реалізована в самому Lisp. Щоб отримати це, потрібен проект досить великого розміру.

Його плюси вбік, хоча програмувати це цікаво, я особисто не маю багатьох випадків, коли б я звертався до нього за щоденними проблемами. Це дуже хороший інструмент для вивчення розширення розуму, і після належного вивчення Ліспа стало набагато природніше скористатися засобами метапрограмування іншими мовами.

Простий синтаксис дозволяє комп'ютерам легко інтерпретувати (дозволяючи такі легкі потужні макроси), але людині дуже важко швидко розбирати складні вирази.


2
Ви подивилися на світлий стіл ?

4
З вашої відповіді звучить, як макроси - це звичайний спосіб наблизитись до програмування Lisp, коли насправді більшість проблем програмування можна вирішити звичайними, першокласними функціями. Макроси призначені насамперед для використання для мовного програмування (тобто розширення мови). Дивіться також bookshelf.jp/texi/onlisp/onlisp_9.html
Роберт Харві

3
@RobertHarvey Я б заперечував, що якщо ви не користуєтесь маркосом, то є безліч інших мов, до яких я звернувся б, які пропонують першокласні функції з набагато більш читабельним синтаксисом.
bunglestink

@MichaelT виглядає акуратно. Мені подобається концепція.
DPM

3
@RobertHarvey Scala, JavaScript, C #, Python та Haskell - все це на вершині моєї голови, що стосується мов з функціями першого класу, які я вважаю б синтаксисом, що піддається людському сприйняттю, ніж Lisps.
bunglestink

10

Сильні сторони Clojure підкреслювались багато разів, і, безумовно, потрібно зробити дуже потужною мовою, тому я більше не повторюю їх тут.

Я завжди любив lisp, так як дні університету, і я був дуже схвильований, коли виявив Clojure (можливо, шанс використати lisp поза межами академій!). Однак, коли я почав вчитися, неспокійне почуття почало повзати, хоча я не можу точно визначити, що мені не подобається. Перш за все, я б сказав, що кодування в Common Lisp було для мене легко і весело, але Clojure має більш круту криву навчання. Клісп мав до нього певну красу та елегантність. Я не впевнений, що отримаю те саме почуття від Clojure. Мені цікаво, чи зникне це почуття, коли я отримаю більше досвіду.

У мене є ще одна здогадка про моє загадкове легке відштовхування. Я думаю, це може бути її велика гнучкість. Наприклад, у вас можуть бути структури, що складаються з половини векторної та половинної карти, і за допомогою кількох символів коду ви можете приймати їх як параметри, розбирати їх і правильно обробляти. Так, він видаляє всю котельну плиту, але якось це не вірно. Наче ви ніколи не дуже добре знаєте правила, які діють під усіма тими круглими дужками, колонами, брекетами тощо.

Для мене я все ще люблю мову за всіма її перевагами (в першу чергу, бігом у JVM та спрощенням одночасності, при цьому набагато потужнішим і лаконічнішим за Java та з менш очевидними недоліками дизайну), але журі все ще не в тому, чи щось можна було вдосконалити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.