[clojure] Clojure, Scheme / Racket 및 Common Lisp의 차이점은 무엇입니까?

나는 그들이 lisp라고 불리는 동일한 언어 계열의 방언이라는 것을 알고 있지만 정확히 차이점은 무엇입니까? 가능한 경우 구문, 특성, 기능 및 리소스와 같은 주제를 다루는 개요를 제공 할 수 있습니까?



답변

그들은 모두 공통점이 많습니다.

  • 동적 언어
  • 강력하게 입력
  • 컴파일
  • Lisp 스타일 구문, 즉 코드는 Lisp 데이터 구조 (양식)로 작성되며 가장 일반적인 패턴은 다음과 같은 함수 호출입니다. (function-name arg1 arg2)
  • 코드를 데이터로 처리하고 런타임에 임의의 코드를 생성 할 수있는 강력한 매크로 시스템 (종종 새 구문으로 “언어를 확장”하거나 DSL을 생성하는 데 사용됨)
  • 다른 패러다임을 수용 할 수 있지만 함수형 프로그래밍 스타일에서 자주 사용됩니다.
  • REPL을 사용한 대화식 개발 강조 (즉, 실행중인 코드 인스턴스에서 대화식으로 개발)

Common Lisp의 특징 :

Clojure의 특징 :

  • Java 라이브러리를 직접 사용할 수 있으므로 가장 큰 라이브러리 에코 시스템
  • 표준 목록에 추가하여 표준으로 사용되는 벡터 []및지도 -벡터 및지도의 일반적인 유용성 외에도 일부 사람들은 이것이 일반적으로 더 읽기 쉽게 만드는 혁신이라고 생각합니다.{}()
  • Haskell에서 영감을 얻은 불변성과 지연 함수 프로그래밍에 대한 강조
  • 언어 수준에서 소프트웨어 트랜잭션 메모리가 지원하는 강력한 동시성 기능 (보기 : http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey )

계획의 특징 :

  • 틀림없이 가장 간단하고 배우기 쉬운 Lisp
  • 위생적인 매크로 ( http://en.wikipedia.org/wiki/Hygienic_macro 참조 )-매크로 확장에서 우발적 인 기호 캡처 문제를 우아하게 방지합니다.

답변

위의 사람들은 몇 가지를 놓쳤습니다.

  1. Common Lisp에는 벡터와 해시 테이블도 있습니다. 차이점은 Common Lisp는 벡터에 # ()을 사용하고 해시 테이블에는 구문을 사용하지 않는다는 것입니다. Scheme에는 벡터가 있습니다.

  2. Common Lisp에는 리더 매크로가있어 새로운 대괄호를 사용할 수 있습니다 (Schema의 후손 인 Racket과 마찬가지로).

  3. Scheme과 Clojure는 Common Lisp의 비위생적 인 매크로와 달리 위생적인 ​​매크로를 가지고 있습니다.

  4. 모든 언어는 현대적이거나 광범위한 개조 프로젝트가 있습니다. Common Lisp는 지난 5 년 동안 (대부분 Quicklisp 덕분에) 광범위한 라이브러리를 확보했으며 Scheme에는 일부 현대적인 구현 (Racket, Chicken, Chez Scheme 등)이 있으며 Clojure는 비교적 최근에 생성되었습니다.

  5. Common Lisp에는 OO 시스템이 내장되어 있지만 사용했던 다른 OO 시스템과는 상당히 다릅니다. 특히,이 적용되지 않습니다 – 당신은하지 않습니다 OO 코드를 작성 할 수 있습니다.

  6. 언어마다 디자인 철학이 다소 다릅니다. Scheme은 배우 모델을 이해하기위한 최소한의 방언으로 설계되었습니다. 나중에 교육학에 사용되었습니다. Common Lisp는 생겨난 수많은 Lisp 방언을 통합하도록 설계되었습니다. Clojure는 동시성을 위해 설계되었습니다. 결과적으로 Scheme은 미니멀하고 우아하며 Common Lisp는 강력하고 패러다임에 구애받지 않는 (기능적, OO 등) 함수형 프로그래밍을 선호하는 Clojure라는 명성을 얻었습니다.


답변

Lisp-1과 Lisp-2의 차이점을 잊지 마십시오.

Scheme과 Clojure는 Lisp-1입니다.
즉, 변수와 함수 이름이 동일한 네임 스페이스에 상주합니다.

Common Lisp는 Lisp-2입니다.
함수와 변수에는 서로 다른 네임 스페이스가 있습니다 (사실 CL에는 많은 네임 스페이스가 있음).


답변

Gimp는 Scheme으로 작성되었습니다. 🙂

사실 일부 사람들이 C ++로 작성 될 것이라고 생각하는 소프트웨어의 할당은 아마도 Lisp 우산 아래에서 수행되었을 것입니다. 무리에서 황금 사과를 선택하기가 어렵습니다. 사실 C ++가 항상 인기있는 것은 아니었고, 업데이트의 역사 때문에 오늘날에만 인기가있는 것 같습니다. 반세기 미만 동안 C ++는 멀티 스레딩도 사용하지 않았고, 파이썬은 오늘날 테스트되지 않은 쓸모없는 버그가있는 글루 코드의 cesspool이되었습니다. 조금 더 빨리 그리고 이제 우리는 기능적 프로그래밍의 증가를보고 있습니다. 나는 적응 부분에 관한 한 Java가 옳다고 생각합니다.

Scheme은 Lisp 언어를 단순화하기 위해 설계되었는데, 그 의도는 실제로 적용되지 않은 것을 제외하고는 유일한 의도였습니다. 나는 Clojure가 JVM에 대한 Scheme을 더 이상 단순화하기 위해 유사한 것을 수행한다고 생각합니다. 사용자 경험을 부풀리기위한 다른 모든 JVM 언어와 마찬가지로 Java 영역에서 상용구 작성을 단순화합니다.


답변