문제

Clojure가 등장하기 전에 JVM에는 이미 3개의 Lisp가 있었습니다. 카와, 무장곰 그리고 SISC.

어떤 격차가 발생합니까? 클로저 그 Lisp가 남긴 채우기?

도움이 되었습니까?

해결책

Kawa, ABCL 및 SISC는 치아에서 매우 긴 기존 언어를 상환합니다. JVM에서 어떤 이유로 표준 체계 또는 표준 공통 LISP를 사용하려면 우수합니다.

Clojure는 a입니다 새로운 언어. 채우지 않습니다 . 완전히 새로운 가능성을 추가합니다. 그것은 순전히 기능적인 접근 방식을 선호하며 CL은 둘 다 다중 파라디가입니다. Clojure는 다양한 FP 언어 (ML, Haskell)의 디자인에서 크게 차용합니다.

그리고 그렇습니다. 당신은 다른 LISP에 동시성 지원을 추가 할 수 있지만, 그것은 전적으로 포인트가 빠져 있습니다. Clojure는 처음부터 동시 언어로 설계되었습니다. 동시 프로그램을 작성하는 것이 Clojure에서는 사소한 일이기 때문에 비 기능적 언어로는 로켓 과학이 아닙니다 (체계, CL은 제외되지 않음). 이런 식으로보세요 :

사람들은 C를 사용하면 기본적으로 빠른 프로그램을 작성할 수 있다고 말합니다.

Clojure를 사용하면 기본적으로 동시 프로그램을 작성할 수 있습니다.

다른 팁

  1. "Clojure는 거꾸로 호환성에 의해 제한되지 않는 LISP입니다"(Clojure 웹 사이트에서). 새로운 시작입니다. 진보입니다. lisp/scheme을 강력하게 만드는 아이디어를 사용하지만 Java 주변을 다시 생각하십시오. 플랫폼.

  2. Clojure는 항상 가장 최근의 Clojure가 될 것입니다. 다른 언어가 JVM에 포팅되면 JVM 버전은 항상 캐치 업을 수행 할 수 있습니다. Java 플랫폼이 필요하지 않은 경우 다른 체계보다 SISC를 사용하는 이유는 무엇입니까? 그렇게한다면, 특별히 설계된 One LISP (Clojure)를 사용해보십시오.

  3. 동시성을 염두에두고 설계되었습니다.

내가 생각해 낼 수있는 가장 간단한 대답은 Clojure가 일반적인 것이 아닙니다. Clojure는 다른 LISP의 역사에 의해 제한되지 않습니다. 이것은 새로운 언어 세워짐 JVM의 경우.

나는 단순히 그것에 대해 알지 못했습니다. 이것은 Clojure에게 심각한 이점입니다 (사람들이 내가 알게 된 충분한 소음을 만들었습니다). Clojure가 내가 나열된 것들에서 보지 못했던 가장 큰 것은 소프트웨어 트랜잭션 메모리.

Clojure는 또한 다른 언어의 레이어와 달리 JVM을 위해 설계되었으므로 상호 작용을해야 할 때 다른 사람들이 생각하는 것이 조금 더 "java-y"입니다.

clojure.org의 이론적 페이지에 :

또 다른 프로그래밍 언어를 작성한 이유는 무엇입니까? 기본적으로 내가 원했기 때문에 :

  • LISP
  • 기능 프로그래밍 용
  • 확립 된 플랫폼을 가진 공생
  • 동시성을 위해 설계되었습니다

그리고 하나를 찾을 수 없었습니다.

언급 한 3 개 언어 (Kawa, ABCL 및 SISC)가 이러한 요구 사항을 충족합니까? 그들은:

  • LISP (CL 또는 체계 방언) ✓
  • 기능 프로그래밍 용 ✓
  • 확립 된 플랫폼 (JVM)이있는 공생 ✓ ✓

그러나 그들은 그렇지 않습니다 설계 (STM) 동시성; 그러나 공정하고 완전하기 위해 아직 언급되지 않은 CL에 대해 찾은 STM 라이브러리가 2 개 이상 있습니다.

  1. STMX
    • ABCL 작업 테스트. 적극적인 개발 중.
  2. CL-STM
    • 죽은? 마지막 변화는 2007 년에있었습니다.

흠 ... 왜 새 LISP를 만들까요? 주로 이것들이기 때문입니다 도서관. clojure.org의 근거 페이지는 계속됩니다 (강조 추가) :

표준 LISP (공통 LISP 및 체계)는 어떻습니까?

  • 표준화 후 느린/혁신 없음
  • 핵심 데이터 구조는 변동성이없고 확장 가능하지 않습니다
  • 사양의 동시성이 없습니다
  • JVM (ABCL, Kawa, Sisc et al)에 이미 좋은 구현이 있습니다.
  • 표준 LISP는 자체 플랫폼입니다

이것은 언어 동시성 디자인 다른 사람들이 언급했듯이 문제.

또한 왜 JVM에서 멈춰야합니까? Clojure CLR 지원은 활발한 개발 중입니다.

그것들은 내 관점에서 채우는 두 가지 간격입니다. Clojure가 필요에 맞는 경우 Clojure를 사용해야합니다. Clojure가지도에서 떨어지면 기술을 잃는 것에 대해 걱정하지 마십시오. 당신의 LISP 기술이지만 더 중요한 것은 당신의 사고 방식이 다른 LISP 방언으로 이어질 것입니다.

내가 냉소적 이었다면, 나는 Clojure가 더 좋은 웹 사이트 그리고 더 섹시한 이름.

또한 Clojure는 좋은 마케팅 기술과 많은 에너지를 가진 한 사람이 구현 한 비교적 새로운 언어라고 덧붙여 야합니다. 그는 Clojure에 많은 시간과 과대 광고를 투자하고 있습니다 ... 때로는 과대 광고는 충분한 사람들에게 그것이 최신 가장 큰 것을 확신시킬 수 있다면 실제로 그것을 만들 수있는 충분한 지원과 모멘텀을 얻을 수 있다는 점에서 자기 성취 예언입니다. 일하다.

나는 Kawa 등의 구현자가 위험에 빠지지 않기 때문에 그들의 제품을 과신하지 않는다고 생각합니다. 게다가, 과대 광고 할 것이 무엇입니까? "우리는 훌륭한 언어를 가지고 있습니다. LISP라고 불립니다."마케팅 판매가 더 어려워집니다.

나는 Java가 이것의 대표적인 예라고 생각합니다. 그것은 매우 심각한 결함이 있었지만, 시장과 과장을 많이 받았기 때문에 하드웨어/소프트웨어 공급 업체, 도구 생산자, 산업별 투자 등의 지원을 의미하는 많은 모멘텀을 얻었습니다. 성공, 나는 프로그래밍을 싫어했지만. Clojure는 다른 LISP가하지 않은 곳에서 비슷한 성공을 거둘 수 있습니다.

Clojure의 장점은 모든 Java 라이브러리/코드에 액세스 할 수 있고 JVM을 기반으로하기 때문에 멀티 스레딩 지원에 액세스 할 수 있다는 것입니다. 또한 동시성을 염두에두고 LISP로 설계되지 않은 것은 동시성을 염두에두고 설계되었지만, 매핑 프리미티브로 인해 동시성을 잘 지원하는 LISP를 설계하기는 어렵지 않을 것입니다.

즉, 나는 Clojure를 시도하고 Java와 연결된 모든 것과 어울리는 것처럼 보이는 엉덩이 요인의 구문과 고통을 싫어했습니다.

Clojure는 "Lisp"이며 이미 알고있는 LISP가 아닙니다. 나는 지난 며칠 동안 자료를 읽고 비디오를 보는 데 보냈다. 전제는 기능 프로그램 (불변 데이터 기반)이 동시성을 관리하는 가장 좋은 방법이라는 것입니다. Clojure는 JVM을 기반으로 LISP와 같은 시스템을 구현하여 제공합니다.

답변을 하나 더 가질 필요는 없지만(그리고 이 답변에 대한 투표는 기대하지 않습니다) 여기에 몇 가지 다른 답변에 대한 몇 가지 작은 개선 사항이 있습니다.

새로운 것이 반드시 더 나은 것은 아닙니다.더 새롭고 제대로 설계되지 않은 것은 좋지 않고, 더 새롭지만 유지 관리되지 않는 것도 좋지 않으며, 더 큰(또는 적어도 성장하는) 사용자 커뮤니티가 없는 새로운 것은 좋지 않습니다.(새로운 언어가 정기적으로 나오지만 대부분은 사용되지 않기 때문에 중도에서 제외됩니다.)

저는 커먼 리스프를 좋아합니다.그 아름다움의 일부는 기발함인데, 이는 여러 호환되지 않는 방언에 대한 하위 호환성을 목표로 위원회에 의해 설계되었다는 사실에서 비롯됩니다.

나는 계획을 좋아한다.아름답고 우아한 언어입니다.그럼에도 불구하고 그 발전은 위원회에 달려 있으며 아마도 그로 인해 때때로 속도가 느려졌을 수도 있습니다.어쨌든 그 목표는 Clojure의 목표와 다릅니다.

Common Lisp 및 Scheme에는 JVM의 효율성에 적합하지 않은 꼬리 재귀와 같은 강조점이 있습니다.Clojure는 처음부터 JVM에 잘 매핑되고 Java와 잘 상호 운용되도록 설계되었습니다.(Clojurescript 및 CLR 방언에 대해 이것이 무엇을 의미하는지 잘 모르겠습니다.)

Clojure가 처음에 Rich Hickey라는 한 사람에 의해 개발되었고 소규모 팀과 함께 그에 의해 제어된다는 사실이 위원회에 의해 제어되는 언어보다 반드시 더 나은 것은 아닙니다.그 한 사람이 잘못된 결정을 내린다면 Clojure는 좋은 언어가 아닐 것입니다.

그러나, 그리고 이게 중요한 포인트야:Hickey는 잘 계획되고 우아하며 처음부터 적은 비용으로 많은 일을 쉽게 수행할 수 있도록 체계적으로 관련된 기능 모음을 포함하는 언어를 설계했습니다.이는 기본 JVM 상호 운용성과 나머지 언어에도 적용됩니다.Clojure를 관리하는 사람들은 지금까지 언어의 목표를 고수하는 데 계속해서 엄격합니다.

이것이 제가 Clojure를 좋아하는 이유 중 큰 부분입니다.전체적으로도 디테일도 잘 디자인되어 있습니다.즉, 일단 익숙해지면 프로그래밍하는 것이 즐겁다는 뜻입니다.

Clojure가 Scheme의 우아함과 함께 Common Lisp의 힘을 갖고 있다고 말하는 것은 약간 과장(또는 과소평가?)일 것입니다.Common Lisp에는 필요한 것이 언어에 내장되어 있지만 엉망입니다. (저는 사랑으로 그렇게 말합니다.) 언어에 있는 것보다 더 많은 것이 필요할 때 때로는 서로 다른 절충안을 가진 호환되지 않는 여러 라이브러리가 있습니다.사용 가능한 라이브러리가 있지만 설계에 따른 구성표는 작습니다.클로저(Clojure)는 점점 더 성장하고 있다. 기준 CL과 달리 언어의 일부인 라이브러리입니다.이에 대한 좋은 예는 여러 가지 매트릭스 구현에 대한 공통 인터페이스를 제공하는 core.matrix 프로젝트입니다.예를 들어 작은 행렬을 가끔 사용하거나 거대한 행렬을 광범위하게 사용하는 데 가장 적합한 다양한 행렬 구현이 있기 때문에 이는 중요합니다.

이 중 어느 것도 Clojure가 Common Lisp나 Scheme보다 낫다고 말하려는 의도는 없습니다.그렇지 않습니다.세 가지 언어는 서로 다른 장점을 가지고 있습니다.

이것은 새롭다!이는 전통적인 리스프 커뮤니티가 전통적이기 때문에 많은 오래된 리스퍼가 이를 사용하지 않을 것이라는 의미이지만, 이는 또한 사람들이 이전 Lisp 경험이 없습니다. 새것으로 가져오겠습니다.

Imho, Clojure는 Smalltalk의 Ruby와 같은 오래된 Lisps입니다.반드시 더 나은 것은 아니지만 충분합니다.그리고 결정적으로, Ruby는 한때 Ruby처럼 추진력이 있고 떠오르는 언어로 간주되기 때문에 고용주가 더 수용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top