어떤 Common Lisp 구현을 사용해야합니까? [닫은]


45

Common Lisp에서 개발을 시작하는 데 즉각적인 문제가있는 것 같습니다 : 구현 선택. CL 구현을 고려할 때 고려해야 할 사항과 무게는 얼마나됩니까?

ANSI 표준을 준수해야합니까? SLIME에서 지원해야합니까? 특정 구현에 우수한 라이브러리, 문서 등이 부족합니까?


흥미로운 질문 : 지금 "Practical Common Lisp"을 읽고 CLISP에서 예제를 시험해 보았지만 모든 구현이 표준을 따르는 것 같습니다. Common Lisp는 매우 성숙하고 안정적인 언어 인 것 같습니다.
조르지오

답변:


25

특정 요구 사항과 특정 구현의 강점과 약점에 따라 다릅니다. 즉, 다른 구현에 대해 생각할 때 가장 먼저 떠오르는 것은 다음과 같습니다.

SBCL은 매우 빠르며 숫자 처리에 능숙합니다. 따라서 무거운 수치 계산에 의존하는 경우 올바른 구현이 될 수 있습니다. 또한 Lisp 구현의 경우 적절한 유형 유추가 있습니다.

CLISP는 스크립팅에 흥미로울 수있는 비교적 작은 바이트 컴파일 구현입니다.

몇 년 전 CCL을 사용해 보았는데 오류 메시지와 스택 추적을 다른 구현의 오류 추적 및 상대적으로 낮은 컴파일 시간으로 선호했기 때문에 CCL을 사용해 보았습니다. 저에게는 대화식 사용의 용이성이 매우 중요합니다. 속도가 필요한 경우에도 배포 된 프로그램의 SBCL로 전환 할 수 있습니다. (필요한 것은 아닙니다.) 또한 상업적 지원 옵션도 있습니다.

JVM에 배포하려는 경우 ABCL이 있습니다.

임베디드 사용의 경우 ECL.

Allegro에는 AllegroGraph, AllegroStore, 사용하기 쉬운 시각적 GUI 빌더 등이 있지만 모든 사람이 라이센스 조건을 좋아하는 것은 아닙니다.

LispWorks는 크로스 플랫폼 GUI 툴킷과 Allegro보다 작은 팀과 단일 프로그래머에게 더 적합한 라이선싱 조건을 갖춘 최종 사용자 응용 프로그램 프로그래밍에 적합합니다. (적어도 내가 선호하는 것입니다.)

물론 이것들은 광범위한 범주와 인상입니다. SBCL, CCL 및 CLISP를 자세히 살펴 보는 것이 좋습니다. IMHO가 가장 많이 사용되고 가장 많이 지원되는 오픈 소스 구현이므로 그 중 하나를 선택하기 때문입니다. 즉, ABCL 또는 ECL이 제공하는 것과 귀하의 요구가 일치하지 않는 한.

ASNI 표준을 준수해야합니까?

그렇지 않은 경우 CL 구현이 아닙니다. (물론 실제로는 약간의 편차가있을 수 있지만 최소한 목표는 준수해야합니다.)

SLIME에서 지원해야합니까?

물론 – SLIME을 사용하는 경우. (제 생각에, 현재로서는 최고의 Lisp 환경이지만 각각의 환경입니다.)

특정 구현에 우수한 라이브러리, 문서 등이 부족합니까?

SBCL, CCL, Allegro 및 LispWorks 이상은 일반적으로 사용되는 대부분의 라이브러리에서 잘 지원되어야합니다. CLISP는 꽤 훌륭한 라이브러리 컬렉션 자체와 함께 제공되며 대부분 지원되어야합니다.


22

Dan Weinreb (불행히도 작년에 세상을 떠났다)은 다음과 같은 개요를 썼습니다.

리스프 조사

CL 구현에는 많은 차이가 있습니다. 한 구현에서 Lisp 시스템에 대한 사용자의 모든 다른 요구 (속도, 크기, 라이센스, 가격, 호환성, 운영 체제 지원 등)를 처리 할 수는 없습니다. 사용 가능한 구현 중 하나 이상을 사용하여 특정 철학을 따르는 로컬 최적을 찾아야합니다.

  • 무료, 무료, C 기반 (따라서 널리 포팅 됨) : ECL , CLISP

  • 무료, 무료, JVM 기반 : ABCL

  • 무료, 무료, 광범위한 기본 구현 : SBCL , CCL , CMUCL

  • 독점적, 상업적, 매우 광범위한 기본 구현, GUI 기반 앱에 대한 탁월한 지원 : Allegro CL , LispWorks

OS / 플랫폼 별 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.