Lisp가 유용한 이유는 무엇입니까? [닫은]


64

Lisp은 분명히 AI에 이점이 있지만 Lisp가 Java, C # 또는 C보다 빠르지는 않습니다. Lisp의 주인이 아니지만 이점을 이해하기가 엄청나게 어렵다는 것을 알았습니다. 하나는 Lisp에서 비즈니스 소프트웨어를 작성하게 될 것입니다.

그러나 이것은 해커의 언어로 간주됩니다.

폴 그레이엄 은 왜 리스프를 옹호합니까? ITA Software 가 다른 고급 언어보다 Lisp를 선택한 이유는 무엇 입니까? 이 언어들보다 어떤 가치가 있습니까?


20
"Lisp가 Java, C #보다 빠르거나 사실 C보다 빠르다고 생각하지 않습니다"라는 선은 다소 혼란 스럽다. C는 일반적으로 "금속에 가깝게 프로그래밍하기 때문에 빠른 코드"의 표준으로 유지됩니다. 이는 거의 모든 것을 능가하는 벤치 마크입니다. 이제 Java 및 기타 GC 언어는 메모리 할당 / 정리 속도와 같은 일부 컨텍스트에서이를 능가 할 수 있습니다. 그럼에도 불구하고이 문장은 조금 뒤바뀐 것으로 보인다.
Michael H.

2
Lisp는 언급 한 것보다 높은 수준의 언어이므로 일반적으로 느립니다.
segfault

5
@Bo Tian : "고급 언어"는 명확한 정의가 필요합니다. 그것이 하나라도, 이것은 비평 형처럼 들립니다. (감사 @Mark)
Mike Dunlavey

5
@BoTian "높은 수준"은 기본적으로 "느린"과 같지 않습니다.

24
Lisp는 다른 모든 언어 디자이너가 얼마나 잘못했는지 보여주기 위해 존재합니다.

답변:


78

Common Lisp의 역량을 갖추는 데 몇 가지 이유가 있습니다.

  1. 동종 코드. 이를 통해 구조화 된 자체 수정 코드가 가능합니다.
  2. 구문 인식 매크로. 상용구 코드를 다시 작성할 수 있습니다.
  3. 프래그머티즘. Common Lisp는 작업 전문가가 작업을 수행하도록 설계되었습니다. 대부분의 기능적 언어는 일반적으로 그렇지 않습니다.
  4. 적응성. 합리적인 속도로 많은 다른 일을 할 수 있습니다.
  5. 경고. 현실 세계는 지저분 합니다. 실용적인 코딩은 지저분한 구성을 사용하거나 발명해야합니다. 커먼 리스프는 작업을 수행 할 수있는 충분한 주의력을 가지고 있습니다.

아마도 Common Lisp에 대해 선택해야 할 유일한 이유는 표준 라이브러리에 날짜가 있기 때문입니다.

나는 사지로 나가서 일반적인 경우에 구문은 전문 소프트웨어 작업자에게 문제가되지 않아야한다고 말합니다.


8
구문이 가독성이나 쓰기 가능성에 크게 영향을 미치는 경우 문제가 될 수 있습니다. 나는 이것이 Lisp의 경우라고 생각하지 않습니다. 좋은 편집기 또는 IDE는 구문 강조 및 파렌 일치가 충분히 중요하지 않도록 충분히 잘 수행 할 수 있습니다.
Matt Olenik

4
또한 Lisp를 조금만 사용했으며 (일반 Lisp) 일반적인 느낌은 # 2가 Lisp의 가장 큰 이점이라는 것입니다. 어쩌면 나는 잘못된 패러다임으로 생각하고 있지만 자체 수정 코드가 필요한 상황은 없었습니다. 그것을 사용해야 할 특별한 이유가 있다면, 그렇습니다. 그렇지 않으면 매크로는 실제 킬러 기능처럼 보입니다. 편집 : 이것은 실제로 동일한 기능이라는 것을 깨달았습니다.
Matt Olenik

3
@ 매트 : 예. FWIW, 나는 최근에 매크로가 포함 된 C # -ish CLR 실험 언어 인 Nemerle을 만났습니다. nemerle.org . 그것은 내가 경험하기 위해 생각하는 시점에서 파고들 가치가 있습니다.
Paul Nathan

2
"Pragmatism. CL은 작업 전문가가 작업을 수행하도록 설계되었습니다. 대부분의 기능적 언어는 일반적으로 그렇지 않습니다.": 나는이 진술에 동의하지 않습니다. 나는 Lisp에 관심이 있고 그것을 배우기 위해 시간을 할애하려고 노력하고 있습니다. 그러나 다른 FP 언어도 "일을 완수"하는 데 매우 효과적입니다. 적어도 이것이 지금까지 스칼라와 하스켈에 대한 나의 경험이었습니다.
Giorgio

1
"CL은 작업 전문가가 작업을 수행하도록 설계되었습니다. 대부분의 기능적 언어는 일반적으로 그렇지 않습니다.": 이에 대해 자세히 설명 할 수 있습니까? 특히 문장의 두 번째 부분에서. 몇 가지 예를들 수 있습니까?
조르지오

23

나는 Lisp를 좋아합니다.

  • 코드와 데이터를 모두 표현하는 단순하고 우아한 통합 방법입니다.
  • 독특한 관점, 어려운 문제 해결에있어 결정적인 80 보너스 IQ 포인트를 제공합니다 (Alan Kay의 모자 팁 포함)
  • 매우 민첩한 대화식 및 대화식 개발 환경
  • 추상화를 생성하고 조작 할 수있는 전례없는 힘

프로그래밍은 복잡성과 싸우고 있습니다. 추상화는 매우 제한적이고 일정한 두개골 크기로 복잡성을 증가시키는 유일한 효과적인 도구입니다. Lisp로 추상화를 관리하는 것은 n + 1 희망을 가진 지니를 갖는 것과 같습니다.


5
"프로그래밍은 복잡성과 싸우고있다. 추상화는 추상화가 유일하게 복잡성을 증가시키는 유일한 효과적인 도구이다. (내가 +10을 줄 수 있으면 좋겠다.)
Giorgio

"매우 민첩하고 인터랙티브 한 대화 형 개발 환경"이란 무엇입니까?
qed

6
그것이 바람직 (+ 1 n)하거나 더 나은 실용적이지 않아야 (incf n)합니까?
Reb. Cabin

21

올바른 Lisp 답변이 더 게놈 적이라고 생각합니다. 같은 뭔가 : "당신이 요청해야하는 경우, 당신은 준비가되지 않습니다."

그런 다음 다른 사람이 더 궁금한 점이 있으면 정답은 "예" 이거나 질문 중 하나이거나 "준비되지 않았습니다"입니다.


5
Paul Graham은 Louis Armstrong을 인용합니다.“재즈가 무엇인지 물어 보면 알 수 없습니다.”
Jason Baker

25
+1. "당신이 물어봐야한다면, 당신은 준비가되어 있지 않다"와 같은 문구들이 때때로 그렇게 말한 사람은 단순히 설명 할 수 없다고 생각하게합니다
superM

5
@superM Lisp와 Lisp와 같은 기능 언어는 일단 배우면 더 이상 설명 할 수없는 속성을 갖습니다!
esoterik

18

모든 사람들이 언급 한 인공 지능 (AI) 분야 에서 Lisp의 이점 은 다소 역사적인 사고 라고 생각합니다 ... Lisp는 AI를 위해 시작했거나 범용 언어이지만 일반적인 언어입니다.

언어의 유일한 중요한 측면은 실행 속도가 아니라고 생각합니다 (하지만 한 번은 했음). 그러나 Lisp에 대해 내가 좋아하는 측면 중 하나는 나를 위해 Python과 C를 하나로 결합한다는 것입니다. 선언과 프로토 타입없이 즉시 시작하고 매우 빠르게 코딩을 시작할 수 있습니다 (런타임과 REPL 이 매우 중요합니다). 무언가를 실행 한 후에는 형식 선언을 추가하고 코드를 조금씩 "최적화"합니다. SLIME 에서 키를 누르고 관심있는 함수에 대해 생성 된 기계 언어를 보는 것은 놀라운 일 입니다. Python에는 형식 선언이 없으므로 속도를 높일 수는 없지만 C에서는 빠르게 작업을 수행합니다. 훨씬 더 고통스러운. 이 경우 Lisp가 매우 유용합니다.

말했듯이, 나는 주로 매크로 때문에 Lisp를 좋아 합니다 . 매크로가 무엇을 달성 할 수 있는지 마침내 이해하면 괄호를 쉽게 넣을 수 있다고 생각합니다. 또한 Emacs 와 같은 편집자는 괄호 자체를 관리하므로 따로 관리 할 필요가 없습니다. 그러나 처음에는 괄호를 모두 찾지 못했음을 인정하며 일부 사람들은 그저 참을 수 없다는 것을 알고 있습니다. 그러나 매크로의 전체 목적은 컴파일 타임에 코드를 생성하는 것이기 때문에 Lisp의 코드는 표준 데이터 구조를 사용하며 괄호는 단순히 코드를 목록으로 표현하기 때문에 매크로를 작성하기가 간단합니다.

Lisp를 사용하여 문제를 더 잘 설명하기 위해 작은 언어를 쓸 수있는 다른 언어를 모르겠습니다. 그것은 폴 그레이엄 이 평균이길 때 이야기하는 이점 입니다. 극단적 인 모듈 성과 간결함입니다. Java에서는 단일 아이디어를 표현하기 위해 많은 원시 텍스트를 작성해야합니다. Lisp에서는 해당 코드를 자동으로 생성하는 매크로를 작성하고 나중에 그 매크로를 사용합니다. 어쨌든, 당신은 이것의 몇 가지 예를 이해하고 나서 스스로 판단해야합니다. 내가 그것을 "보았을 때, 나는 날아 갔고, 나는 여전히 이런 이유로 Lisp가 가장 큰 언어라고 생각합니다. 나는 항상 주류 언어로 된 매크로가 Lisp 매크로의 힘과 일치하는지 확인하지만 지금까지는 찾지 못했습니다. 포스는 가까운 초입니다.

비즈니스 소프트웨어와 관련하여 몇 가지 비판으로 마무리하겠습니다.

  1. 비즈니스 소프트웨어에는 라이브러리와 좋은 라이브러리가 필요하며 Lisp는 이에 적합하지 않습니다. 나는 보통 그것들을 필요로하지 않지만, 필요할 때 몇몇 사람들이 사용하는 불완전한 소프트웨어를 선택해야한다. 이 문제를 해결하는 데 기여해야합니다.

  2. 비즈니스 소프트웨어는 일반적으로 많은 사람들이 구축하며 기본적으로 언어를 변경하기 때문에 매크로가 통신에 방해가 될 수 있다고 생각합니다. 많은 프로그래머들이 프로그램 텍스트가 길고 반복적 일지라도 코드에서 특정 패턴을 감지하는 것이 더 편합니다. ITA에서 매크로에 관한 규칙이 있거나 공동 작업을 쉽게 할 수있는 거대한 매크로 라이브러리가 있다고 가정합니다 (또는 더 간단하게 모든 프로그래머는 Lisp 전문가입니다).


7
clojure를 시도하십시오 .JVM의 lisp입니다. 따라서 JVM을 사용하면 모든 Java 항목을 사용할 수 있습니다.
Zachary K

@zachary : JVM에는 최소 2 개의 Common Lisp 구현이 있습니다. ABCL은 비교적 성숙합니다.
래리 콜먼

Clojure는 100 % Java와 호환됩니다 (적어도 Clojure가 개선 할 수없고 Javaists가 불평 할 수없는 방식으로 Java에서 아무것도 발견하지 못했습니다). Clojure는 Common Lisp와 FP의 영향을 많이받습니다. 이것과 SBCL, CLisp 및 Emacs를 사용하면 Lisper는 오늘날 왕처럼 느껴야합니다.
Reb. Cabin

13

나는 Lisp를 좋아하지 않습니다.

(저는 사용하는 많은 개념, 강력한 기술을 기본적으로 사용하는 방법 등을 좋아합니다.

그러나 언어의 이점을 다른 프로그래밍 언어 (일부 직접, 일부는 간접적으로)로 얻을 있기 때문에 실제로 (어떤 사람들은 시도했지만 ) 실제로 그것을 사용한다고 확신하지 못했습니다 . 그래서 충분한 이점이 없습니다 그것을 배우고 끔찍한 구문을 따라 잡는 데 시간을 보내도록하십시오.))))

그러나 그렇습니다. 일부 사람들이 좋아하는 이유는 다음과 같은 스택 오버플로 질문을 확인하십시오.

아마도 그들에 대한 관련 질문에 몇 가지 더있을 것입니다.


26
"끔찍한 문법으로 생각하기". 내가 Lisp 초보자 였을 때부터 너무 길었을 수도 있지만 Lisp 구문의 단순성과 규칙 성은 큰 특징입니다. 그것이 Lisp 자체를 확장 할 수있게 해주기 때문입니다. 사용자 정의 반복자를 추가 할 수 있으며 개발자가 할 필요가없는 등 자체적으로 자동 정리되는 새로운 "xxx로"범위 구성을 추가 할 수 있습니다. 구문은 버그가 아닌 기능입니다.
Michael H.

5
언어 자체를 확장 할 수있는 기능 에는 6 자로 제한되는 구문이 필요 하지 않습니다 . 또한 : "구문은 버그가 아닌 기능입니다" ? - 알아. 나는 그것을 버그라고 부르지 않았다.
Peter Boughton

8
자, 매크로 시스템의 이점을 어떻게 얻습니까? 합리적으로 짧은 장 (Paul Graham, "On Lisp")에서 객체 지향 확장을 몇 개의 언어로 만들 수 있습니까?
David Thornley

6
구문은 다른 언어보다 더 끔찍하지 않습니다. 괄호가 잠시 후에 시각적으로 "사라지는"것을 발견했습니다. 들여 쓰기가 잘되어 있으면 코드를 쉽게 읽을 수 있습니다.
베리 브라운

8
그러나 S-exp 사이를 쉽게 이동할 수있는 능력이있는 것 같습니다 ... 괄호의 주제에 대해 다음 인용문이 마음에 듭니다. 괄호? 어떤 괄호? Lisp 프로그래밍의 첫 달부터 괄호를 보지 못했습니다. 나는 신문에서 단어 사이의 모든 공간에 방해가된다면 Lisp의 괄호에 대해 불평하는 사람들에게 물어보고 싶다 "-Ken Tilton
Cedric Martin

9

"Lisp"를 " Common Lisp " 로 해석하겠습니다 . 다른 답변이 " 체계 " 라고 말할 것 입니다. (힌트 : Lisp는 언어 군입니다.)

"빠른"이란 무엇입니까? 벤치 마크를 실행하는 데 걸리는 시간 측면에서 C보다 빠르지는 않지만 ( 그렇습니다 ).

Joe Random Hacker가 작업 프로그램을 작성하거나 대형 소프트웨어 시스템의 버그를 수정하는 데 얼마나 걸립니까? 거의 확실합니다.

에 관해서는 I 코드가 아닌 보일러를 쓰고 싶어하기 때문에 해커, 나는 그것을 사용합니다. 나는 무언가를 한 번 쓰고 싶다 . 계속 반복하지는 않는다. 그리고 프로그램을 작성하는 동안 프로그램과 상호 작용하고 싶습니다.


편집기 내에서 코드의 나머지 부분에 즉시 무언가를 할 작은 함수를 작성할 수 있다면 멋지지 않습니까? 아니면 이미 할 수 있습니까?
Mark C

4
@ 마크 : 당신이 이맥스를 묘사하고 있다고 생각합니다.
Ferruccio

@Ferruccio 그래도 먼저 코드를 실행해야한다고 생각했습니다.
Mark C

2
@Mark C : 글쎄, 당신은 지역을 강조한 다음에 M-x eval-region(또는 eval-buffer)해야하지만, 그게 전부입니다.
Frank Shearar

1
@MarkC : 또한 스크래치 버퍼 에 있다면 함수를 작성하고 C-j(입력과 거의 동일) 키를 누르면 즉시 적용됩니다.
Tikhon Jelvis

7

나는 Lisp가 내 생각을 표현하는 훌륭한 매체이기 때문에 좋아합니다. 내가 가장 좋아하는 언어의 술어는 "아이디어를 표현할 무언가를 선택할 수 있다면 무엇을 할 것인가?"입니다. 현재 Lisp * ( 구체적으로 계획 )는 프로그래밍 메모를 작성한다는 것을 알았습니다. 로 IRL , 종이와 펜 노트. 프로그램에 대해 생각할 때도 PHP, Ruby 또는 Python으로 구현해야합니다.

이것은 내가 스스로에게 가르쳐 준 속임수가 아니거나, 대단한 신뢰성을 위해하는 일이 아닙니다. 이 리스프는 훨씬 더 자연스러운 것을 단지 나에 대한 대안의보다에서 생각하고, 당신과 함께 공명 언어는 깊이 당신은 보물입니다.

*하지만 각주로서, Haskell 은 더 많은 것을 배우면서 그 격차를 매우 빨리 끝내고 있습니다.


6

문제는 힘이다. 힘 = 일 (프로그램 기능) / 시간

"우리는 Lisp 프로그래머를 이기지 못했습니다. 우리는 C ++ 프로그래머를 따랐습니다. 많은 사람들을 Lisp로 반쯤 끌었습니다."

-Guy Steele, Java 사양 공동 저자

C ++과 Java 사이에 일종의 곡선을 플로팅합니다. 계속 진행하면 라인을 따라 어느 시점에서 Lisp를 찾을 수 있습니다.


2
여기서 문제는 Java로가는 많은 C ++ 기능을 잃어 버리지 만 Lisp로 갈 때 다시 개선 된 형태로 다시 가져 오는 것입니다.
David Thornley

@DavidT 그 정확한 인용문에 대한 SO 질문 에는 출처에 대한 링크가 있습니다 ( "cite"검색). 인용문을 그렇게 심각하게 받아 들여서는 안됩니다.
Mark C

@David : 매크로처럼. 그것들이 자바 (그리고 C #)로가는 것만 빼앗을뿐 아니라 그것들을 "가상"으로 만들었습니다. 기본 언어 위에 DSL을 작성하는 경우 매크로가 정말 유용합니다.
마이크 던 라비

@ Mike Dunlavey : 나는 C ++에서 매크로를 정말로 싫어합니다. (C, 매크로를 싫어하지만 선택의 여지가 없습니다). 저는 Common Lisp의 매크로를 정말 좋아합니다. 알다시피, 그 의견에 대한 나의 문제는 C ++과 Common Lisp를 모두 Java를 좋아하는 것보다 훨씬 많이 좋아한다는 것입니다.
David Thornley

@David : Lisp의 매크로를 100 % 사용하고 있습니다. C에서 / C ++ 그들은 추악하고 남용하는 경향이 있지만, (의 종류 틀림없이 프린지 내가 할) 물건, 그들은있어 너무 없는 것보다는 훨씬 낫다. 물론 C ++에서 할 때 그것은 학대로 간주 될 수 있지만 Lisp에서는 따뜻하게 영리합니다. 그림을 이동.
Mike Dunlavey가

6

Paul Graham은 Lisp를 다르게 만든 내용 에서이 질문에 스스로 답변합니다 .

그는 1990 년대 중반에 스타트 업에 사용했기 때문에 파이썬루비 는 그 시점에서 실제로 성숙하지 않았거나 심지어 태어나지도 않았습니다.

Lisp는 기본적으로 동적 언어의 모든 장점을 가지고 있으며 오늘날 대부분의 웹 응용 프로그램에서 Python과 Ruby는 매우 훌륭하며 프레임 워크와 문서 및 활기찬 커뮤니티의 이점을 가지고 있다고 생각합니다.

킬러 기능은 아마도 전체 프로그램이 표현으로 만들어 졌을 것입니다. 즉, 코드 블록은 표현식에 지나지 않기 때문에 코드 블록을 함수 (또는 매크로 ...)로 전달할 수 있습니다.

파이썬에는이 기능이 정확히 없습니다. 함수를 정의하고 전달해야합니다. 루비는 블록을 가지고있는 것 같습니다. 아마도 리스프가 할 수있는 것에 비해 다소 제한적입니다 (확실하지 않습니다).


Paul Graham의 기사는 흥미 롭습니다. 왜냐하면 몇 가지 항목을 제외하면 요즘 대부분의 언어에는 그가 나열한 기능이있는 것 같습니다. 아마 그 당시 Lisp가 더 매력적이었을 것입니다. 요즘에는 그러한 기능을 도입 한 언어만큼 가치가 있습니까?
Andres F.

언어 구문 인 AST는 여전히 Lisp의 도메인입니다. 컴파일 시간 동안 매크로가 전체 언어를 사용할 수있는 비리스 언어를 알지 못합니다 (예 : 컴파일러는 기본적으로 Lisp 프로그램 인 매크로 정의에 매크로 호출을 전달합니다. 컴파일시 매크로에서 http 및 db를 수행하려고합니다 ?)
przemo_li 2016 년

6

나는 과거 에 Scheme 에 무릎을 꿇은 반응을 보였지만 이제 Lisp ( 실제 Clojure )를 맞출 준비가되었습니다 .

지난 몇 년 동안 Java, C #, C ++, Python과 같은 언어를 선택했지만 더 이상 어려운 일이 아닙니다.

Clojure는 많은 약속을 가지고 있으며 매우 깨끗하고 많은 실제 문제를 해결할 수 있습니다. Clojure와 같은 깨끗한 언어에 대한 강력한 사례는 멀티 코어 컴퓨터의 출현입니다.

예이 LISP!

편집 : ITA 소프트웨어는 MIT 대학원생에 의해 설립되었으며 Scheme / Lisp는 많은 MIT 대학원생이 배운 유일한 언어입니다. 그러나 공정한 운영 시스템에서 Lisp 알고리즘을 핫 스왑 할 수 있습니다.


8
다시 : 일이 더 이상 도전하지 않습니다-하스켈에게 가서 당신의 생각을 알려주십시오. 또한, 당신은 항상 변경을 위해 INTERCAL을 배우려고 노력할 수 있습니다!
Mark C

3
@Mark C, 죄송 합니다만 만지지 않습니다 INTERCAL. 도전 만이 유일한 기준은 아니다. 실제 문제도 빠르게 해결할 수 있어야합니다. 적어도 Haskell은 많은 사람들에게 사용되고 사랑 받고 있습니다.
Job

물론 그것은 농담이었다.
Mark C

1
프로덕션 서버에서 코드를 조심스럽게 업데이트하는 것은 Lisp의 기쁨 중 하나입니다. 적어도 내가 그것을 가지고 놀았을 때 파이썬은 이것을 잘하지 않았다. 변경 사항을 참조한 모든 함수 / 메소드를 수동으로 재 컴파일해야하며 모든 Common Lisp 구현이이를 처리합니다. 작성, 테스트, 편집, 테스트-컴파일 루프 없음과 같은 개발에 동일한 기능을 사용하며 원하는 경우 대화식 테스트를 수행하여 단위 테스트로 전환 할 수 있습니다.
Michael H.

@Job I 잊었다 ... PLEASE?
Mark C

6

내가 Lisp에 대해 좋아하는 것은 패러다임을 초월한다는 것입니다. 어떤 사람들은 Lisp가 기능적이라고 말하고 다른 사람들은 그것이 선언적이라고 말하고 다른 사람들은 그것이 다중 패러다임이라고 말할 것입니다. 나는 이것들 모두가 요점을 그리워한다고 생각합니다. Lisp를 사용할 때 패러다임은 더 이상 제약이되지 않습니다.

물건을 원하십니까? 당신은 그들을 가질 수 있습니다. 함수형 프로그래밍을 원하십니까? 넌 그것을 가질 수있어. 프롤로그 스타일 로직 프로그래밍을 원하십니까 ? 매크로를 작성하십시오. SQL 스타일 선언 프로그래밍을 원하십니까? 해봐 아직 발명되지 않은 패러다임을 사용하고 싶습니까? 나는 그것이 Lisp에서 할 수 있다고 확신합니다.

Forth 와 유사한 언어를 제외하고 는 아직 다른 언어가 이러한 수준의 유연성을 제공하는 것을 보지 못했습니다.


F1보다 수십 년 전에 +1 다중 패러다임 프로그래밍, 매우 좋은 지적.
Orbling

나는 이것을 10 번 공표 할 수 있으면 좋겠다. 숟가락이 없습니다 ... 패러다임이 없습니다 ... 그것은 일반적인 정확성에 대한 내 느낌을 매우 정확하게 설명합니다 :)
MadPhysicist

5

"Faster"는 측정하기 쉬운 것이 아니라 실제로 벤치마킹하는 측면에 따라 다릅니다. 작업과 Lisp 구현에 따라 속도는 C에 접근 할 수 있습니다 . 자세한 내용 은 Great Benchmarking Shoot-Out 을 참조하십시오. Lisp의 SBCL 구현은 Java 6 Server와 동등하며 Ruby 또는 Python보다 훨씬 빠릅니다.

그러나 순수한 속도가 프로그래밍 언어를 선택하는 주된 이유는 아닙니다. 만약 그렇다면, 우리는 여전히 어셈블리 언어 로 프로그래밍하고 있습니까? 저에게있어서 Lisp의 일상적인 기쁨은 코드가 컴파일되는 것이지만 응용 프로그램을 중단하고 모든 것을 다시 컴파일 한 다음 처음부터 다시 시작할 필요는 없습니다. 대신 단일 기능을 변경할 수 있으며 해당 변경 사항은 모든 곳에서 적용되며 응용 프로그램에서 즉시 효과를 볼 수 있습니다. 또한 매우 빠른 "쓰기, 테스트, 더 쓰기, 더 테스트"방법을 사용하면 코드를 작성하는 동안 즉시 테스트하기가 훨씬 쉬워집니다 (그런 다음 대화 형 프로브를 나중에 단위 테스트로 설정할 수 있습니다).

매 줄마다 버튼을 눌러 전자 메일 출력을 화면에 컴파일하여 생각을 계속 해야하는 곳에 전자 메일을 작성한다고 상상해보십시오. 그것이 Java 또는 다른 언어로 작성하는 것이 저에게 맞는 것입니다. 때로는 그렇게해야 할 이유가 있으며 Java를 좋아하지만 Lisp는 반응이 빠르고 작업을 수행하는 것이 더 쉽습니다.


오늘 신선하게 시작했다면 아마도 루비를 선택했을 것입니다. Lisp 특성의 많은 부분을 상속 받았지만 더 현대적인 라이브러리와 하나의 자비로운 독재자가 있습니다. 그러나 그것은 OP가 요구 한 질문이 아니었다.
Michael H.

나는 실제로 루비를 선택하여 시작했으며 이제는 newLisp를 배우려고합니다.
철학자

5

몇 가지 이유로 Lisp ( newLisp )를 배우고 있습니다.

이유 1 : Lisp은 다르게 생각하게하여 더 나은 Ruby 코더를 만듭니다.

Lisp에서 특정 방식으로 작업하는 것은 매우 어색한 것 같습니다 (예 : 여러 목록을 통과하는 중첩 반복). 그래서 그것은와 같은 다른 것들을 사용하도록 강요합니다 map. 내가 가장 좋아하는 언어 인 Ruby에는 같은지도 방법이 있지만 익숙하지 않기 때문에 항상 사용하는 것은 아닙니다. 열악한 기술을 사용하여 일을하는 법을 배웠고 언어가 그 기술을 지원할 때 계속 사용합니다.

두 번째 이유 : Lisp은 실용적이며 현대적인 라이브러리가 훌륭합니다.

dragonfly 라는 newLisp를위한 매우 훌륭하고 가벼운 웹 프레임 워크가 있습니다. 이를 통해 일부 작업에 PHP 대신 newLisp 코드를 사용할 수 있습니다. 나는 PHP를 정말로 좋아하지 않으며, newLisp는 Ruby 보다이 특정 작업에 더 재미있게 보입니다.

세 번째 이유 : Lisp는 구문 적으로 개념적으로 일관성이 있습니다.

나에게 이것은 루비와 파이썬의 일관성의 큰 차이입니다.


+1 : "입술은 문법적으로나 개념적으로 일관성이 있습니다." 이것은 언어의 매우 중요한 기능입니다. 잘못 설계된 일부 언어는 일관성이 결여되어 있으며, 순서대로 함께 모인 큰 관용구 모음과 같습니다. Lisp는 이와 관련하여 매우 일관됩니다. 시간이 있으면 바로 배우려고 노력할 것입니다.
Giorgio

4

"브랜드 충성도"라고 말할 수 있습니까?

나는 포트란에서 시작했다. 나는 그것을 좋아했다.

나는 Lisp로 전환했다. 처음에 나는 그것을 싫어했다. 그런 다음 나는 그것을 사랑하고 포트란을 싫어하는 법을 배웠습니다.

나중에 파스칼, C, C ++, 다양한 어셈블러, C #. (사실 저는 C #을 좋아하지 않습니다.)

내가 변덕스러운 것 같아?


4

Lisp가 만들어 졌을 때 컴퓨터 과학 (실제로는 존재하지 않았 음)이 아니라 수학에서 시작했습니다. 그리고 리스프 팀은 정말 옳았습니다. 리스프는 1960 년에 가비지 수집을했습니다! 그들은 정말로 훌륭한 일을했습니다.

나는 영원한 불꽃 노래가 그것을 덮고 있다고 생각합니다 .


그래도 Lisp는 최초의 GCed 언어였습니다.
Mark C

2

큰 추첨은 공동체입니다. Lisp는 언어가 발명 된 이래 가장 야심 차고 밝은 개발자를 끌어 모았습니다. 연구원들이 해결되지 않은 문제를 해결하려고 시도하는 곳이라면 인공 지능 (AI) 연구, 컴퓨터 비전, 계획, 지식 표현 및 복잡한 휴리스틱 최적화에서와 같이 Lisp를 찾을 수 있습니다. 이 언어는 맨 아래에서 맨 아래로 동시에 문제를 해결하는 데 가장 적합하며 가장 어려운 문제에 직면하는 데 도움이됩니다.

매크로를 통한 확장 가능한 구문은 언어 정의를 확장 할 필요가 거의 없음을 의미합니다. 좀 더 제한된 언어로 언어 확장이 필요한 것은 대부분 Lisp를 사용하는 것입니다. 따라서 Lisp 프로그래머는 새로운 언어 표준없이 실제 속도 저하없이 새로 발명 된 언어 개념을 자유롭게 사용할 수 있습니다. 기본적으로 작은 확장으로 상용구 코드가 필요하지 않습니다. Prolog 스타일 통합과 같은 제어 흐름의 완전히 새로운 아이디어는 확장으로 효율적이고 간결하게 구현됩니다.

OOP 시스템 인 CLOS 는 유연성 측면에서 고유 한 등급입니다. 맛을 본 후에는 초보적인 C ++ / Java / C # OOP로 돌아 가기가 매우 어렵습니다. GoF  5 디자인 패턴은 간단하고 직접 표현 될 수 있으므로 불필요 해집니다.

이 언어에는 단일 회사 소유주와 단일 확정 구현이 없었지만 많은 적합한 구현 이 포함 된 ANSI 표준이 있습니다. 주요 구현은 매 10 년마다 이루어지고 이전 구현은 여전히 ​​활발합니다. 전문가들은 오랜 시간 동안 전문 지식을 활용할 계획입니다. 이것은 무정부주의 적 마찰과 공동체 파편화를 야기하지만, 카펫을 꺼낼 수없고 회사 나 프로젝트의 정치적 이유로 언어가 성 가실 수 없다는 것을 의미한다. 항상 다수의 상용 및 오픈 소스 구현이 진행되고 있습니다. 더 많은 성능에 중점을 둔 사람들은 가장 빠르고 자금이 많이 소요되는 명령형 언어 구현의 2 배 요소 내에서 정기적으로 벤치마킹합니다.

초기 Lisp 상용화의 Achilles 발 뒤꿈치는 언어의 유형 안전 기능과 그에 포함 된 고급 소프트웨어 개발 환경을 모두 수용 할 수있는 메모리 공간이며 그래픽을 포함한 전체 온라인 문서와 같은 놀라운 기능을 제공합니다. 64MB Symbolics Lisp Machine 은 8MB Sun 워크 스테이션에 비해 비용 측면에서 적합하지 않았습니다. 오늘날 RAM 가격이 하락하고 특히 주류 Java, C #, PHP 언어가 30 년 전에 비해 최소한으로 만 향상되었다는 점을 고려할 때 특히 Lisp 언어에 대한 관심이 큽니다.

현재 Python, Lua , Erlang , HaskellOCaml 과 같은 지능형 개발자와의 마인드 공유를 위해 Lisp와 경쟁하는 현대 언어가 있습니다 . 그러나 동일한 성숙도, 적응성, 여러 표준 준수 구현 및 속도를 제공하는 것은 없습니다.


1

나는 실제로 Lisp을하지 않습니다. 그러나 내가 일하는 곳 은 주로 포트란의 수백만 줄의 유한 요소 를 수행합니다. 컴퓨팅 물건 (코드 계산 유체 역학 ) 에 대해 내가 가장 존중하는 사람 은 이상적인 조합이 외부의 Lisp (주로 메모리 관리와 관련된 지저분한 문제를 피하기 때문에)이고 낮은 수준의 알고리즘 (Fortran은 악용에 가장 적합 함)이라고 생각합니다 SSE / AVX 의 벡터 기능을 통해이 리드가 마무리되지 않을 것으로 예상됩니다.

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