2016년 3월 28일 월요일

The first Clojure - 01.설치해보기

Clojure는 리치히키가 만든 리스프 프로그래밍 언어의 방언으로, 범용 함수형 언어이다. 이 언어는 불변값과 시간-진행 구분을 통한 프로그래밍을 강조하는데, 이는 보다 탄탄한 프로그램, 특히 멀티스레드 프로그램의 개발을 용이하게 하기 위해서이다.
클러저는 자바 가상머신과 공통 언어 런타임(CLR), 그리고 자바스크립트 엔진 상에서 실행된다. 다른 리스프 언어들과 같이 클로저는 코드를 데이터로 취급하며, 정교한 매크로 시스템을 갖고 있다. - 위키백과

  • 리스프(Lisp, LISP) 혹은 리습?
프로그래밍 언어의 계열로, 오랜 연가와 독특하게 괄호를 사용하는 문법으로 유명. 리스프는 본래 실용적인 목적 아래 컴퓨터 프로그램을 활용하여 수학 표기법을 나타내기 위한 목적으로 만들어졌다. 곧이어 인공지능 연구소에서 가장 인기있는 언어가 되었다.


  • 공통언어 런타임(Common Language Runtime, CLR)?
마이크로소프트 닷넷 이니셔티브의 가상머신 구성요소. 프로그램 코드를 위한 실행 환경을 정희하는 마이크로소프트의공통 언어 기반(CLI) 표준의 기능


Clojure 언어 특징
  • 클로저(Clojure)는 현대적인 리스프이다. 리스프처럼 문법이 간결하다.
  • (F#이나 Scala는 C++처럼 문법이 복잡하고 기이하다)
  • 클로저(Clojure)는 JVM상에서 실행된다. 브라우저에서 실행되는 클로저(Clojure)인 ClojureScript와, CLR에서 실행되는 클로저(Clojure)인 ClojureCLR도 있다.
  • 클로저(Clojure)는 동시성에 대한 최신 솔루션인 STM(Software Transaction Memory)을 제공한다. 그래서 Thread와 Lock이 필요없다.
  • 클로저(Clojure)는 빠르다(메모리 공유 불변 데이타 구조 채택)
  • 다양한 지원 : 튜토리얼, 블로그, IDE, 커뮤니티, 메일링 리스트.

Java → clojure 코드 비교
(http://rosettacode.org/wiki/Rosetta_Code, Rosetta Code에 가시면 동일한 문제를 여러 언어로 설명하는 자료를 아주 많이 보실수 있습니다.)
단수 Count 함수


Java
public class Count{
  public static void main(String[] args){
      for(int i = 0;i >= 0;i++){
          System.out.println(Integer.toOctalString(i)); //optionally use "Integer.toString(i, 8)"
      }
  }
}


clojure
(doseq [i (range)] (println (format "%o" i)))
너무 단순합니다. 이 단순함이 Cloure의 무기 중 하나입니다. 아래는 Clojure의 문장 구성을 보여줍니다. 첫번째로 함수명이 오고, 다음부터는 인자가 들어옵니다. 각 함수의 시작과 끝은 ‘(‘, ’)’로 이루워 집니다.


Clojure의 막강한 표현력
  • 코드가 짧을 수록 코드를 작성하고 독해하는데 드는 인지적 비용이 적다.
  • 코드가 짧을 수록 추상성 구축이 쉽다.
  • 코드가 짧을 수록 변경이 쉽다.
  • 코드가 짧을 수록 버그가 적다.

IDE 설치
여러 IDE가 있지만, 저는 Eclipse을 이미 쓰고 있기에 플러그인을 설치 하였습니다. http://dev.clojure.org/dashboard.action에 가시면 더 많은 IDE 정보를 보실수 있습니다.

Install as an Eclipse Plugin


Pre-requisites
any Eclipse packaging which includes JDT (Java Development Tools) will work: "Eclipse SDK" package, "Eclipse for Java Developers" package, "Eclipse for Java EE Developers" package, etc.



Eclipse 3 (Indigo, Eclipse 3.8.x) is no longer supported, but you can still install a version < 0.30 of Counterclockwise
Counterclockwise is available via the Eclipse Marketplace Client: search for Counterclockwise

Install을 진행하면 됩니다. 그런데 오래 걸립니다. 인내는 프로그래머의 기본입니다.


clojure 설치
  • https://clojure.org/ 에서 최신 버전을 다운 받는다.
  • 압축을 풀어서 적당한 위치로 옮긴다.
  • 압축을 풀 디렉토리로 이동하면 ‘pom.xml’이 있다. ‘mvn install’로 jar 파일을 생성한다. 물로 maven이 그전에 설치되어 있어야 한다. test Skip하고 싶다면 ‘-Dmaven.test.skip=true’ 옵션을 사용한다.(Maven이 싫다면 Ant을 사용해된다.)
설치는 끝?났고, 실행해봅니다. ‘java -cp clojure-${VERSION}.jar clojure.main’ 실행 전에 자바는 설치되어 있어야 한다.(7이상 권장)
이젠 이런 화면을 볼 수 있게 된다. 이게 Clojure REPL(read -evaluate-print loop) 화면입니다.


my-addtion이라는 함수를 만들었습니다. 이 함수는 단순하게 주어진 인자를 더합니다.
my-addition 함수에 문자열을 넣었습니다. Number Type이 아니라고 Exception이 발생합니다. Java Exception이 발생하는 걸 보니 clojure는 Java 함수를 쓰고 있음이 확실해 졌습니다.


좀전 부터 설치하고 있던 Eclipse Clojure IDE 플로그인이 이제 설치가 끝났습니다.
실행해보니 clojure project가 보입니다.



프로젝트를 생성하고 실행하는데 메모리가 부족하다는 에러가 계속 발생하는군요. 이클립스을 사용하여 개발하는 방법은 다음에 계속 해야겠습니다. 오늘은 여기까지.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...