More actions
Describe lisp here
- 우선 두서없이 막 쓸 예정... 구조화는 나중에...
lisp은 함수형 프로그래밍 언어로서, 간결한 문법에 수학적인 면모가 돋보이는 언어이다.
lisp은 여러가지 종류의 언어들로 파생되었는데, clisp(커먼 리스프), scheme(스킴), Elisp(이맥스 리스프-스크립트언어), clouser, arc(완성되었는지 모름)... 등 여러종류의 아류언어들이 있다.
lisp의 장단점을 살펴봅시다. 이 부분은 제가 제시할만큼의 깊은 통찰을 아직 갖지는 못해서, 다른분이 쓴 부분을 인용합니다.
장점은..
- 편합니다..스트럭쳐나, 뭐 기타등등 잡스런 문제들에 신경안쓰고 바로 문제해결을 위한 알고리즘을 구현할수있습니다.
따라서 1인 생산성이 *매우* 높아집니다..
- 매우 유연합니다. 다른 OOP 언어 특히 C++, JAVA의 경우 최초의 클래스 구조를 한번 설계하면 개발이 진행되면서
그 구조를 바꾸는게 매우 어렵습니다. 사실상 전부 뜯어내야죠. 그에반해 LISP 의 CLOS, MOP 등은 매우 유연합니다. 바꾸기가 매우 쉽습니다.
- 예전부터 지적되던 속도문제는..요즘 컴파일러 와 CPU 가 워낙 좋아져서 문제가 안됩니다. 대부분의 LISP 제품들이
최종 컴파일하면 머신코드까지 생성하기 때문에 매우빠릅니다.
- 대형 시스템 개발에 좋습니다. 개발하다보면, 저절로 모듈화가 되서, 전에 했던일을 신경안쓰고 마치 블럭조립하듯
개발이 됩니다. 개인적으로 이점이 정말 좋습니다.
- 안정적이다.. 개발과정에서 거의 모든 문제들이 도출되기때문에 개발이 완료된후에는 매우 안정적인 시스템이 됩니다.
메모리릭 이나 프로세스 크래쉬 같은 문제가 거의 없습니다. 따라서 미션크리티컬 시스템 개발에 최고입니다.
단점은..
- 다른사람들과 공동작업이 어렵습니다. 개발자본인은 심오한 람다함수의 세계에 경탄을 금치 못하겠지만.
다른사람이 만든코드를 이해하기는..매우 어렵습니다. 세세한 문서 작성이 필수.. 의외로 다른 언어로 만들어진 라이브러리 이용은 쉽습니다. FFI 를 쓰면 쉽지요..
- 개발자 구하기가 어렵다..특히 한국은. 학문 레벨에서 만져본 분들은 많지만, 대형 실무용 제품을 개발해본 사람이 거의 없습니다.
따라서 유지보수가 문제가 될수 있죠.
- 컴파일러가 비싸다.. 거의 공짜(?)에 가깝게 구할수있는 다른 개발툴에비해 컴파일러가 고가입니다. 제대로 쓸만한 제품은
$3000~$10000 까지 합니다.
- Garbage Collection 이 문제가됩. GC 를 하는 대부분의 언어의 문제 이지만 GC 가 일어날때 순간적으로 프로그램이 멈추는 문제가 있습니다. 여러가지 기술로 그 시간을 최소화하고 있지만. 적절히 메모리 관리 안해주면. 문제가 됩니다.
한마디로..뛰어난 개발자 몇명이 대규모 개발팀이 할일을 해내는데 사용할때 적합합니다.
뛰어난 C 개발자는 일반 C 개발자의 3~5 배정도 생산성이 높아지지만.
뛰어난 LISP 개발자는 일반 LISP 개발자의 10~20 배까지 생산성이 높아집니다.
- >내 생각 : 근데 마이너한 언어가 원래 그렇지않나... 그리고 가비지컬렉션의 문제는 이를 쓰는 모든 언어들또한 공통적인 문제고... 어쨋든 더 공부해보고 여러가지를 생각해본뒤에 생각정리를 해야 공감이 되고 안되는 부분이 더 명확해질것같다.
-인용부 end-
lisp의 문법을 살펴보자.
(message "Hello world")
- >Hello world
위는 Elisp에서 쓰이는 lisp 표현문이다. message라는 심볼에 Hellow world라는 인수를 보낸 결과 바로 아래에서 Hello world라는 결과를 확인할 수 있다. 이렇게 한 표현문을 쓰고 곧바로 결과값을 확인 할 수 있는 환경을 이맥스에선 IELM(inferior Emacs lisp mode)라고 한다.
다음 clisp의 문법을 보자.
(+ 3 4)
- >7
앞서 말한것과같이 clisp도 elisp의 구문과 비슷하다. 다만, 이번에는 +라는 심볼을 쓴 다른 예시를 가져다 둔것일 뿐이다. 그리고 clisp에서는 결과값을 바로 확인할 수 있는 환경을 REPL(real eval print loop)라고 한다.
lisp은 심볼, 특별한 연산자(spcial operator), 리스트, 아톰으로 구성되어있다.
심볼은 값이 될 수도 있고, 함수가 될 수도 있다.
리스트는 lisp의 가장 base되는 데이터 자료구조로서, 콘셀(con-cell)로 구성된다.
콘셀이란, 마치 싱글 링크드리스트처럼 생겨먹은 녀석인데, 이런 구조를 통해서 리스트를 구성한다.
// 미완. 차근차근 완성해갈 예정. 리슾은 아름답습니다. ...