LISP는 여전히 오늘날의 세계에서 연습 / 사용되고 있습니까, 아니면 레거시 언어입니까?
그렇습니다. 그러나 어디를 봐야하는지 알아야합니다. LISP를 사용하는 사람들은 그것에 대해 큰 소리로 외치는 경향이 없지만, 지난 20 년 동안이 프로그램을 사용하여 큰 효과를 거둔 몇몇 신생 기업의 사례가 몇 가지 있습니다. 유럽의 소기업들에게도 인기가 있습니다.
가장 널리 사용되는 방언은 무엇입니까?
이것은 유효한 질문이지만 대답하기 쉬운 것은 아닙니다. 대답하기에는 특히 유용한 방법이 아닐 수도 있습니다. 많은 구현에는 특정 초점이 있으므로 다른 방법으로 사용되는 방법이 아니라 특정 문제에 적합 할 경우 가장 잘 선택됩니다. 대신, 나는 당신에게 당신의 선택권에 대해 조금 이야기하고 당신은 스스로 결정할 수 있습니다.
LISP는 언어 군이며 각 언어에는 방언과 구현 군이 있습니다. 방언은 크게 두 개의 캠프 "LISP"와 "스켐"으로 나뉩니다.
LISP : 비교적 최근까지 Common LISP가 왕이었습니다. 모든 이질적인 LISP를 통합하려는 시도였으며, 불친절하지 않고 LISP의 "C ++"였습니다. 즉, 그것은 거대한 언어였습니다. 모든 것이있었습니다. 지난 몇 년 동안 Clojure가 등장했습니다. Clojure는 Java Virtual Machine에서 실행되는 LISP이며 기능적 프로그래밍 철학에 뿌리를두고 있습니다. 전통적으로 다른 LISP는 엄격하게 다중 패러다임이었습니다. Clojure는 LISP와 JVM 모두에서 가장 좋고 가장 나쁘기 때문에 흥미 롭습니다. 여전히 많은 Java 기반 언어가 많이 있으며 구문을 사용하면 상당히 자유롭고 쉬워서 여러 가지에 대한 노브와 버튼이 많이 있지만 실제로 는 일부가 있습니다.데이터 유형에 관한 흥미로운 아이디어, 특히 함수형 프로그래밍의 아이디어를 적용하기 위해 실제로 사용 된 방법 중 일부.
체계 : 체계는 LISP의 엄격한 하위 집합입니다. Scheme은 Steele과 Sussman이 발명했으며 초기에는 MIT 컴퓨팅 101 강의 코스에서 사용 된 것으로 유명했습니다. 체계는 "알고리즘 언어 체계 (RnRS)에 대한 개정 ^ n 보고서"에 정의되어 있습니다. 예 : 거기에는 수학 농담이 있습니다. 체계는 다른 LISP와 다른 방식으로 표준화 된 언어입니다. 이것은 구현 간의 이식성에 크게 도움이되지만 은색 총알이 아닙니다. 표준화 노력은 보수적 인 경향이 있었고, 구현에서, 특히 모듈과 같은 것들에 대한 혁신은 이질적인 경향이있었습니다. IETF의 RFC 프로세스와 유사한 일련의 SRFI (Scheme Requests For Implementation)도 있습니다. 사람들은 필요에 따라 작은 것을 표준화하는 데 사용합니다.
구성표는 LISP와는 다르지만 만족해야하는 일련의 엄격한 요구 사항이 있으며 그 중 하나는 재귀를 효율적으로 만드는 데 도움이되는 "꼬리 호출 최적화"입니다. 따라서 재귀 프로그래밍 스타일은 LISP보다 Scheme에서 훨씬 더 많이 사용됩니다. 구성표도 LISP의 "C"와 같이 불친절하지 않습니다. 즉, 작은 언어이므로 한 번에 모든 언어를 머리에 담을 수 있어야합니다.
현재 5 가지 버전 (R5RS) 및 6 번째 버전 (R6RS)의 두 가지 체계가 있습니다. R6RS의 복잡성은 이전의 것보다 훨씬 더 크며, 많은 R5RS 구현이 R6RS가 R6RS보다 R5RS와 더 유사하기를 희망하여 건너 뛰기로 선택했습니다. R7RS 표준화 프로세스는 현재 진행 중이며 첫 번째 작업 그룹에서 작은 기본 언어를 표준화 한 다음 더 큰 기능을 표준화하기 위해 두 번째 작업 그룹을 의뢰하여 R5RS 구현 자의 요구와 R6RS의 요구를 모두 포함하려고 시도했습니다. 이를 통해 언어는 소형 임베디드 하드웨어와 더 많은 기능을 갖춘 머신 모두에서 효율적이고 유용한 구현을 할 수 있습니다.
이제 좀 더 구체적으로 설명하겠습니다.
PicoLisp는 정말 멋진 LISP입니다. 작습니다! 저자는 스스로 그것을 위해 썼고, 그것을 이해하면서, 그는 1980 년대부터 그것을 살려 왔습니다. 당신이 그에 의해 대화에 참석할 기회를 얻는다면, 당신은 그것을해야합니다 : 그는 정말 흥미롭고 실제로 그의 것을 알고 있으며 주류 나 지루한 것의 가장 작은 냄새조차도 얻지 못할 것입니다.
Common Lisp 구현에 익숙하지 않으므로 더 이상 언급하지 않습니다.
Guile은 공식 GNU Scheme입니다.
라켓은 R6RS 체계이지만 최근에는 인터넷을 넓힌 것으로 보이며 "언어 생성, 디자인 및 구현을위한 플랫폼 역할을하려고합니다".
치킨은 실용적인 계획을 목표로합니다. R5RS를 기반으로하고 C로 컴파일합니다. 이는 기존 C 라이브러리를 사용하는 것이 절대적으로 쉽지 않기 때문에 실제로 중요한 이점으로 판명되었습니다. 따라서 Chicken은 Perl, Python, Ruby 등을 일상적인 스크립팅 언어로 대체하는 데 가장 유용한 스키마 일 것입니다. 몇 년 동안 모든 요구에 독점적으로 사용한 사람들이 여러 명 있습니다. 대화식 REPL과 컴파일러가 있습니다. 커뮤니티 (메일 링리스트와 IRC 모두)는 지식이 풍부하고 친절하며 도움이됩니다.
많은 모듈이 포함 된 구현을 찾으십시오. 이는 널리 사용 가능함을 나타내며 현재 수행중인 작업에 도움이 될 수 있음을 의미합니다.
컴파일러 또는 적어도 IDE 또는 REPL 기반이 아닌 것을 사용하여 구현을 찾으십시오. 교육용으로 설계된 많은 구현은 범용 스크립팅에 사용하기가 매우 어렵습니다.
나는 그것이 내가 사용하는 것이므로 Chicken을 추천합니다. 개인 프로젝트에서 사용했으며 전문적으로 사용했습니다 (현재 사용하고 있습니다).
나는 완전히 쓸모가 없다면 무언가에 과도한 노력을 투자하고 싶지 않습니다. 그것이 전문적으로 "죽은"것이지만 학문적 관점에서만 여전히 배우고 싶습니다 ...
구성표는 전문적으로 죽지 않았지만 해당 컨텍스트에서 사용하려면 일정 시간이 걸릴 수 있습니다. Chicken과 같은 것은 학문적 추구 이상이며 현재 사용하는 고급 언어의 거의 모든 기초를 쉽게 다룰 수 있습니다.