클로저의 장점은 무엇입니까? [닫은]


40

나는 최근 Clojure를 살펴 보았고 모범 사례를 따르는 일부 프로젝트와 전반적인 Clojure 코드를 나타내는 Stackoverflow 에 대한 이 게시물을 우연히 발견했습니다 . 몇 가지 기본 자습서를 읽은 후 언어에 대해 이해하고 싶었으므로 "실제"프로젝트를 살펴 보았습니다.

ClojureScriptCompojure (위에서 언급 한 "좋은"프로젝트 중 두 가지) 를 살펴본 후 Clojure가 농담 인 것 같습니다. 왜 누군가가 Clojure를 Ruby 나 Python보다 선호하는지 이해하지 못합니다. 루비 또는 파이썬, 내가 좋아하는 깔끔한 구문을 가지고 있고 쉽게 찾을 수있는 두 언어이지만 Clojure는 너무 많은 괄호와 기호를 사용 하여 가독성을 떨어 뜨립니다. 나를.

루비와 파이썬은 아름답고 읽기 쉽고 우아하다고 생각합니다. 언어를 모르는 사람이라도 쉽게 읽을 수 있습니다. 그러나 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과 Ruby를 집을 수 있습니다. 그것이 그들이 사용하고 싶은 전부라면, 그들은 결코 지하실에서 벗어날 수 없을 것입니다. 나는 수년간 전문적인 파이썬 개발을해온 사람이 임베디드 C를 쓰는 사람에 비해 필멸의 수준이라고 말하지는 않지만, 파이썬과 루비가 모두 알고 있고 알고 싶어하는 모든 것이라면 비린내가 있습니다. 그건 그렇고, 기능 프로그래밍과 Lisp를 발견하고 감사하기 위해 졸업 한 후 6 년이 넘게 개인적으로 걸렸습니다. Scheme에 대한 나의 첫 반응은 무뚝뚝했다.
Job

4
"기능적 언어와 같은 lisp는 구문과 구조가 매우 깨끗하여 대부분의 사람들이 익숙하지 않은 언어 일뿐입니다.": Lisp에 대한 경험이 거의 없으며 "Practical Common Lisp"책을 읽기 시작했습니다. 지금까지 구문에 문제가 발생하지 않았습니다. Lisp와 유사한 구문에 대한 가독성이 떨어 졌다는 신화는 단지 FUD입니다.
Giorgio

4
최근 Clojure를 살펴보기 시작했습니다 (그러나 Haskell과 Scala에 대한 사전 경험이 있으므로 구문이 그렇게 충격적이지 않습니다). 나는 실제로 놀랍게도 읽을 수 있음을 발견했다. few많은 언어와 비교할 때 괄호 외부에 기호 가 있으며 예약어는 거의 없습니다. 읽을 수없는 이유는 완전히 새로운 패러다임이며 일반적인 객체 지향 언어와 근본적으로 다른 방식으로 작동하기 때문입니다. 시간과 힘을 줘.
KChaloux December

답변:


47

당신이 준 배경에 대해, 내가 말하면,

  1. Ruby / Python에 익숙합니다.
  2. Clojure의 장점은 아직 보지 못했습니다.
  3. Lisp 또는 Clojure 구문이 명확하지 않습니다.

... 가장 좋은 대답은 Emerick, Carper 및 Grand의 Clojure Programming 책을 읽는 것입니다 . 이 책에는 Python, Ruby 및 Java와의 명시 적 코드 비교가 많으며 해당 언어의 코더를 다루는 텍스트 설명이 있습니다. 개인적으로 저는 Python으로 좋은 프로젝트를 만들고 Lisp 경험을 한 후 Clojure에 왔습니다. 그 책을 읽으면 사이드 프로젝트뿐만 아니라 전문적인 목적으로 Clojure를 사용하도록 설득 할 수있었습니다.

두 가지 질문을 직접 해결하려면 :

  1. Clojure의 장점은 무엇입니까? 이 사이트 및 다른 곳에 대한 많은 답변, 예 : https://www.quora.com/Why-would-someone-learn-Clojure
  2. 언어를 이해하기 위해 알아야 할 절대 최소값은 얼마입니까? 나는 모두 관절로, Clojure의 디자인 뒤에 큰 아이디어를 아는 좋을 것 Clojure의 프로그래밍Clojure에서의 기쁨 ESP, 책이 많다는, 리치 키스 마크 야의 이야기입니다. 간단하게 이야기했다 . 당신은 알고 나면 왜 무엇을 / 당신이 다음 이해 시작할 수 있습니다 방법 , Clojure의 코드를 읽을 때 esp는. 클래스, 객체, 상태 / 돌연변이에서 "단지 함수와 데이터"(고차 함수, 맵 / 세트 / 시퀀스, 유형)로 사고를 바꾸는 방법.

추가 제안 : 리스프의 우아함과 힘은 미니멀하고 완전히 일관된 구문의 일부입니다. clojure-mode 및 ParEdit가있는 Emacs와 같은 훌륭한 편집기를 사용하면 훨씬 쉽게 이해할 수 있습니다. 익숙해지면 구문이 사라지고 의미, 의도 및 간결한 추상화를 "볼"것입니다. 둘째, ClojureScript 또는 Compojure의 소스를 읽는 것으로 시작하지 마십시오. 한 번에 너무 많은 소스가 있습니다. 4clojure.org 문제를 시도하고 솔루션을 최고의 코더와 비교하십시오. 4-6 개의 다른 솔루션을 볼 경우, 어리 석고 장황하며 불필요하게 복잡한 명령형 솔루션과 비교할 수있는 진정한 관용적 인 간결한 FP 스타일 솔루션을 작성했을 것입니다.


20

Lisp 방언은 간단한 구문으로 인해 독특한 틈새 시장을 가지고 있습니다. 이 간단한 구문은 매크로 사용을 통한 메타 프로그래밍을 매우 간단하게 만듭니다. 이를 통해 문제점 도메인에 사용자 언어에 맞게 모델링하는 대신 문제점 도메인에 맞게 언어를 모델링 할 수 있습니다. 머리를 숙이고 나면 정말 시원하며 다른 언어로는 매우 어려운 많은 일을 쉽게 할 수 있습니다.

단점은 모든 Lisp 프로그램이 본질적으로 자신의 언어를 정의하기 때문에 진행 상황을 이해하기 위해서는 확실한 이해가 필요하다는 것입니다.

자, 질문에 대답하기 위해 ...

  1. Clojure는 JVM / CLR에서 실행되는 최신 Lisp 언어입니다. 따라서 기존 인프라에서 Lisp의 강력한 기능을 쉽게 활용할 수 있습니다.

  2. 매크로를 사용하여 문제 도메인에 Lisp를 빌드하여 사용법을 이해하는 방법을 이해하는 것이 중요합니다. 핵심 언어 기능 중 많은 부분이 Lisp 자체에서 쉽게 구현 될 수 있다는 것을 알았을 때 Lisp 런타임을 구현 한 후에 만 ​​이것을 실제로 이해했습니다. 이것을 얻으려면 적당한 크기의 프로젝트가 필요합니다.

그것의 장점은 제쳐두고, 프로그래밍하는 것이 재미 있지만, 개인적으로 매일 문제를 해결하기 위해 많은 경우를 가지고 있지 않습니다. 마음 확장을 배우는 데 매우 유용한 도구이며 Lisp을 올바르게 학습 한 후 다른 언어로 된 메타 프로그래밍 기능을 활용하는 것이 훨씬 더 자연스럽게되었습니다.

간단한 구문을 사용하면 컴퓨터에서 쉽게 해석 할 수 있지만 (매우 강력한 매크로를 허용 함) 복잡한 식을 신속하게 구문 분석하기가 매우 어렵습니다.


2
라이트 테이블을 보셨습니까 ?

4
당신의 대답은 매크로가 Lisp 프로그래밍에 접근하는 일반적인 방법 인 것처럼 들립니다. 사실 대부분의 프로그래밍 문제는 일반적인 일류 함수로 해결할 수 있습니다. 매크로는 주로 언어 프로그래밍에 사용됩니다 (예 : 언어 확장). 또한 bookshelf.jp/texi/onlisp/onlisp_9.html
Robert Harvey

3
@RobertHarvey 나는 당신이 marcos를 사용하지 않는다면, 훨씬 더 읽기 쉬운 구문으로 일류 함수를 제공 할 다른 언어가 많이 있다고 주장 할 것입니다.
bunglestink

깔끔하게 보이는 @MichaelT. 나는 개념을 좋아한다.
DPM

3
@RobertHarvey Scala, JavaScript, C #, Python 및 Haskell은 Lisps보다 인간이 구문 분석 할 수있는 구문을 고려하는 일급 함수가있는 언어까지 내 머리 위에 있습니다.
bunglestink

10

Clojure의 강점은 여러 번 강조되어 왔으며, 매우 강력한 언어를 만들었으므로 여기서는 다시 반복하지 않겠습니다.

나는 단 일 이래로 항상 lisp를 좋아했으며 Clojure를 발견했을 때 정말 흥분했습니다 (아마도 학계 밖에서 lisp를 사용할 가능성이 있습니다!). 그러나 배우기 시작하면서 불안한 느낌이 들기 시작했지만 마음에 들지 않는 것을 정확히 찾아 낼 수는 없습니다. 우선 Common lisp로 코딩하는 것이 쉽고 재미 있었지만 Clojure는 학습 곡선이 더 가파르다 고 말합니다. Clisp는 그것에 아름다움과 우아함을 가지고있었습니다. Clojure에서 같은 느낌을 받을지 모르겠습니다. 더 많은 경험을 할 때 그 느낌이 사라질지 궁금합니다.

신비한 약간의 반발에 대한 또 다른 추측이 있습니다. 유연성이 뛰어나다 고 생각합니다. 예를 들어, 반 벡터 및 반지도 구조를 가질 수 있으며 몇 문자의 코드로 매개 변수로 허용하고 분리하여 올바르게 처리 할 수 ​​있습니다. 예, 모든 상용구를 제거하지만 어떻게 든 옳지 않습니다. 괄호, 콜론, 브레이크 트 등이 작동하는 규칙을 잘 모르는 것 같습니다.

나는 여전히 모든 장점 (주로 JVM에서 실행하고 동시성을 단순화하면서 Java보다 훨씬 강력하고 간결하며 디자인 결함이 적음)과 같은 언어를 여전히 좋아하지만 배심원은 여전히 ​​무언가 개선되었을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.