클로쥬르

Clojure
클로쥬르
Clojure logo.svg
패러다임멀티패키지:
가족리스프
설계자리치 히키
처음 등장한2007년; 15년 전(2007년)
안정된 릴리스
2022년[8] 4월 5일 / 1.11.1, 4개월 전(2022-04-05)
타이핑 분야
플랫폼
면허증.이클립스 퍼블릭 라이선스
파일 이름 확장자
  • .clj
  • .cljs
  • .cljc
  • .edn
웹 사이트clojure.org
영향을 받다
영향받은

Clojure(/cloʊʒr/like [15][16]closure)는 Java [17][18]플랫폼 상의 Lisp 프로그래밍 언어의 동적 기능적 방언입니다.다른 리스프 방언과 마찬가지로 Clojure는 코드를 데이터로 취급하며 리스프 매크로 [19]시스템을 갖추고 있습니다.현재의 개발 과정은 지역 사회 [20]주도로 진행되며, 리치 히키(Rich Hickey)가 생명을 위한 자비로운 독재자(BDFL)[21]로서 감독하고 있습니다.

Clojure는 불변성불변의 데이터 구조를 지지하며 프로그래머가 ID와 ID [22]상태를 관리하는 데 대해 명확하게 말하도록 장려합니다.이러한 불변의 가치와 명시적인 시간 경과 구조를 사용한 프로그래밍에 초점을 맞춘 목적은 단순하고 [23][24][15]빠른 프로그램을 더욱 견고하게, 특히 동시에 개발할 수 있도록 하기 위한 것입니다.그 타입 시스템은 완전히 동적인 반면, 최근의 노력[25]의존 타입 시스템의 구현을 요구하고 있다.

이력 및 개발 프로세스

클로쥬르 창시자 리치 히키

리치 히키는 클로주어족의 [17]창시자이다.Clojure 전에 그는 를 기반으로 한 유사한 프로젝트인 dotLisp를 개발했습니다.NET 플랫폼 [26]및 Lisp와 Java 간의 상호 운용성을 실현하기 위한 이전3개의 시도: Common Lisp(jfli),[27] Lisp(Foreign Object Interface for Lisp)[28] 및 Java Servlet(Lisplets)[29]에 대한 Lisp 친화적인 인터페이스.

Hickey는 2007년 [30]10월에 공개되기 전까지 약 2년 반 동안 Clojure를 연구했고, 그 시간의 대부분은 외부 자금 없이 Clojure만을 위해 일했다.이 시간이 끝날 무렵, Hickey는 Common Lisp 커뮤니티에 있는 몇몇 친구들에게 언어를 알리는 이메일을 보냈습니다.

개발 프로세스는 커뮤니티[20] 중심이며 Clojure JIRA 프로젝트 [31]페이지에서 관리됩니다.일반적인 개발 논의는 Clojure Google [32]Group에서 진행됩니다.누구나 [33]ask.clojure.org에서 이슈와 아이디어를 제출할 수 있지만 패치를 제공하려면 Clojure Contributor [34]계약에 서명해야 합니다.JIRA의 문제는 스크리너 팀에 의해 처리되어 최종적으로 Rich Hickey가 변경을 [35]승인합니다.

Hickey에 따르면 Clojure의 이름은 C#, LispJava의 C, L, J를 각각 포함하는 프로그래밍 개념 "closure"에 대한 단어 놀이이며 Clojure의 설계에 [16]큰 영향을 미쳤다.

설계 철학

Rich Hickey가 Clojure를 개발한 것은 기능 프로그래밍을 위한 현대적Lisp를 원했기 때문입니다.확립된 Java 플랫폼과 공생하며 동시성[23][24][36][15]위해 설계되었습니다.

Clojure의 상태에 대한 접근은 정체성의 개념으로 특징지어지는데,[22] 정체성은 시간이 지남에 따라 불변의 상태로 표현된다.상태는 불변의 값이기 때문에 다수의 작업자가 병렬로 작동할 수 있으며, 동시성은 한 상태에서 다른 상태로의 변화를 관리하는 문제가 됩니다.이를 위해 Clojure는 여러 가지 가변 참조 유형을 제공하며,[22] 각 유형은 상태 간 전환을 위한 명확한 의미론을 가지고 있습니다.

언어의 개요

버전 릴리즈 날짜 주요 기능/개선점
2007년 10월 17일(2007-10-17)[30] 최초 공개
1.0 2009년 5월 4일 (2009-05-04)[37] 첫 번째 안정적인 출시
1.1 2009년 12월 31일(2009-12-31)[38] 선물
1.2 2010년 8월 19일 (2010-08-19)[39] 프로토콜
1.3 2011년 9월 23일(2011-09-23)[40] 강화된 프리미티브 지원
1.4 2012년 4월 15일(2012-04-15)[41] 리더 리터럴
1.5 2013년 3월 1일(2013-03-01)[42] 리듀서
1.5.1 2013년 3월 10일(2013-03-10)[43] 메모리 누전 수정
1.6 2014년 3월 25일(2014-03-25)[44] Java API, 향상된 해시 알고리즘
1.7 2015년 6월 30일 (2015-06-30)[45] 변환기, 판독기 조건
1.8 2016년 1월 19일(2016년 1월 19일)[46] 추가 문자열 기능, 직접 링크, 소켓 서버
1.9 2017년 12월 8일(2017-12-08)[47] 사양 명령줄 도구와의 통합
1.10 2018년 12월 17일(2018-12-17)[48] 향상된 오류 보고 기능, Java 호환성
1.10.1 2019년 6월 6일(2019-06-06)[49] Java 퍼포먼스 회귀를 회피하고 에러 보고서를 개선하다clojure.main
1.10.2 2021년 1월 26일(2021-01-26)[50] Java의 상호 운용성/호환성 향상 및 기타 중요한 언어 수정
1.10.3 2021년 3월 4일 (2021-03-04)[51] 리더 조건의 프리플 지원
1.11.0 2022년 3월 22일 (2022-03-22)[8] 키워드 인수 호출의 새 구문, 새 구문clojure.math네임스페이스, 로드하지 않은 네임스페이스 에일리어스, 새로운 도우미 기능 추가clojure.core
현재 안정적인 버전: 1.11.1 2022년 4월 5일 (2022-04-05)[52] 유형 객체의 바이너리 직렬화에서 의도하지 않은 변경을 롤백하는 중clojure.lang.Keyword그리고.clojure.lang.ArraySeq.
범례:
구버전
이전 버전, 아직 유지 관리됨
최신 버전
최신 프리뷰 버전
향후 출시

Clojure는 Java 플랫폼에서 실행되므로 Java와 통합되어 Clojure에서 Java 코드를 호출할 수 있으며,[54] Java에서도 Clojure [53][15]코드를 호출할 수 있습니다.커뮤니티는 프로젝트 자동화에 Leiningen과 같은 도구를 사용하여 Maven 통합을 지원합니다.Leiningen은 프로젝트 패키지 관리 및 종속성을 처리하며 Clojure [55]구문을 사용하여 구성됩니다.

대부분의 다른 Lisps와 마찬가지로 Clojure의 구문은 [56][15]컴파일되기 전에 판독기에 의해 데이터 구조로 먼저 구문 분석되는 S-식을 기반으로 합니다.Clojure의 리더는 목록뿐만 아니라 지도, 세트, 벡터대한 리터럴 구문을 지원하며, 이러한 구문은 언급된 구조로 직접 [56]컴파일됩니다.Clojure는 Lisp-1이며 다른 Lisp와 호환되지 않는 자체 데이터 구조를 사용하기 때문에 Lisp의 [19]다른 방언과 코드 호환성이 없습니다.

Lisp 방언으로서 Clojure는 퍼스트 클래스 객체, Read-Eval-Print Loop(REPL; 읽기 평가 인쇄 루프) 및 매크로 [6]시스템으로서의 기능을 지원합니다.Clojure의 Lisp 매크로 시스템은 Clojure의 백인용어(구문 인용문) 버전이 네임스페이스로 기호를 한정한다는 점을 제외하면 Common Lisp와 매우 유사합니다.이렇게 하면 네임스페이스 수식 이름에 바인딩하는 것이 금지되므로 의도하지 않은 이름 캡처를 방지할 수 있습니다.캡처 매크로 확장을 강제로 수행할 수 있지만 명시적으로 수행해야 합니다.Clojure는 사용자 정의 리더 매크로를 허용하지 않지만, 리더는 보다 제한된 형식의 구문 [57]확장을 지원합니다.Clojure는 멀티메토드[58] 지원하며, 인터페이스와 같은 추상화에는 레코드[59] 사용하는 프로토콜 기반 [60]다형성과 데이터 유형 시스템이 있어 표현 문제를 피하기 위해 설계된 고성능 동적 다형성을 제공합니다.

Clojure는 느린 시퀀스를 지원하며 불변성지속적인 데이터 구조의 원리를 장려합니다.기능적 언어로서 부작용 기반의 루프 대신 재귀고차적 함수에 중점을 둔다.자동 테일콜 최적화는 JVM이 [61][62][63]네이티브로 지원하지 않기 때문에 지원되지 않습니다.또한 를 사용하여 명시적으로 실행할 수 있습니다.recur키워드를 [64]지정합니다.병렬 및 동시 프로그래밍을 위해 Clojure는 소프트웨어 트랜잭션 메모리,[65] 반응형 에이전트 시스템 [1]채널 기반 동시 [66]프로그래밍을 제공합니다.

Clojure 1.7은 동일한 네임스페이스에 [45][56]Clojure와 ClojureScript 코드를 삽입할 수 있도록 함으로써 리더 조건을 도입했습니다.변환기를 변환을 구성하는 방법으로 추가했습니다.변환기를 사용하면 지도 접기와 같은 고차 함수를 사용하여 입력 데이터 소스에 대해 일반화할 수 있습니다.전통적으로 이러한 기능은 시퀀스에서 작동하지만, 변환기를 사용하면 채널에서 작동할 수 있으며 사용자가 변환 [67][68][69]모델을 직접 정의할 수 있습니다.

확장 가능한 데이터 표기법

확장 데이터 표기법(edn)[70]은 데이터 전송 형식으로 사용되는 Clojure 언어의 하위 집합입니다.Clojure 데이터 구조를 직렬화 및 역직렬화하는 데 사용할 수 있으며, Clojure 자체는 프로그램을 나타내기 위해 edn의 슈퍼셋을 사용합니다.

edn은 JSON 또는 XML과 같은 방법으로 사용되지만 다음과 같이 비교적 많은 내장 요소 목록이 있습니다.

  • 부울란:true,false
  • 문자열:"foo bar"
  • 문자:\c,\tab
  • 기호:name
  • 키워드::key
  • 정수:123
  • 부동 소수점 번호:3.14
  • 리스트:(a b 42)
  • 벡터:[a b 42]
  • 맵:{:a 1, "foo" :bar, [1 2 3] four}
  • 설정:#{a b [1 2 3]}
  • 없음:nil(과 같은 값)

이러한 요소 외에도 문자로 구성된 태그를 사용하여 확장성을 지원합니다.#그 뒤에 기호가 붙습니다.태그가 발견되면 리더는 다음 요소의 값을 대응하는 핸들러에 전달하고 핸들러는 데이터 값을 반환합니다.예를 들어 태그 부착 요소일 수 있습니다.#myapp/Person {:first "Fred" :last "Mertz"}그 해석은 리더의 적절한 핸들러에 따라 달라집니다.

다른 요소에 대한 이러한 확장 요소의 정의는 기본 집합에 포함되지 않은 요소를 전달하기 위해 규칙이나 맥락 중 하나에 의존하는 것을 피한다.

대체 플랫폼

Clojure의 주요 플랫폼은 [18][53]Java이지만 다른 타깃 구현이 존재합니다.이 중 가장 주목되는 은 ECMAScript [72]3으로 컴파일되는 ClojureScript와 [71]위의 풀포트인 ClojureCLR입니다.[73]생태계와 상호 운용 가능한 NET 플랫폼.2013년에[74] 1,060명의 응답자를 대상으로 Clojure 커뮤니티를 대상으로 실시한 설문조사에 따르면 응답자의 47%가 Clojure와 ClojureScript를 모두 사용하고 있는 것으로 나타났습니다.2014년에는 55%[75]로 증가했고, 2015년에는 2,445명의 응답자를 기준으로 66%[76]로 증가했습니다.인기 있는 ClojureScript 프로젝트에는 Reagent,[77] re-frame,[78] Rum,[79] [80][81]Om 등의 React 라이브러리가 구현되어 있습니다.

기타 구현

다른 플랫폼에서의 Clojure 실장은 다음과 같습니다.

인기

기능 프로그래밍에 대한 관심이 계속되면서 Java 플랫폼을 사용하는 소프트웨어 개발자에 의한 Clojure의 채택은 계속 증가하고 있습니다.이 언어는 또한 브라이언 [93][94][95]괴츠, 에릭 [96][97]에반스,[98] 제임스 고슬링, [99] 그레이엄, 로버트 C와 같은 소프트웨어 개발자들에 의해 추천되었다. 마틴.[100][101][102][103]ThinkWorks는 Technology [104]Radar의 기능 프로그래밍 언어를 평가하면서 Clojure를 2010년에 "JVM에 Lisp를 심플하고 우아하게 구현한 것"이라고 설명했으며 2012년에는 "[105]ADOPT"로 승격했습니다.

Snyk와 Java Magazine이 공동으로 작성한 "JVM 에코시스템 리포트 2018"(JVM Ecosystem Report 2018)에서 Clojure는 JVM에서 "메인 애플리케이션"[106]에 두 번째로 많이 사용되는 프로그래밍 언어로 선정되었습니다.Clojure는 Apple,[108][109] Atlassian,[110] Funding Circle,[111] [112]Netflix, Nubank,[113] [114]PuppetWalmart[115] 같은 기업 및 [116]NASA와 같은 정부 기관에서 업계에서[107] 사용됩니다.비주얼 아트, 음악, 게임, [117]시를 포함한 크리에이티브 컴퓨팅에도 사용되고 있습니다.

도구들

Clojure 개발을 위한 툴링은 지난 몇 년 동안 크게 개선되었습니다.다음은 Clojure에서의 [118]프로그래밍 지원을 추가하는 플러그인이 있는 일반적인 IDE 및 텍스트 편집기의 목록입니다.

커뮤니티에서 제공하는 도구 외에 Clojure 1.[131]9 이후 Linux, macOSWindows에서도 공식 Clojure CLI[130] 도구를 사용할 수 있게 되었습니다.

예에 의한 특징

다음 예시는 Clojure CLI[130] 툴에서 시작하는 Clojure REP 또는 [132]REPL.it에서 제공되는 온라인 REP와 같은 Clojure REP에서 실행할 수 있습니다.

심플함

단순성을 강조하기 때문에 Clojure 프로그램은 일반적으로 대부분 함수와 단순한 불변의 데이터 구조(예: 목록, 벡터, 지도 및 집합)로 구성됩니다.

REP에서의 프로그래밍

다른 Lisps와 마찬가지로 Clojure의 상징적인 기능 중 하나는 [133]REP에서의 인터랙티브 프로그래밍입니다.다음의 예에서는,;회선 코멘트를 기동해,;; =>에 예상되는 출력을 나타냅니다.

; 변수를 정의합니다. (방어하다a 42) ;; => #'사용자/a  ; '+'라는 이름의 함수를 호출한다. (+a 8) ;; => 50  even이라고 하는 함수를 호출한다. (짝수? a) ;; => 참  ; 10으로 나누면 n의 나머지를 반환하는 함수를 정의합니다. (정의하다후우 [n] (기억하다n 10)) ;;; => #'사용자/foo  ; 함수를 호출한다. (후우 a) ;;; => 2  ; 'rem'의 docstring을 출력합니다. (문서기억하다) ;;; => ------------------------- clojure.core/rem ([숫자 나누다])  남은 것  구분하는 분자 타고 분모  ; 'rem'의 출처를 인쇄한다. (원천 기억하다) ;;; => (정의하다기억하다   "분자를 분모로 나누는 방법"   {: 추가 "1.0"    : 정적 진실의    : 개요 (fn[x y] `(.clojure.clojure.clojure.cl숫자 (남은 것 ~x ~y)))}   [숫자 나누다]     (.clojure.clojure.clojure.cl숫자 (남은 것 숫자 나누다))) 

실행 시 이름

이름이 컴파일되는 다른 런타임 환경과 달리 Clojure의 런타임 환경은 일반 Clojure 데이터 구조를 사용하여 쉽게 확인할 수 있습니다.

;;=>.#'user/a, 모든 공공 vars은`user` 네임 스페이스(ns-publics'user)에 강제 수용되어 지도를 얻;=>,{한#'user/a},#'`(독자 매크로)`을 통해 참조가 분포하고, 연결된, namespace-qualified 상징 `user/a`#'user/a;=>.#'user/a, de-reference이 분포한다(deref#'user/a)(의 값을 가져오);=>, 42, 초본(42def)을 정의 내린다.를 보러 정의nation(docstring 포함), 10(defn foo "(rem n 10)", [n](rem n 10)", => #'user/foo', var '#'user/foo'(doc #'/foo), => {n}: lists 'doc'나누었을 때 나머지 nation'을 반환합니다.

데이터로서의 코드(호모콘성)

다른 Lisps와 마찬가지로 Clojure는 호모아이코닉이다.다음 예제에서는 코드 자체를 수정하는 코드를 작성하는 방법을 볼 수 있습니다.

; 함수(코드)를 호출한다. (+1 1) ;;; => 2  함수 호출을 인용하다 ;(코드를 기호 목록인 데이터로 변환) (견적을 내다(+1 1)) ;; => (+ 1 1)  목록의 첫 번째 요소를 가져옵니다. ;(코드로 데이터로서 동작) (첫번째(견적을 내다(+1 1))) ;; => +  ; 목록의 마지막 요소를 가져옵니다. ;(코드로 데이터로서 동작) (지난(견적을 내다(+1 1))) ;; => 1  ; 원래 목록의 기호를 대체하여 새 목록을 가져옵니다. ;(데이터로서 코드를 시뮬레이트) (지도(fn[형태]        (사례. 형태          1 '하나          +플러스))      (견적을 내다(+1 1))) ;; => (+1개) 

데이터 변환을 위한 표현 연산자

스레드 매크로(->,->>, 및 친구)는 일련의 변환을 통해 데이터 집합의 파이핑 추상화를 구문적으로 표현할 수 있습니다.

(->> (범위10)      (지도주식회사)      (필터짝수?)) ;; => (2 4 6 8 10) 

또한 변환기를 사용하여 보다 효율적으로 이 작업을 수행할 수 있습니다.

(순서 (컴포넌트(지도주식회사)                 (필터짝수?))           (범위10)) ;; => (2 4 6 8 10) 

ID 및 상태 스레드 세이프 관리

고유한 일련 번호의 스레드 세이프 생성기(다른 많은 리스프 방언과 마찬가지로 Clojure에는 내장되어 있습니다).gensym내부 기능 사용):

(방어하다i (원자 0))  (정의하다generate-module-id   "각 호출에 대해 고유한 숫자 ID를 반환합니다."   []   (교환! i 주식회사)) 

매크로

의 익명 서브클래스java.io.Writer아무것도 쓰지 않고 매크로를 사용하여 그 안에 있는 모든 인쇄물을 정지합니다.

(방어하다비트 라이터   (프록시[java.io 를 참조해 주세요.작가.] []     (쓰다 [부프] 제로)     (가까운. []    제로)     (붉어지다[]    제로)))  (defmacro인쇄하지 않다   "모든 인쇄가 "*out" 무음 상태로 지정된 "폼"을 평가합니다."   [& ]   `(바인딩[*출력* 비트 라이터]      ~@))  (인쇄하지 않다   (인쇄"안녕하세요, 아무도 없어요!")) ;;; => 없음 

자바와의 언어 상호 운용성

Clojure는 설계 목표 중 하나로 호스트 플랫폼을 수용하기 위해 처음부터 개발되었으며, 따라서 Java와의 뛰어난 언어 상호 운용성을 제공합니다.

; 인스턴스 메서드를 호출합니다. (.대소문자 "애플") ;; => "APPLE"  ; 정적 메서드를 호출합니다. (시스템/getProperty "param.vm.version") ;;; => "12+33"  ; 'syslog.instance'를 만듭니다.HashMap' 및 ; 일부 엔트리를 추가합니다. (도토(java.displaces를 클릭합니다.해시 맵)   (.놓다 "애플" 1)   (.놓다 "실패" 2)) ;;; => {"complete" 2, "apple" 1 }  ; 'syslog.instance'를 만듭니다.어레이 리스트' 및 ; 의 요소는 "snotjure.core/map" 으로 증가합니다. (방어하다 (도토(java.displaces를 클릭합니다.어레이 리스트)           (.더하다 1)           (.더하다 2)           (.더하다 3)))  (map inc) ;; => (2 3 4)  ; Java Swing을 사용한 메시지 대화 상자 표시 (javax.displaces.displaces 를 클릭합니다.JOption Pane/show Message Dialog   제로   "안녕, 월드!") ;;; => 없음 

소프트웨어 트랜잭션 메모리

하나의 공유 데이터 구조를 조작하는 10개의 스레드. 각각 10개의 고유 번호를 포함하는 100개의 벡터로 구성됩니다.그런 다음 각 스레드는 2개의 랜덤 벡터에서 2개의 랜덤 위치를 반복하여 선택하고 스왑합니다.벡터에 대한 모든 변경은 Clojure의 소프트웨어 트랜잭션 메모리 시스템을 사용하여 트랜잭션에서 발생합니다.

(정의하다달려.   [디스크 니트 스레드 니터]   (허락하다[vec-refs         (->> (*디스크 니트)              (범위)              (안으로[] (컴포넌트(파티션 전체 니트)                             (지도VEC)                             (지도레퍼런스))))          바꾸다         #(허락하다[v1 (랜드 인트디스크)                v2 (랜드 인트디스크)                i1 (랜드 인트니트)                i2 (랜드 인트니트)]           (동기             (허락하다[tmp (n번째@(vec-refs v1) i1)]               (바꾸다(vec-refs v1) 유사.i1 (n번째@(vec-refs v2) i2))               (바꾸다(vec-refs v2) 유사.i2 tmp))))          보고하다         #(->> vec-refs               (안으로[] (컴포넌트(지도참조 해제)                              (지도(fn[v] (인식하다v) v))                              고양이                              (분명한)))               (세어보세요)               (인쇄"구분:"))]      (보고하다)      (->> #(닷타임[_ 니터] (바꾸다))          (따라하다스레드)          (적용합니다.PCalls)          (도룬))      (보고하다)))  (달려. 100 10 10 100000) ;;; => [0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]   ... [990 991 992 993 994 995 996 997 998 999] 분명한: 1000  [382 318 466 963 619 22 21 273 45 596] [808 639 804 471 394 904 952 75 289 778]   ... [484 216 622 139 651 592 379 228 242 355] 분명한: 1000 제로 

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b "Agents and Asynchronous Actions". Clojure.org. Retrieved 2019-07-07.
  2. ^ "Concurrent Programming". Clojure.org. Retrieved 2019-07-07.
  3. ^ Hickey, Rich; contributors. "core.async". GitHub.com. Retrieved 2019-07-07. {{cite web}}: author2=범용명(도움말)이 있습니다.
  4. ^ "Functional Programming". Clojure.org. Retrieved 2019-07-07.
  5. ^ Nolen, David; Hickey, Rich; contributors. "core.logic". GitHub.com. Retrieved 2019-07-07. {{cite web}}: author3=범용명(도움말)이 있습니다.
  6. ^ a b "Macros". Clojure.org. Retrieved 2019-07-07.
  7. ^ Esterhazy, Paulus. "Threading Macros Guide". Clojure.org. Retrieved 2019-07-07.
  8. ^ a b Miller, Alex (2022-03-22). "Clojure 1.11.0 release". Clojure.org.
  9. ^ Fogus, Michael (2011). "Rich Hickey Q&A". CodeQuarterly.com. Archived from the original on 2017-01-11.
  10. ^ Bonnaire-Sergeant, Ambrose (2012). A Practical Optional Type System for Clojure (Thesis). The University of Western Australia.
  11. ^ "Clojure Programming" (PDF). OReilly.com. Retrieved 2013-04-30.
  12. ^ Hickey, Rich. "Clojure Bookshelf". Amazon.com. Archived from the original on 2017-10-03. Retrieved 2019-07-07.
  13. ^ Baldridge, Timothy. "Pixie". PixieLang.org. Retrieved 2019-07-07.
  14. ^ Ramachandra, Ramkumar. "Rhine". GitHub.org. Retrieved 2019-07-07.
  15. ^ a b c d e Edwards, Kathryn (2009-08-10). "The A-Z of Programming Languages: Clojure". Computerworld.com.au. Archived from the original on 2019-08-26.
  16. ^ a b Hickey, Rich (2009-01-05). "meaning and pronunciation of Clojure". Google.com.
  17. ^ a b Krill, Paul (2012-03-22). "Clojure inventor Hickey now aims for Android". InfoWorld.com.
  18. ^ a b "Clojure". Clojure.org. Retrieved 2019-07-07.
  19. ^ a b "Differences with other Lisps". Clojure.org. Retrieved 2019-07-07.
  20. ^ a b "Development". Clojure.org. Retrieved 2019-07-07.
  21. ^ Hickey, Rich (2018-11-26). "Open Source is Not About You". GitHub.com.
  22. ^ a b c "Values and Change: Clojure's approach to Identity and State". Clojure.org. Retrieved 2019-07-07.
  23. ^ a b Hickey, Rich. "Rationale". Clojure.org. Retrieved 2019-07-07.
  24. ^ a b Torre, Charles (2009-10-06). "Expert to Expert: Rich Hickey and Brian Beckman – Inside Clojure". MSDN.com.
  25. ^ "clojure/spec.alpha". GitHub. 2017-04-26.
  26. ^ Hickey, Rich (2002-10-16). "[ANN] dotLisp – a Lisp dialect for .Net". Google.com.
  27. ^ Hickey, Rich (2013-04-15). "jfli". SourceForge.net.
  28. ^ Hickey, Rich (2013-04-03). "foil - Foreign Object Interface for Lisp". SourceForge.net.
  29. ^ Hickey, Rich (2013-03-07). "Lisplets". SourceForge.net.
  30. ^ a b Hickey, Rich (2020-06-12). "A history of Clojure". Proceedings of the ACM on Programming Languages. 4 (HOPL): 1–46. doi:10.1145/3386321. Retrieved 2022-05-07.
  31. ^ "Clojure". Atlassian.net. Retrieved 2019-07-07.
  32. ^ "Clojure". Google.com. Retrieved 2019-07-07.
  33. ^ "Clojure Forum". clojure.org. Retrieved 2020-03-20.
  34. ^ "Contributor Agreement". Clojure.org. Retrieved 2019-07-07.
  35. ^ "Workflow". Clojure.org. Retrieved 2019-07-07.
  36. ^ Elmendorf, Dirk (2010-04-01). "Economy Size Geek – Interview with Rich Hickey, Creator of Clojure". LinuxJournal.com.
  37. ^ Hickey, Rich (2009-05-04). "Clojure 1.0". BlogSpot.com.
  38. ^ Hickey, Rich (2009-12-31). "Clojure 1.1 Release". BlogSpot.com.
  39. ^ Hickey, Rich (2010-08-19). "Clojure 1.2 Release". Google.com.
  40. ^ Redinger, Christopher (2011-09-23). "[ANN] Clojure 1.3 Released". Google.com.
  41. ^ Dipert, Alan (2012-04-17). "[ANN] Clojure 1.4 Released". Google.com.
  42. ^ Halloway, Stuart (2013-03-01). "ANN: Clojure 1.5". Google.com.
  43. ^ Halloway, Stuart (2013-03-10). "Clojure 1.5.1". Google.com.
  44. ^ Miller, Alex (2014-03-25). "[ANN] Clojure 1.6". Google.com.
  45. ^ a b Miller, Alex (2015-06-30). "Clojure 1.7 is now available". Clojure.org.
  46. ^ Miller, Alex (2016-01-19). "Clojure 1.8 is now available". Clojure.org.
  47. ^ Miller, Alex (2017-12-08). "Clojure 1.9 is now available". Clojure.org.
  48. ^ Miller, Alex (2018-12-17). "Clojure 1.10 release". Clojure.org.
  49. ^ Miller, Alex (2019-06-06). "Clojure 1.10.1 release". Clojure.org.
  50. ^ Miller, Alex (2021-01-26). "Clojure 1.10.2 release". Clojure.org.
  51. ^ Miller, Alex (2021-03-04). "Clojure 1.10.3 release". Clojure.org.
  52. ^ Miller, Alex (2022-04-05). "Clojure 1.11.1 release". Clojure.org.
  53. ^ a b "Hosted on the JVM". Clojure.org. Retrieved 2019-07-07.
  54. ^ "Java Interop". Clojure.org. Retrieved 2019-07-07.
  55. ^ Hagelberg, Phil; contributors. "Leiningen". Leiningen.org. Retrieved 2019-07-07. {{cite web}}: author2=범용명(도움말)이 있습니다.
  56. ^ a b c "The Reader". Clojure.org. Retrieved 2019-07-07.
  57. ^ Hickey, Rich. "edn". GitHub.com. Retrieved 2019-07-07.
  58. ^ "Multimethods and Hierarchies". Clojure.org. Retrieved 2019-07-07.
  59. ^ "Protocols". Clojure.org. Retrieved 2019-07-07.
  60. ^ "Datatypes: deftype, defrecord and reify". Clojure.org. Retrieved 2019-07-07.
  61. ^ Goetz, Brian (2014-11-20). "Stewardship: the Sobering Parts". YouTube.com.
  62. ^ Rose, John (2007-07-12). "tail calls in the VM". Oracle.com.
  63. ^ Rose, John (2009-02-11). "Some languages need to be able to perform tail calls". Java.net.
  64. ^ "Special Forms". Clojure.org. Retrieved 2019-07-07.
  65. ^ "Refs and Transactions". Clojure.org. Retrieved 2019-07-07.
  66. ^ Hickey, Rich (2013-06-28). "Clojure core.async Channels". Clojure.org.
  67. ^ Hickey, Rich (2014-09-17). "Transducers". YouTube.com.
  68. ^ Hickey, Rich (2014-08-06). "Transducers are Coming". Cognitect.com.
  69. ^ Hickey, Rich (2014-11-20). "Inside Transducers". YouTube.com.
  70. ^ "Official EDN Spec". edn-format.org. 2022-04-27.
  71. ^ "ClojureScript". ClojureScript.org. Retrieved 2019-07-06.
  72. ^ "ClojureScript – FAQ (for JavaScript developers)". ClojureScript.org. Retrieved 2018-02-04.
  73. ^ "ClojureCLR". GitHub.com. Retrieved 2012-06-28.
  74. ^ Emerick, Chas (2013-11-18). "Results of the 2013 State of Clojure & ClojureScript survey". CEmerick.com. Archived from the original on 2018-10-29. Retrieved 2019-07-06.
  75. ^ "State of Clojure 2014 Survey Results". WuFoo.com. Retrieved 2015-09-17.
  76. ^ Gehtland, Justin (2016-01-28). "State of Clojure 2015 Survey Results". Cognitect.com.
  77. ^ "Reagent". GitHub.io. Retrieved 2019-07-06.
  78. ^ "re-frame". GitHub.com. Retrieved 2019-07-06.
  79. ^ Prokopov, Nikita. "Rum". GitHub.com. Retrieved 2019-07-06.
  80. ^ Nolen, David. "Om". GitHub.com. Retrieved 2019-07-06.
  81. ^ Coupland, Tom (2014-01-17). "Om: Enhancing Facebook's React with Immutability". InfoQ.com.
  82. ^ Borkent, Michiel. "Babashka". babashka.org. Retrieved 2019-08-19.
  83. ^ Hu, Wei. "A Lisp on Perl". MetaCPAN.org. Retrieved 2019-07-06.
  84. ^ "Clojure - Clojure CLR". clojure.org. Retrieved 2022-05-06.
  85. ^ Facorro, Juan. "Clojerl". GitHub.com. Retrieved 2019-07-06.
  86. ^ Baldridge, Timothy. "clojure-py". GitHub.com. Retrieved 2019-07-06.
  87. ^ "ClojureRS". GitHub.com. Retrieved 2022-03-17.
  88. ^ Akkaya, Nurullah. "Ferret". Ferret-Lang.org. Retrieved 2019-07-06.
  89. ^ Bataev, Roman. "Joker". Joker-Lang.org. Retrieved 2019-07-06.
  90. ^ Cannon, Aemon. "Laz3r". GitHub.com. Retrieved 2019-07-06.
  91. ^ Baldridge, Timothy. "Pixie". PixieLang.org. Retrieved 2019-07-06.
  92. ^ Connor, Ashe. "Rouge". GitHub.com. Retrieved 2019-07-06.
  93. ^ Goetz, Brian (2020-05-24). "Brian Goetz' favorite non-Java JVM language (Part 1 of 3)". Twitch.tv.
  94. ^ Goetz, Brian (2020-05-24). "Brian Goetz' favorite non-Java JVM language (Part 2 of 3)". Twitch.tv.
  95. ^ Goetz, Brian (2020-05-24). "Brian Goetz' favorite non-Java JVM language (Part 3 of 3)". Twitch.tv.
  96. ^ Evans, Eric (2018-08-14). "Modelling Time - Eric Evans - Domain-Driven Design Europe 2018". YouTube.com.
  97. ^ Evans, Eric (2014-11-21). "Eric Evans on Twitter". Twitter.com.
  98. ^ "James Gostling meetup with London Java Community". YouTube.com. 2016-10-11.
  99. ^ Graham, Paul (2016-05-06). "Paul Graham on Twitter". Twitter.com.
  100. ^ Martin, Robert (2019-08-22). "Why Clojure?". CleanCoder.com.
  101. ^ Martin, Robert (2018-11-29). "Unble Bob Martin on Twitter". Twitter.com.
  102. ^ Martin, Robert (2018-08-01). "Introduction To Functional Programming". CleanCoders.com.
  103. ^ Martin, Robert (2017-07-11). "Pragmatic Functional Programming". CleanCoder.com.
  104. ^ "Frequently Asked Questions - Technology Radar - ThoughtWorks". ThoughtWorks.com. Retrieved 2019-02-10.
  105. ^ "Clojure - Technology Radar - ThoughtWorks". ThoughtWorks.com. Retrieved 2019-02-10.
  106. ^ Maple, Simon; Binstock, Andrew (2018-10-17). "JVM Ecosystem Report 2018". Snyk.io.
  107. ^ "Success Stories". Clojure.org. Retrieved 2018-10-27.
  108. ^ Liutikov, Roman (2017-12-17). "Roman Liutikov on Twitter". Twitter.com.
  109. ^ "Jobs at Apple". Apple.com. Retrieved 2019-07-06.
  110. ^ Borges, Leonardo (2015-07-07). "Realtime Collaboration with Clojure". YouTube.com.
  111. ^ Pither, Jon (2016-10-04). "Clojure in London: Funding Circle – Lending some Clojure". JUXT.pro.
  112. ^ Williams, Alex (2014-08-03). "The New Stack Makers: Adrian Cockcroft on Sun, Netflix, Clojure, Go, Docker and More". TheNewStack.io.
  113. ^ "Nubank adquire empresa norte-americana de tecnologia Cognitect".
  114. ^ Price, Chris (2014-04-11). "A New Era of Application Services at Puppet Labs". Puppet.com. Retrieved 2020-08-06.
  115. ^ Phillips, Marc (2015-07-14). "Walmart Runs Clojure at Scale". Cognitect.com.
  116. ^ "Common-Metadata-Repository". GitHub.com. Retrieved 2019-07-06.
  117. ^ Meier, Carin (2015-05-06). "Creative computing with Clojure". OReilly.com.
  118. ^ Miller, Alex (2019-02-04). ""State of Clojure 2019" Results". Clojure.org.
  119. ^ Szabo, Maurício. "Chlorine: Socket REPL Client for Clojure and ClojureScript". Atom.io. Retrieved 2019-07-05.
  120. ^ Batsov, Bozhidar; contributors. "CIDER: The Clojure Interactive Development Environment that Rocks". CIDER.mx. Retrieved 2019-07-05. {{cite web}}: author2=범용명(도움말)이 있습니다.
  121. ^ Shrago, Greg. "Clojure-Kit: Clojure and ClojureScript plugin for IntelliJ-based tools". JetBrains.com. Retrieved 2019-07-05.
  122. ^ Fleming, Colin. "Cursive: Provides full Clojure and ClojureScript language support". JetBrains.com. Retrieved 2019-07-05.
  123. ^ Pope, Tim. "fireplace.vim: Clojure REPL Support". VIM.org. Retrieved 2019-07-05.
  124. ^ Monroe, Dominic (2016-12-13). "Clojure and Vim: An overview – It's very possible". JUXT.pro.
  125. ^ Masashi, Iizuka. "vim-iced: Clojure Interactive Development Environment for Vim8/Neovim". GitHub.com. Retrieved 2020-03-13.
  126. ^ Caldwell, Oliver. "Neovim Clojure(Script) tooling over prepl". GitHub.com. Retrieved 2019-11-09.
  127. ^ Caldwell, Oliver (2019-11-06). "Getting started with Clojure, Neovim and Conjure in minutes". oli.me.uk.
  128. ^ Strömberg, Peter. "Calva: Clojure & ClojureScript Interactive Programming". VisualStudio.com. Retrieved 2019-07-05.
  129. ^ Szabo, Maurício. "Clover". VisualStudio.com. Retrieved 2021-01-28.
  130. ^ a b Miller, Alex. "Deps and CLI Guide". Clojure.org. Retrieved 2019-07-08.
  131. ^ Miller, Alex (2017-12-08). "Clojure 1.9". Cognitect.com.
  132. ^ "Online Clojure REPL". REPL.it. Retrieved 2019-07-08.
  133. ^ "Programming at the REPL: Introduction". Clojure.org. Retrieved 2018-12-04.

추가 정보

외부 링크

1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
LISP 1, 1.5, LISP 2(abandoned)
마클리스프
인터리스크
MDL
리스프 기계 리스프
스킴 R5RS R6RS R7RS 소형
없음
ZIL(Zork 구현 언어)
프란츠 리스프
일반적인 리스프
르 리스프
MIT 스킴
T
체즈 스킴
Emacs 리스프
자동 LISP
피코리스프
EuLisp
ISLISP
오픈리스프
PLT 방식 라켓
GNU Guile
비주얼 LISP
클로쥬르
LFE
하이