Lisp의 장점은 무엇입니까? [닫은]


104

나는 그것이 좋은지 나쁜지 말할만큼 충분한 Lisp를 모른다. Lisp를 사용한 모든 사람들이 좋아하는 것 같지만 요즘 가장 인기있는 언어는 C에서 유래 한 것입니다.

그렇다면 Lisp의 장점은 무엇이며 왜 더 많이 사용되지 않을까요? Lisp에 대해 명백한 나쁜 점이 있습니까 (끊임없는 괄호 제외)?


5
"요즘 가장 인기있는 언어는 C에서 유래 한 것입니다." 중괄호를 사용하는 대신 기능을 살펴보면 현대 언어가 Lisp에서 그리 멀지 않고 항상 가까워지고 있음을 알 수 있습니다. 예를 들어 C # 또는 Python 또는 Ruby로 작성된 프로그램은 C보다 Lisp와 훨씬 비슷해 보일 것입니다.
Ken

11
C처럼 보이지만 Lisp처럼 작동하는 언어의 좋은 예는 JavaScript입니다. 많은 디자인이 Scheme과 비슷합니다.
JAL

좋은 점, Ken : Lisp에 고유했던 기능 (일급 함수, 데이터 기능, 심지어 매크로까지)이 점점 더 많이 다른 언어로 제공되고 있습니다. 그리고 피드백은 일방적이지 않습니다. Lisp는 다른 언어 (예 : 객체 지향 패러다임의 성공에 대한 응답으로 CLOS)를 인식하여 새로운 기술과 관용구를 발전시키고 있습니다.
itowlson

6
Lisp는 모든 곳에서 아이디어를 가져 왔지만 CLOS는 무엇에 대한 응답으로? CLOS (1986-1987)는 주로 Lisp에 대한 초기 개체 시스템의 표준화였습니다. 예를 들어 Lisp Machine Lisp (1980)에는 Flavors가 포함되었습니다. 나는 "OO 패러다임의 성공"이 1980 년에 아직 분명하다고 생각하지 않는다. "C with Classes"는 겨우 1 년 (그리고 "C ++"로 이름이 바뀌기까지 아직 3 년이 남았음) 그리고 나는 모른다. Simula-67은 매우 인기가있었습니다. Lisp에는 오늘날 인기있는 언어에는없는 여러 고급 기능이 있습니다. OO는 성공했지만 Lisp는 인기가 있었기 때문에 성공하지 못했습니다.

Lisp를 사용하는 모든 사람들이 그것을 좋아한다고 생각하지 않습니다. 내 경험은 다릅니다. Scheme으로 시작한 컴퓨터 과학 학생들에게 물어보십시오. 아마 약 10 %는 그것을 좋아할 것이고, 30 %는 그것을 존중할 것이고, 60 %는 그것을 싫어할 것입니다. 또한 가장 인기있는 언어 C.의 후손 생각하지 않는다
라이너 Joswig

답변:


58

Lisp는 프로그래밍 언어의 Chuck Norris입니다.

Lisp는 다른 언어를 측정하는 기준입니다.

Lisp를 아는 것은 개발자의 깨달음을 보여줍니다.

나는 3 가지 약점 (그리고 그들의 반론)에 대해 들었습니다.

  1. 동적 타이핑.

    런타임에 발생하지 않도록 특정 클래스의 오류를 포착 할 수있는 충분한 정보를 컴파일러에 제공하는 것을 중심으로 정적으로 형식화 된 언어에 대한 논쟁이 있습니다. 하지만 여전히 테스트가 필요합니다.

    이 기사는 더 많은 테스트와 함께 동적 타이핑을 주장합니다 : Strong Typing vs. Strong Testing .

  2. 픽업하기 어렵습니다.

    실제로 여기에는 학습과 도구의 두 부분이 있습니다.

    Lisp는 실제로 "얻기"위해 약간의 노력이 필요하지만 그만한 가치가 있습니다. Lisp를 배우면 다른 언어로 더 나은 프로그래머가 될 수 있기 때문입니다. 예를 들어 실제로 클로저를 "얻으면"Java의 내부 클래스를 이해할 수 있습니다. 그리고 일류 함수를 "얻으면"함수없이 언어를 사용할 때마다 우울해질 것입니다.

    나는 The Little Schemer를 읽었고 Practical Common Lisp를 읽고 있는데, 둘 다 훌륭합니다.

    다음은 도구입니다. 저는 Mac을 사용하고 있으므로 Aquamacs Emacs (초보자에게 Emacs를 사용 가능하게 함)와 Steel Bank Common Lisp (SBCL)에 집중했습니다.

  3. 라이브러리 부족.

    아직 확실하지는 않지만 의심 스럽습니다. 웹 사이트 구축을 위해 HunchentootElephant 가 훌륭한 도구 세트를 제공하는 것처럼 보입니다 . 그러나 실제로 Lispers가 라이브러리 부족에 대해 불평하는 것을 보지 못합니다 (Lisp가 너무 강력해서 필요하지 않은 것일까 요?).


4
주소 (3)-Clojure를 보셨습니까?
viksit

5
"하지만 실제로 Lispers가 라이브러리 부족에 대해 불평하는 것을 보지는 않습니다 (Lisp가 너무 강력해서 필요하지 않은 것일까 요?)." 나는 마지막 문장을 "(Lisp가 너무 강력해서 그들에게 필요하지 않습니까?)"로 수정합니다. 이것은 큰 차이를 만듭니다.
Agnius Vasiliauskas 2010

50
lisp가 왜 대단한지 말하지 않습니다.
Kilon 2011

30
"X는 굉장합니다! X는 훌륭합니다! X는 Y와 같습니다.이 역시 훌륭합니다." "X가 왜 위대하다고 여겨지 는가?"에 대한 대답이 아닙니다. 정치적 언급도 부적절하고 도움이되지 않습니다 (대부분의 사람들은 자유주의가 좋은 생각이라고 생각조차하지 않습니다). 세 점은 도움이되지만 "약점 A가 있습니다.하지만 사실 약점도 아닙니다!"가 아니 었으면합니다.
Superbest

1
Lisp는 프로그래밍 언어의 Chuck Norris입니다. 그래서 그것이 그렇게 좋게 만드는 것입니다. 알았다. 비추천.
NiCk Newman 2015

71

"Lisp는 프로그래밍 가능한 프로그래밍 언어입니다."
— John Foderaro, CACM, 1991 년 9 월

내 견해는 다음과 같습니다.

표면적으로 Lisp는 멋지고 간단한 함수형 프로그래밍 언어입니다. 구문이 거의 없으며 모든 부분이 논리적으로 서로 맞습니다.

좀 더 깊이 파고 들어 SICP를 읽고 메타 원 평가자를 작성하면 두 가지를 발견하게됩니다. 하나는 전체 인터프리터 (몇 가지 기본 요소 만 제공됨)가 코드 한 페이지에 불과하고, 두 가지는 코드와 데이터 간의 관계입니다. 우아한 프로그래밍 기술을 허용합니다.

이것을 완전히 흡수하면 다른 언어가 몇 가지만 말할 수있을 때 결정적인 것처럼 느껴집니다. 리스프 구축 할 수 있는 당신이 그것을 위해 구문과 의미를 정의 할 수 있습니다 경우 모두에서 추상화.


1
이론적으로는 Rust, Ruby, C, Java, Python, Erlang과 같은 모든 언어를 Lisp에 포함 할 수 있습니다. 그래서 파이썬 (Hy)과 Rust의 s-expression 버전은 (Risp)라고 불립니다. [이것들이 얼마나 안정적인지는 모르겠습니다]. Python 대신 Hy로 코드를 작성하면 parinfer / paredit ( shaunlebron.github.io/parinfer ) 와 같은 매크로 및 구조적 편집 기능이 있습니다. 매크로를 사용하면 Lisp에 자체 DSL을 포함 할 수 있으며 컴파일러 매크로를 통해 느린 코드를 빠른 코드로 전환하는 데 사용할 수도 있습니다. sexp 트리를 변환하여 Python (Hy) 코드를 Rust (Risp)로 바꿀 수도 있습니다.
aoeu256

나는 또한이 말을 여러 번 들었습니다. @ aoeu256 좀 더 제거 하시겠습니까?
학생

66

Lisp는 매우 간단하고 단순한 정규 구문을 가지고 있기 때문에 좋습니다.

Lisp는 매우 최소한의 단순하고 정규적인 구문을 가지고 있기 때문에 나쁩니다.


4
최소한의 단순하고 정규적인 구문의 단점은 무엇입니까?
oskarkv 2013

27
@oskarkv-완전히 규칙적인 최소 구문은 특정 용도에 대한 편견이 없음을 의미합니다. 파레토 원칙을 만나기 전까지는 좋을 것 같습니다. 가장 일반적으로 발생하는 경우에 편향되는 것이 더 효율적이고 모든 경우가 똑같이 가능성이있는 척하는 것을 중지하는 것이 더 효율적입니다. 고객의 20 %가 NYC에 있고 80 %가 LA에 있다면 캔자스 / 오클라호마 국경 어딘가에 울타리에 앉아 지리적으로 "편견없는"상태를 유지하는 것이 합리적입니까? 아니면 대부분의 고객이있는 곳으로가는 것이 더 감각적입니까? 우리는 가능성이있는 문제로 기능을 왜곡하는 언어를 선호합니다.
Daniel Earwicker 2013

4
Lisp 구문은 정말 좋습니다. Clojure 이후에 Haskell을 배웠지 만 그때까지 Haskell의 구문조차도 방해물처럼 느껴졌습니다. Lisp의 suntax의 균일 성은 훌륭합니다. 그래서 저는 당신이 말하는 편견이 무엇인지 정확히 모릅니다. 비 유연성에 대한 편견? 나쁘다.
oskarkv 2013

3
그렇게 넣으면 소리가 나빠요. 나는 그것을 그렇게 넣지 않았다! 가장 흔한 사건, 가장 가능성이 높은 상황에 대한 편견은 어떻습니까? 이것은 (물론) 상대적인 용어이므로 수행하는 작업에 따라 다릅니다. 당신이 할 일에 대한 정보가 진정으로 부족하다면 준비하려고 할 필요가 없습니다. 그러나 그것은 아마도 사실이 아닐 것입니다. 당신은 정보를 가지고 있으므로 당신이 준비해야 할 가장 가능성이 높은 상황에 대해 스스로 준비 ( "편향") 할 수 있습니다.
Daniel Earwicker 2013-04-29

22

"충분히 복잡한 C 또는 Fortran 프로그램에는 임시적이고 비공식적으로 지정되고 버그가 많은 Common Lisp의 절반을 느리게 구현하는 것이 포함되어 있습니다."

그린스펀의 10 번째 법칙


16

다음은 몇 가지 유용한 링크입니다.


1
On Lisp는 훌륭합니다 (매크로가 약간 조밀 해지고 있음을 인정하기는하지만 절반 정도입니다). 그러나 그것을 읽으려면 Lisp를 알아야합니다. 이 작은 문제를 제외하고는 Lisp뿐만 아니라 일반적인 소프트웨어 엔지니어링에 관한 훌륭한 책입니다.
JS


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