LISP는 오늘날에도 여전히 유용합니까? 어떤 버전이 가장 많이 사용됩니까?


117

정기적으로 새로운 프로그래밍 언어를 가르치려고 노력합니다. 최근에 Lisp와 그 방언이 C / C ++와 같은 언어의 스펙트럼과 완전히 반대되는 방식을 읽었습니다. 그러나 두 가지가 분명하지 않으며 그에 대한 지침을 찾고 있습니다.

  1. LISP는 오늘날의 세계에서 여전히 사용 / 사용되고 있습니까, 아니면 FORTRAN / COBOL과 같은 레거시 언어입니까? 기존 코드를 유지하는 것 외에도 새로운 프로젝트에서 전혀 사용되지 않습니까?

  2. 가장 널리 사용되는 방언은 무엇입니까? 나는 Scheme과 Common Lisp를 가장 널리 사용되는 2 가지 방언으로 보았고, 가장 선호하는 / 유용한 것에 대해 당신의 의견을 원했습니다.

내가 사용했던 절차 적 언어와 근본적으로 다른 언어를 배우기를 간절히 원하지만, 완전히 쓸모가없는 경우 무언가에 과도한 노력을 기울이고 싶지 않습니다. 학문적 관점에서만 ...


10
이 질문에 매우 관심이 있습니다. 때때로 나는 시간이있을 때 Lisp를 배우기 위해 찌르기로 결정합니다. 그리고 당신이 여기서 요구하는 것과 같은 종류의 질문과 불확실성에 의해 좌절 될 때마다. 어떤 버전의 Lisp를 배워야합니까? Paul Graham 외에 누구도 실제로 Lisp를 사용합니까? Lisp 또는 Haskell과 같은 최신 기능 프로그래밍 언어 중 하나를 배워야합니까? Scheme 등에 비해 Lisp의 장점은 무엇입니까?
Channel72


실용주의 리스프 : gigamonkeys.com/book
Joe Internet

"아직도"? (농담!)
jhocking 2016 년

방금 SO 에서이 다른 관련 스레드를 찾았습니다. stackoverflow.com/q/1614724/212942
TCSGrad

답변:


59

Scheme을 선호합니다. JVM으로 작업하려면 JVM에서 작동하도록 설계된 lisp 인 Clojure를 확인해야합니다. 그리고 그래도 Lisp는 그러한 최소한의 디자인이 얼마나 강력한 지 알아볼 가치가 있습니다! lisp를 만든 사람들은 정말 올바른 것을 얻었습니다. 1960 년대에 현대 언어 리스프의 멋진 새로운 기능이 얼마나 많은지 놀랍습니다!

내장 된 구성표를 보려면 guile을 시도 하십시오 . http://www.gnu.org/s/guile/


나는 주로 C ++ 사람이기 때문에 C / C ++와 잘 작동하는 방언이 있습니까? 당신은 또한 그 방언을 배우기 시작하는 계급 초보자를위한 몇 가지 자료를 언급 할 수 있습니까?
TCSGrad

10
체계를 배우기에 가장 좋은 책은 "The Little Schemer"및 "SICP" mitpress.mit.edu/sicp 입니다. c / c ++ 안에 포함될 수있는 많은 스키마 구현이 있지만 요즘 어떤 것이 좋은지 잘 모르겠 기 때문에 인터넷 검색을해야 할 수도 있습니다.
Zachary K

1
나는 그 계획이 매우 간단하다는 것을 지적해야합니다! 2 시간 안에 언어의 90 %를 배우게됩니다. 물론 그렇다고해서 마스터 한 것은 아니며 구문의 작동 방식 만 알 수 있습니다.
Zachary K

5
@ shan23 Scheme은 교육용으로 설계되었습니다. 신입생에게 프로그래밍 방법을 가르치는 데 의심의 여지없이 사용될 수 있으므로 의심의 여지없이 배우는 데 아무런 문제가 없습니다. C 또는 C ++ 통합을 원하는 경우 Guile ( en.wikipedia.org/wiki/GNU_Guile )을보십시오.
Vitor Py

1
Kent Dybvig의 Scheme 프로그래밍 언어 책은 그다지 유명하지는 않지만 아주 좋은 책입니다. scheme.com/tspl4 Emacs를 사용한다면 Lisp를 배우는 것이 편리합니다.
blispr

68

질문 2, "가장 널리 사용되는 방언"에 대한 답변 :

"가장 많이 사용됨"을 해석하는 방법에 따라 다릅니다. 다음은 선택된 몇 가지 방언을 얼마나 많이 사용하는지에 대한 하한 에 대한 냅킨 수학입니다 .

가장 원시 코드 작성

  • 교육 응용 프로그램으로 인한 계획 (모든 방언)
    • 270 개 학교 ... 연간 50 명의 학생, 500 행의 코드 / 학생, 10 년 동안 운영되는 것을 가정 해 봅시다. 냅킨 수학을 기반으로 1,000,000+ 라인 .
    • 라켓 자체 및 도구에 라켓 50 만 라인.
  • AI 와 수많은 오픈 소스 코드 및 프로덕션 코드 (프로덕션 코드 참조)로 인해 Lisp가있을 수 있습니다.
  • 아마도 Emacs Lisp 때문에 ...
    • 이맥스 자체 : 1,000,000 줄 이상
    • emacs lisp의 양은 공개적으로 작성되었습니다-237 개 모듈, 약 200 개 라인 / 모듈은 EmacsWiki에서만 40,000 개 이상의 라인으로 , 아마도 ELPA에서 훨씬 더 많음
    • emacs Lisp, .emacs 파일 등으로 작성된 응용 프로그램
  • 클로저
    • 추정하기 어렵다. 대부분 작은 콤. 많이 될 수 있습니다.

수상자 : 구성표 또는 공동 Lisp. 알 수없는 내용이 너무 많습니다.

대부분의 '생산'코드

수상자 : Common Lisp를 추측하고 있습니다. Common Lisp과 Clojure의 사용에 따라 질문 1에 "Yes"라고 대답 할 수 있다고 생각합니다.

대부분의 최종 사용자

  • 공통 리스프
    • Orbitz, Bing Travel 및 Kayak.com을 포함한 ITA 소프트웨어 고객-아마도 수백만 명.
  • 클로저
    • Citigroup (상세 정보 없음), Akamai (상세 정보 없음), simple.com 등 다수. 아마 수백만.
  • 계획
    • CS 학생, 연구원 및 애호가. bazillion보다 적습니다.
    • 미지의 시리즈 -5 백만 이상
  • Emacs Lisp-대부분 유닉스 플랫폼에서 프로그래머입니다. 백만이 될 수 있습니다.

수상자 : 계획 은 Uncharted에 판매 번호가 있기 때문에 여기에서 가장 낮은 하한을 갖지만, 논란의 여지가 있습니다.

결론

결론적으로, 나는 그 큰 사과를 찾습니다.


4
작은 오렌지가 아니십니까? 아니면 레몬을 제거합니까?
Vatine

실제로, especailly 라켓 방식은 최신 lisp 방언으로 보입니다. 전문가 급 도구 및 라이브러리.
Bikal Lem

@Bikal OpenGL 지원이 오래되지 않았 으면 좋겠지 만 직접 모드는 라켓 코드의 가장 큰 결함이 아닙니다 ...
Jesse Millikan

Orbitz가 CL을 사용했다는 것을 몰랐습니다 ... 나는 다음 직장을 어디에서 찾아야할지 알고 있습니다 : D
Rig

2
라켓에는 100k 이상의 LOC가 많이 작성되었습니다. Racket 표준 라이브러리 / IDE / 도구는 500k 이상이며 SET, Boeing 및 Naughty Dog와 같은 회사에서 사용 중입니다.
Sam Tobin-Hochstadt

43

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과 같은 것은 학문적 추구 이상이며 현재 사용하는 고급 언어의 거의 모든 기초를 쉽게 다룰 수 있습니다.


3
라켓은 R6RS 제도가 아닙니다. 라켓 배포판이 제공하는 언어 중 하나가 있습니다. 실제 라켓 언어는 RnRS에서 여러 가지 중요한 방법으로 출발하는 체계입니다 (여러 가지 감정이 혼합되어 있습니다).
JasonFruit

27

실제로 모든 Lisp에 대해 말할 수는 없지만 Clojure는 현재 화끈하고 관련성이 높은 언어입니다. 이번 주 초에 방문한 London Clojure 사용자 그룹에는 100 명 이상의 참석자가있었습니다 ....

지난 1 년 동안 (Java 및 C #에 대한 많은 경험을 쌓은 후) Clojure의 형태로 Lisp를 배우는 것이 매우 계몽적인 경험이라는 것을 알았습니다. 이에 대한 주요 이유는 다음과 같습니다.

  • 함수형 프로그래밍에 중점을두고 있습니다 (대부분의 다른 Lisp보다 더 중요합니다). 저자와 BDFL Rich Hickey는 Haskell을 언어 디자인에 대한 영감 중 하나로 자주 인용했습니다. 이는 완전히 불변의 데이터 구조 및 게으른 무한 시퀀스 등을 얻는다는 의미입니다.
  • 매크로 메타 프로그래밍-Lisp "코드는 데이터"라는 철학은 실제로 경험하지 않으면 이해하기 어렵지만 Lisp가 표현력과 생산성을 높이는 이유 중 하나입니다.
  • 멀티 코어 동시성에 대한 환상적인 지원 -Clojure는 현재 동시 프로그래밍에 가장 적합한 언어 라고 생각 합니다. 이에 대한 깨달음 표현은 http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey 를 참조하십시오 .

또한 다음과 같은 이유로 실제 프로덕션 용도로 실용적인 선택 인 것 같습니다.

  • 매우 쉬운 Java 상호 운용성으로 JVM에서 실행하면 Java 생태계의 모든 라이브러리 및 도구에 액세스 할 수 있습니다.
  • 그것은 A의 동적 언어 거의 상용구와 개발 및 신속한 프로토 타이핑하기에 매우 편리합니다 기본적으로. 그러나 정적 유형 힌트를 추가하여 필요한 곳에서 꽤 좋은 성능을 얻을 수 있습니다.

저는 개인적으로 두 명의 투자 은행과 신생 기업에서 Clojure를 사용하는 사람들을 알고 있습니다. 또한 Clojure를 본인의 스타트 업을위한 기본 개발 언어로 선택 했으므로 입을 벌리고 자하는 곳에 돈을 드리겠습니다 :-)


9

나는 현재 Lisp도 배우고 있습니다. 나는 일반적인 Lisp를 사용하지만 SBCL , Arc (Vitor Braga가 Yahoo store / Viaweb을 만들었던 Paul Graham의 Lisp 버전) 및 Visual Studio for Lisp와 유사한 Allegro CL (수 GUI를 만들지 만 결코 사용하지는 않았습니다).

용도에 관해서는 Lisp가 인공 지능에서 많이 사용되었지만 솔직히 말하지만 Lisp에 대한 다른 "일반"사용 방법이 확실하지 않습니다. Lisp에 내장 된 많은 웹 사이트는 원래 다른 언어로 다시 작성되었으므로 웹 개발에 사용한다고 말하기 어렵습니다 (그렇지 않다고 말하지만 더 큰 사이트는 더 이상 사용하지 않습니다) ). 빠른 검색 (매우 빠른)을 수행 한 후 Wikipedia의 Common Lisp로 작성된 소프트웨어 목록이 있습니다 .

[EDIT] Lisp를 전문적으로 사용하는 데는 Lisp를 사용하는 작업이 있습니다. Java 또는 C # 작업만큼 많지는 않지만 존재합니다. Lisp는 내부 응용 프로그램에 사용되는 언어 중 하나이며 Lisp를 사용한다는 광고를 통해 회사가 포기하고 싶지 않은 경쟁 우위를 제공 할 수 있습니다. P.SE에서 Smalltalk가 금융 분야에서 비슷하다고 언급 한 게시물을 본 것을 기억합니다.

또한 다른 패러다임을 배울 수 있음을 보여 주면 직장에서 Lisp를 사용하지 않더라도 더 많은 문을 열 수 있습니다.

"Lisp는 마침내 그것을 얻을 때 얻게 될 심오한 깨달음 경험에 대해 배울 가치가 있습니다.이 경험은 Lisp 자체를 실제로 많이 사용하지 않더라도 당신의 남은 시간 동안 더 나은 프로그래머가 될 것입니다." -Eric Raymond, "해커가되는 방법"

[/편집하다]


7
FWIW, SBCL은 Common Lisp의 구현이며 Allegro CL도 마찬가지입니다.
Vatine

@Vatine-당신은 맞을 것입니다. 얼굴이 붉어지면 지금 만들 것입니다. 왜 그들이 다르다고 생각하는지 모르겠습니다. 바보 나 다른 컴파일러! = 다른 방언 :) 감사합니다!
Jetti

@Jeff : "CL 코어"를 상호 운영 가능한 상태로 유지하면서 언어를 다른 방향으로 확장합니다.
Vatine

@Jetti 처음에 무엇을 사용 했습니까?
Mark C

CLISP를 사용하고 있다고 생각하는데 더 이상 가지고 있지 않은 VM 이미지에 있습니다. 나는 나의 무지 때문에 그것이 일반적인 리스프라고 생각하게 만들었다 고 생각합니다. 적어도 지금은 더 잘 알고 있습니다.
Jetti

8

오늘 Lisp을 배우고 싶다면 빠른 스킴 구현 인 라켓 (실제로 스킴에서 약간 벗어 났으므로 현재 자체 방언입니다) 또는 clojure의 이점을 살펴보십시오. JVM이 실행됩니다 (그래서 수많은 라이브러리를 사용할 수 있으며 자신의 Java 코드와 상호 작용할 수 있습니다).

Lisp를 실제로 사용하는 법을 배우지 않아도 항상 유익하다는 것을 알게됩니다. Lisp에 대해 잠시 동안 마음을 감싼 후에는 다른 언어로도 문제를 생각하고 처리하는 새로운 방법을 배웁니다.


3
Scheme의 문제점은 연습을 시작할 때 다른 언어로 돌아가고 싶지 않다는 것입니다. C ++에서 스트림 (무한, 지연 평가, 불변 시퀀스)을 구현하기 시작했으며 Scheme보다 훨씬 많은 코드입니다! 나는 Scheme의 단순성과 힘의 조합에 정말 놀랐습니다.
조르지오

++ 라켓 용. 그것은 정말로 다른 체계의 비판 중 하나 인 믿을 수 없을만큼 완벽합니다. 그리고 그것은 당신의 언어를 만드는 것과 관련하여 계획이 할 수있는 것 이상의 것입니다.
Scott Klarenbach

7

Amazon 백엔드의 상당 부분은 Lisp에 있었지만 이제는 C ++로 다시 작성되었으므로 들었습니다. 신뢰할만한 출처가 없다고 인정해야합니다.

야후! Stores는 Lisp 웹 앱의 전형적인 예 중 하나입니다. 야후! 폴 그레이엄에 대해 들어 본 상점 명성 . Graham은 가장 잘 알려진 Lisp 옹호자 중 하나이며이 주제에 대해 광범위하게 글을 씁니다. 그의 요점을 알고 그의 사이트를 읽을 수 있습니다.

AutoCAD는 매크로 시스템을 위해 Lisp 언어를 사용했습니다. 아직도 그래도 모르겠습니다.

체계는 깨끗한 언어이며 매우 우아합니다. 아마 내가 가장 좋아하는 프로그래밍 언어이므로 편향 될 수 있습니다. 지금 주요 응용 프로그램을 작성하려고한다면 아마도 C로 기본 응용 프로그램을 작성하고 Scheme에서 비즈니스 규칙을 확장 및 정의 할 것입니다. 이를 통해 Scheme을 사용하고 속도와 거의 모든 라이브러리의 가용성을 위해 C를 활용할 수 있습니다.


Scheme의 초보 / 컴파일러로 무엇을 추천 하시겠습니까? 나는 리눅스를 사용한다. 그래서 Kile은 LaTex와 같이 초보자들에게 명백히 유용한 편집기가 있다면 알려주세요.
TCSGrad

1
@ shan23 Little Schemer ( ccs.neu.edu/home/matthias/BTLS )가 최선의 선택입니다. 나는 emacs가 Scheme의 가장 일반적인 편집기라고 생각하지만 익숙해지기까지는 시간이 걸립니다.
Vitor Py

1
lisp를위한 편집기, emacs를 사용하는 것은 쉽습니다. 이것은 lisp 사람들과 lisp에 의해 작성되었습니다.
Zachary K

라켓 IDE ( racket-lang.org )를 사용할 수도 있습니다 . 그것은 Emacs와 비슷하지만 자동 서식 지정 및 Scheme 인터프리터와의 상호 작용이 있습니다.
예레미야 윌콕

Lispbox ( common-lisp.net/project/lispbox )는 기본적으로 작동합니다 (일부 이맥스 경험이 유용합니다). ccl ( ccl.clozure.com )을 기반으로합니다. 또한 gigamonkeys.com/book/…
Giorgio

4

LISP는 오늘날의 세계에서 여전히 사용 / 사용되고 있습니까, 아니면 FORTRAN / COBOL과 같은 레거시 언어입니까? 기존 코드를 유지하는 것 외에도 새로운 프로젝트에서 전혀 사용되지 않습니까?

실리콘 밸리의 일부 신생 기업에서 Lisp를 수행하는 여러 사람을 알고 있으며 Amazon.com이 처음부터 Lisp를 사용하고 있음을 알고 있습니다 (왜냐하면 어떤 이유로 C ++로 교체한다고 들었습니까?)

그러나 계속 지켜봐야 할 한 회사는 Naughty Dog 입니다. 그들의 모든 게임은 Lisp 방언으로 작성되었습니다. 원래, 그들은 자신의 롤, 그러나 그들은 미지의 시리즈에서 MZScheme를 사용합니다.

가장 널리 사용되는 방언은 무엇입니까? 나는 Scheme과 Common Lisp를 가장 널리 사용되는 2 가지 방언으로 보았고, 가장 선호하는 / 유용한 것에 대해 당신의 의견을 원했습니다.

Common Lisp, Clojure, Scheme 및 Emacs Lisp가 가장 널리 사용되는 4 가지 방언이며 그 중 Scheme이 가장 일반적으로 사용되는 것으로 생각됩니다. 물론 이것으로 백업 할 것이 없습니다. :)

나는 다른 사람들이 제안한 것처럼 SICP와 Little Schemer를 좋아하지만 Land of Lisp 도 제안 합니다. :)


실제로 Lisp의 땅은 놀랍습니다.
Chiron

@ 4bu3li Y u no upvote?
Mark C

1
Naughty Dog 정보 : PS2 게임은 리스프와 같은 언어 인 GOAL로 작성되었습니다. 그러나 PS3로 전환 한 후 C ++ 사용으로 전환했습니다. MZScheme은 주로 매크로 프리 프로세서로 사용되며 C ++과 함께 인라인으로 작성되며 일부 자산 처리에 사용되며 일부 스크립트는 S-exp로 작성됩니다. 그러나 실제로 PS3에서는 MZScheme 코드가 실행되지 않습니다.
Arelius

2

나는 그것이 부분적으로 당신이하고 싶은 일에 달려 있다고 생각합니다. 다양한 프로그래밍 개념에 대한 통찰력을 향상시키고 자신을 더 나은 프로그래머로 만들고 싶다면 적어도 Lisp의 학습을 할 가치가 있다고 말할 것입니다. 이 언어로 작업을 시작하기 위해 이력서에 추가 할 또 다른 언어를 찾고 있다면 다른 곳을 찾고 싶을 것입니다. Lisp 작업이 많지 않습니다.

나는 개인적으로 SBCL 또는 더 최근의 Clojure (및 일부 Emacs Lisp를 사용하려고 시도하지만 htat은 장기 Emacs 사용자이기 때문에 Lisp를 배우려고 할 때 Emacs Lisp를 배우려고 시도합니다). 이제 내가해야 할 일은 그 언어로 실제로 놀 시간을 찾는 것입니다.


1
그것의 대부분이 첫 번째 .... 그것에 성공하면 확실히 내 이력서를 아프게하지 않을 것입니다 :). 그러나 진지하게, 나는 다른 프로그래밍 "스타일"에 대한 관점을 원하므로, 다른 시나리오에서 어느 것을 사용해야하는지에 대한 좋은 아이디어를 가지게됩니다 (해머 만 장착 된 상황에 빠지고 싶지 않다, 모든 문제를 손톱으로 다뤄야합니다 !!)
TCSGrad

2

LISP에 많은 일자리가 있다는 것을 모르겠습니다. 확실히 볼 수는 없습니다. 그러나 LISP를 실행하고 지구에서 새로운 코드를 삽입 할 수 있었던 NASA 프로브에 대해 오랫동안 읽은 것을 기억합니다.

또한 뉴욕의 클로저 레 밋업 그룹은 거대합니다. 관심이 있고 clojure meetup 그룹에 가면 클로저 작업이 아니라 Java / C ++ 등의 작업을 네트워크화하고 찾을 수있는 기회를 찾을 수 있습니다. 뉴욕 지역에서는 절대적으로 막대한 것으로 보이며 다른 지역은 다를 수 있습니다.

또한 LISP는 다른 사고 방식입니다. 또한 LISP와 SQL은 모두 수많은 중첩 식을 사용합니다. 나는 SQL 톤을 사용한 다음 LISP가 더 의미가 있음을 알았습니다. 그러나 LISP를 사용하는 동안 슈퍼 중첩 괄호와 표현식에 익숙해지는 데 어려움이 있다면 SQL 표현식을 훨씬 쉽게 이해할 수 있습니다.

전형적인 예는 MAX (a, b, c)를 구현하는 방법입니다. 많은 if 문으로 복잡한 함수를 만들 수 있습니다. 아니면 그냥 말할 수 있습니다

최대 (MAX (a, b), c)

두 항목 MAX의 두 개의 간단한 중첩 호출을 사용하면 쉽게 읽을 수 있습니다. 성능이 문제인 경우 다른 방법으로도 수행하고 싶을 수도 있지만 각 방법을 사용할 때 비교 횟수를 계산하지 않아도됩니다 ... 또한 C 매크로 또는 다른 방법을 평가하는 다른 방법을 통해 MAX를 구현하는 경우 여러 번 표현식 표현식을 여러 번 평가할 수 있으므로 예상되는 결과를 얻지 못할 수 있으므로 부작용을 조심하십시오.


3
실제로 다음과 같이 MAX를 단순화 할 수 있습니다.MAX(MAX(a b) c)
Andrea

당신이 맞아요, 깨어 난 직후에 내가 얻는 것입니다. 나는 대답을 조정했다.
Cervo

2
: NASA의 프로젝트는 딥 스페이스 1이었다 flownet.com/gat/jpl-lisp.html
프랭크 Shearar

2

두 가지 추가 사항 :

첫째, Lisp는 함수 또는 데이터 간의 상호 작용이 복잡한 복잡한 코드 작성을위한 훌륭한 언어입니다. 널리 사용되는 많은 언어에서 프로그램이 수행하는 작업에 대해 혼란 스러우면 프로그램의 내부 상태를 조사 할 수 있도록 특수 함수를 작성해야합니다. 일부 언어에서는 코드가 다시 컴파일 될 때까지 기다려야합니다. 물론이를 도와주는 디버거와 같은 도구가있을 수 있습니다. 그러나 Lisp에서는 프로그램을 중지하는 방법 만 있으면되며 일반적으로 Lisp의 모든 항목 에 액세스 할 수 있습니다 . Common Lisp에서 때로는 ^ C를 입력하거나error단일 함수로 다시 컴파일해야합니다 (다시 컴파일해야하며 다시 컴파일하기 위해 아무것도 할 필요가 없습니다). 프로그램을 중지하면 즉시 디버거에 빠지게됩니다. 그러나 디버거는 Lisp의 모든 기능을 제공하며 디버거를 종료하고 특정 함수를 호출 할 수 있습니다. 데이터 구조를 쉽게 검사 할 수 있습니다. 내 프로그램에서. 대부분의 제도는 유사한 관행을 허용해야합니다. Lisp는 이와 관련하여 독특하지는 않지만 제공하는 기능은 많은 인기있는 언어가 제공하는 기능을 뛰어 넘습니다.

둘째 : Lisp의 방언을 실험하려고한다면 (a) 괄호와 일치하는 편집기를 사용하고 (b) 적절한 Lisp 들여 쓰기를 배우지 않고서는 그것을하지 않을 것입니다. 적절한 들여 쓰기에 근접한 편집기를 사용하는 것이 좋습니다. C / C ++ / Java 스타일 코드 형식은 Lisp보다 괄호 / 괄호 / 대괄호가 적은 언어를 위해 설계되었습니다. Lisp pretty printing 스타일은 익숙한 후에는 잘 작동하며 괄호로 인해 혼란스러워 지거나 줄당 하나의 닫는 괄호를 두어 공간의 절반을 낭비하지 않습니다.


1

지금은 Lisp가 컨설팅 상점에서 주로 사용된다는 인상을받습니다 (컨설팅 상점이 주로 사용하지는 않습니다).

실용적인 소프트웨어에는 다소 부족한 것으로 간주됩니다. 대부분 사람들이 익숙하지 않기 때문에 나는 믿습니다.

전통적으로 Scheme은 Lisp의 상당히 학술적인 방언이며 Common Lisp는 업계 방언이었습니다.

Lisp는 특히 기호 조작 및 반사 효과 기능에 유용합니다.

예를 들어 Lisp를 배우기 위해 작성한 코드는 대상 함수와의 함수 차이를 최소화하기 위해 임의의 람다 함수를 구성하고 평가 한 다음 조작하는 프로그램이었습니다. 이 모든 것이 직접적인 조작이었습니다. C ++ 또는 Java와 같은 언어에서는 컴퓨터가 조작하는 기능을 표현해야했습니다.


Scheme / Common Lisp의 차이점에 대한 흥미로운 점-그 이유 / 방법에 대해 자세히 설명해 주시겠습니까?
TCSGrad


1

Common Lisp and Scheme에 대한 관점을 추가하고 싶습니다. JVM으로 인해 클로저를 피했기 때문에 많은 관점을 가지고 있지 않습니다.

체계는 아름답고 간결하고 잘 정의 된 언어입니다. CL은 레거시로 인해 많은 결정을 내리고보다 순수한 접근 방식을 취했습니다. 예를 들어 변수와 함수는 동일한 네임 스페이스에 있습니다. 기본 언어는 더 작고 간결합니다. 예를 들어 lisp가 좋은 것들을 가르치는 데 효과적입니다. 예를 들어 기본적으로 반복 루프가 없으며 꼬리 호출 최적화가 필요하기 때문에 반복 대신 재귀 사용에 압력을가합니다. . 체계에는 매우 흥미로운 위생 매크로 시스템이 있으며 학습에 많은 가치가 있습니다. 그러나 IMO는 CL 스타일 비위생적 매크로를 먼저 배우는 것이 좋습니다. 대부분의 (?) 스키마 방언은 사양의 일부가 아니더라도 적어도 하나의 구현을 제공합니다. 배우기위한 언어를 배우고 싶은 것 같아서

Scheme의 커뮤니티는 몇 개의 작은 주머니를 제외하고는 실제 작업을 수행하는 것에 대한 연구에 주로 전념하는 것처럼 보입니다 ... 예를 들어 모든 방언에는 자체 패키지 관리자가 있으며 패키지는 대부분 휴대용이 아닙니다. 방언을 가로 지르며, 이는 제도 사회에서 큰 문제입니다.

반면에 일반적인 리스프는 언어를 개발하는 데 훨씬 실용적인 방법으로 보입니다. 표준은 많은 lisp 코드가 구현간에 이식 가능하고 많은 컴파일러가 빠르고 잘 최적화되도록하는 것입니다. 대규모 패키지 세트가 있으며, 그 중 다수는 구현간에 이식 가능합니다. 그리고 겉보기에는 (비교적으로) 많은 양의 실제 제품이 언어로 만들어지고 있습니다. 그리고 quicklisp을 사용하면 패키지 관리는 Ruby 또는 Node와 같은 현대 사회에서 얻는 것에 가깝게 느껴집니다. 그러나 CL에는 결함이 없으며 스키마와 비교할 때이 시점에서 매우 큰 사양이 있으며 심지어 Lisps의 라이브러리로 작성된 객체 시스템 CLOS조차도 IIRC 사양의 일부입니다. 그리고 많은 양의 시스템을 통해 레거시를 보장받을 수 있습니다.

그렇지 않으면 클로저에 대해 말할 수 없다고 말했고 Emacs 확장 프로그램을 작성하는 것이 목표라면 Emacs Lisp는 분명히 적절한 선택이며 다른 소프트웨어에는 적합하지 않습니다.

TLDR; 배우는 것이 목표라면 계획을 권장합니다. 그러나 소프트웨어를 만들려면 두 가지 주요 lisp 변형 중 Common Lisp를 사용하는 것이 좋습니다.


BTW, PLT Racket은 더 체계적인 언어이며 원래 실제 작업에 유용하려고하는 체계 커뮤니티의 언어입니다. 요즘 체계에서 코드를 작성한다면 PLT 또는 Chicken Scheme 일 가능성이 높지만 나중에 내 마음의 부드러운 반점 때문일 수 있습니다.
Arelius

0

나는 대답에서 많은 것을 배웠다. 이 깨달은 대화에 기여한 모든 분들께 감사합니다.

newLISP에 대해 언급해야합니다 . CL 및 Scheme과 약간 다르지만 매우 유용한 기능을 많이 구현합니다. http 서버, 다중 처리 기능 (Cilk) 및 원격 평가 기능이 매우 깨끗하고 사용하기 쉽다는 것을 알았습니다.

하나의 실행 파일은 작고 빠르며 많은 멋진 배터리를 포함합니다.


아마 그것을 언급하는 것이 공평하지만 나는 그것을 추천하지 않을 것입니다 ... 어휘 범위와 모듈이 없습니다-심각하게? newLISP가 달성하려는 것을 실제로 얻지 못했습니다.
cji

2
당신이 맞아요-다릅니다. 그것은 컨텍스트와 동적 범위를 사용하며 내 경험 모듈과 컨텍스트는 서로 관련되어 있습니다. 다른 CL이나 구성표가 되려고하지 않습니다. 차이점에 대한 페이지를 읽으면 ( newlisp.org/index.cgi?page=Differences_to_Other_LISPs ) 디자인 문제가 드러납니다 . 마찬가지로 CL 또는 Scheme 경험을 원하는 사람에게는 권장하지 않습니다. 그러나 일부 사용 사례의 경우 실행 가능한 선택이 될 수 있습니다. 이것이 오픈 소스 생태계의 아름다움입니다.
CyberFonic

0

배울 Lisp의 방언을 선택할 때 고려해야 할 또 다른 요소는 구현의 수와 품질 일 수 있습니다. 방언에 하나 또는 두 개의 구현 만있는 경우 이러한 결함이 수정 될 때까지 결함을 고수하며 사람들이 구현을 구체화하지 않을 가능성이 항상 있습니다. 그 자체로 Lisp의 단일 구현 방언을 사용하지 않는 이유는 아니지만 고려해야 할 사항입니다. Scheme과 Common Lisp의 장점은 이러한 방언을 많이 구현한다는 것입니다. 두 언어 모두 표준을 발표 했으므로 비교적 최근의 구현에서는 대부분 동일한 코드를 실행할 가능성이 높습니다. 이러한 구현 중 일부는 오래 전부터 사용되어 왔지만 여전히 활발한 개발을 진행하고 있습니다. 이제는 고품질 구현으로 개선되고 있습니다.


벤치 마크에 따르면 Clojure는 SBCL에 비해 그리 나쁘지 않습니다 : benchmarksgame.alioth.debian.org/u32/…
AndreasScheinert

Andreas에게 감사합니다. 네가 옳아. JVM에 대해 얼마나 많이 알고 있는지 보여줍니다. 부분적으로 나는 상대적으로 느리지 만 그렇지 않은 JVM 기반 CL 인 ABCL에 의해 잘못 인도되었습니다.
Mars

JVM에서 Lisp을 원한다면 Clojure로 이동하십시오. 완벽하지는 않지만 진정한 즐거움 (IMHO)
AndreasScheinert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.