본문 바로가기

Programming

Clojure - A modern LISP dialect

Clojure 소개 


Clojure 
는 가장 오래된 프로그래밍 언어 중 하나인 LISP 의 현대적 변종 언어 (dialect)이다.

LISP 는 전통적으로 인공 지능 (Artificial Intelligence)과 같은 막연하면서 어려운 문제를 해결하기 위해 사용되어 왔다. 프로그래밍 언어로서의 LISP 는 간단한 문법 구조를 가지는데 비해 다소 어려운 개념을 내포하고 있어 이러한 개념을 완전히 이해하여 실용적인 프로그램을 만들어 내는 것은 매우 어려운 일로 알려져 있다.

Clojure  LISP 1 시스템에 기반하여 Code-as-Data 패러다임을 더 많은 데이타 구조로 확장하여 추상화하며, 순수한 Functional Programming Code  mutable data 를 격리함으로써 좀더 안정적인 멀티 쓰레드 프로그램을 만들 수 있다. 또한 Clojure  Java 가상 머신 상에서 작동하며 자바의 풍부한 자원을 사용할 수 있다.

 

Clojure 의 특징

Clojure  LISP 에 기반한 언어이며 LISP 의 특징들을 공유한다, 또한 Clojure  JVM 상에서 동작하며 Java byte 코드를 생성한다.

 

1. Homoiconicity

Clojure 에서 코드는 그대로 데이타가 되며 함수의 인수가 되거나 함수의 리턴값으로 출력될 수 있다.

 

2. Macro 를 이용한 언어의 확장과 추상화

Clojure 언어는 마크로를 이용하여 확장할 수 있으며 다양한 추상화 단계를 지원한다. Clojure 프로그래밍은 LISP 의 경우와 마찬가지로 당면한 문제를 다루는 루틴을 먼저 만든 후 이를 종합하여 하나의 프로그램을 완성하는 이른바 Bottom-up 방식의 프로그래밍에 적합하다. 다만, clojure 는 마크로 중 중요한 부분인 reader macro 를 지원하지 않는다.

 

3. Functional Programming

Clojure 는 순수한 수학적 모델에 기초한 Functional Programming 을 지원하며 이를 위해  mutable 데이타 처리를 격리함으로써 안정적인 멀티 쓰레드 프로그램을 쉽게 만들 수 있다. Clojure 는 다른 LISP 계열 언어보다 함수형 언어적 특성을 더욱 강조하고 있다.

 

4. Interop with Java

Clojure  JVM 기반 언어로서 자바에서 제공하는 수많은 메소드와 라이브러리를 사용할 수 있다.

 

5. Multithread

Clojure 는 처음부터 multithreading 을 위해 설계되었으며 immutable data structure STM(Software Transactional Memory) 를 이용하여 multithread programming 을 완벽하게 지원한다.

 

Clojure 의 미래

LISP 는 초기 하드웨어 상의 제약과 언어 자체의 난해함, 그리고 주 적용 대상인 인공 지능 분야의 쇠퇴 등의 이유로 널리 사용되지 못했다. 이후에도 생겨난지 50년이 지난 낡은 언어라는 인상은 새로운 것을 추구하는 IT 분야에서 매력있는 언어로 인식되지 못했고 LISP 는 단순히 학문적 호기심의 대상으로 머무는 경우가 많았다.

하지만 눈부시게 발전하는 컴퓨터 하드웨어와 함께 복잡하고 다양해지는 소프트웨어에 대한 요구를 소프트웨어 개발 환경이 소화해 내지 못하고, 이로 인해 프로그램의 개발과 업그레이드에 엄청난 노력이 소모됨에 따라 프로그램 개발에 있어서도 패러다임의 변화가 모색되고 있다.

이에 따라 기존 함수형 언어에 대한 시각이 새로워지고 있으며 이들 언어의 장점을 메이저 언어들이 적극적으로 수용하게 되었으며, 비주얼 스튜디오 2010 버전은 OCaml 의 닷넷 버전인 F#을 공식적으로 지원하고 있다. 이러한 상황에서 LISP 의 활용 가능성에 대한 시도도 늘어나고 있으며, 현대적 LISP 의 변종으로 JVM 에 기반한 Clojure 에 대한 관심도 높아지고 있다.

 

'Programming' 카테고리의 다른 글

Maemo 5 개발환경  (0) 2010.01.09
QT 기반으로 새로 태어나는 Maemo 6  (0) 2010.01.03
Closure in C++  (2) 2009.10.03
안드로이드 플랫폼에서 Clojure 실행  (0) 2009.06.14
Clojure Data Structure  (0) 2009.05.22