LISP (및 Scheme, Common LISP 및 Clojure와 같은 방언)는 꽤 괜찮은 프로그래밍 언어이지만 많은 업계 지원을 얻지 못했습니다. (지금은 약간의 견인력을 얻는 것처럼 보입니다).
이제 이것은 질문과 직접 관련이 없습니다. 프로덕션 프로그램에 LISP 언어를 사용하는 것은 무엇입니까? 어떤 종류의 프로그램과 왜? 다른 코드 (예 : C)에 통합 된 종류의 사용법도 포함되어 있지만 답에서 의미하는 바입니다. 광범위한 개념이 선호되지만 특정 응용 프로그램에도 문제가 없습니다.
답변
프로덕션 프로그램에 LISP 언어를 사용 하시겠습니까?
전혀
어떤 종류의 프로그램과 왜?
Lisp는 범용 동적 언어입니다. 오늘날에는 Microsoft에서 게시하지 않은 다른 범용 동적 언어와 동일한 기본 어려움이 있습니다. 기본 스레드, GUI 통합, GC의 결정적인 작동 및 작은 메모리 공간.
네이티브 스레드는 LispWorks와 SBCL에 의해 달성됩니다. 아마도 다른 사람들? 나는 완전히 조사하지 않았다.
상용 제품인 LispWorks 및 Franz Common Lisp는 GUI에 통합되어 성공합니다. $$를 사지 않아도 제대로 작동하는지 모르겠습니다. 나는 그들이 잘 작동하는 것 같아요 …
결정적 GC 작업은 (는 성공의 어떤 수준으로 자바로 이루어집니다) 할 수 있지만, 나는 기존의 리스프 시스템 (유지 것들) 그 작업을 수행하는 코드가 있다면 모른다.
내가 생각하는 작은 메모리 공간은 일부 Lisp에 의해 달성됩니다.
저의 기본 요점은 Common Lisp가 기술적으로 생산 시스템을 만들 준비가되어 있다는 것입니다. 그리고 그렇습니다 .
대부분의 개발자는 동적 언어, 매크로, 괄호, 선호하는 IDE 부족, 대학에서의 나쁜 경험, 많은 직업이 없음, 그리고 사용하지 않는 것에 놀라게됩니다.
개인적으로 팀 환경에서 Common Lisp의 본격적인 생산 시스템을 구축하는 데 뛰어 들었습니다.
편집 : 나는 다른 언어와 달리 왜 Lisp을 사용했는지 대답하지 않았습니다.
내 Lisp 경험에서-중요하지는 않지만 ‘hello world’보다 훨씬 더-나는 처음 “Argh new language”고통 후에 언어를 매우 유용하게 사용할 수 있음을 발견했습니다. 대부분의 언어는 다른 언어가 실제로 작동하지 않는 매우 규칙적이고 명백한 방식으로 함께 사용됩니다. 이것의 일부는 표현과 진술의 병합입니다. 이것의 일부는 핵심 목록 데이터 유형입니다. 이것의 일부는 타입 시스템입니다. 이것의 일부는 매크로 시스템입니다. 날 오해하지 마세요,하지만, 거기에 있는 고통을 가리 킵니다. 그러나 그들은 다른 언어의 어려움만큼이나 나를 쫓아 내지 않습니다.
간단한 예 중 하나는 파이썬의 길이 목록 루틴입니다. 파이썬 접근법은을 호출하는 것 len(mysequence)
입니다. 그러나 우리가 생각하면 길이는 시퀀스의 속성입니다. 따라서 mysequence.len()
더 적절한 아이디어입니다. 리스프는 본질적으로 그 구문 구분을 제거합니다. (length thing)
함수 호출 구문과 메소드 구문입니다. 물론 어떤 사람들은 그 좌절감을 느끼고 구문상의 차이를 원합니다. 오히려 규칙 성을 갖고 싶습니다.
edit2 : 데스크탑에서 실행되는 MS 논문의 일부를 Common Lisp로 변환했으며 지금까지 함께 일하게되어 기뻤습니다.
답변
나는 개인적으로 런던의 두 투자 은행과 신생 기업에서 Clojure 형태의 Lisp를 사용하는 사람들을 알고 있습니다. 또한 Clojure를 제 자신의 스타트 업을위한 주요 개발 언어로 선택했습니다. 그래서 저는 입가에 돈을 넣겠습니다 🙂
지난 1 년 동안 (Java 및 C #에 대한 많은 경험을 쌓은 후) Clojure를 배우는 것이 매우 계몽적인 경험이라는 것을 알았습니다. 이에 대한 주요 이유는 다음과 같습니다.
- 함수형 프로그래밍에 중점을두고 있습니다 (대부분의 다른 Lisp보다 더 중요합니다). 저자와 BDFL Rich Hickey는 Haskell을 언어 디자인에 대한 영감 중 하나로 자주 인용했습니다. 이는 완전히 불변의 데이터 구조 및 게으른 무한 시퀀스 등을 얻는다는 의미입니다.
- 매크로 메타 프로그래밍-Lisp “코드는 데이터”라는 철학은 실제로 경험하지 않는 한 이해하기 어렵지만 Lisp가 표현력이 풍부하고 생산적인 이유 중 하나입니다. 기본적으로 문제 영역에 맞게 언어를 확장 할 수 있습니다.
- 멀티 코어 동시성에 대한 환상적인 지원 -Clojure는 현재 동시 프로그래밍에 가장 적합한 언어 라고 생각 합니다. 이에 대한 깨달음 표현은 http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey 를 참조하십시오 .
- REPL의 대화식 개발은 응용 프로그램을 작성하는 훌륭하고 생산적인 방법입니다. 실행중인 응용 프로그램 코드를 동적으로 수정하고 라이브 데이터 구조를 프로그래밍 방식으로 검사 할 수있는 진정한 힘을줍니다 …..
또한 다음과 같은 이유로 실제 프로덕션 용도로 실용적인 선택 인 것 같습니다.
- 매우 쉬운 Java 상호 운용성으로 JVM에서 실행하면 Java 생태계의 모든 라이브러리 및 도구에 액세스 할 수 있습니다.
- 엔터프라이즈 응용 프로그램을위한 검증 된 플랫폼 인 JVM에서 실행 중입니다 . Clojure는 뛰어난 GC 및 JIT 컴파일과 같은 모든 훌륭한 JVM 기능을 무료로 제공합니다.
- 그것은의 동적 언어 거의 상용구와 개발 및 신속한 프로토 타이핑하기에 매우 편리합니다 기본적으로. 그러나 정적 유형 힌트를 추가하여 필요한 곳에서 꽤 좋은 성능을 얻을 수 있습니다.
- 그것은의 실용적이고 도움이되는 사회 – 사람들이 일을 끝낼 문화의 종류 및 초점은 실제 문제를 해결하는 잘 설계된 솔루션이다
- 여러 IDE에서 도구 지원 이 있습니다 . 개인적으로 Eclipse를 반 시계 방향 플러그인으로 사용하지만 (Java 통합이 필요하기 때문에) 다른 많은 옵션이 있습니다.
답변
LISP가 최선의 선택 이었다면 LISP를 사용할 것입니다. “최선의 선택”에 영향을 미치는 몇 가지 사항 :
- 공급 업체 지원. 우리가 사용하는 LISP 구현-문제가 발생하여 개발 및 마감일을 방해하는 경우 공급 업체가 우리와 함께 솔루션을 위해 노력할 것입니까?
- 도서관 지원. 어떤 도서관이 있습니까? 문자열 조작, 수학, 데이터 액세스, 웹 서블릿 (또는 LISP 등가물), 윈도우 툴킷 등 …이 내용을 처음부터 작성하고 싶지 않습니다.
- 툴 지원-IDE가 얼마나 좋은가요? 단단하거나 안정적입니까? 훌륭한 에디터 지원? 통합 디버거? LISP에서 GUI dev를 수행 해야하는 경우 시각적 IDE가 있거나 GUI 레이아웃을 직접 코딩해야합니다 (그것을 싫어 합니다).
- 개발자 구매 (팀원들에게 완전히 새로운 언어를 가르치는 데 너무 많은 시간을 소비하고 싶지는 않습니다)
LISP가 프로젝트에 적합한 지 결정할 때 이러한 모든 요소를 고려해야합니다. 기업 세계에서 나는 그것을 경험 한 적이 없다.
답변
전혀. Paul Graham 이 잘 설명합니다 .
… 1995 년에 우리는 경쟁 업체가 이해하지 못하고 지금도 거의 이해하지 못하는 것을 알고있었습니다. 자신의 서버에서만 실행되는 소프트웨어를 작성할 때 원하는 언어를 사용할 수 있습니다. ..
우리는 Lisp를 선택했습니다. 우선,이 시장에서 빠른 개발이 중요하다는 것이 명백했습니다. 우리는 모두 처음부터 시작 했으므로 경쟁 업체보다 먼저 새로운 기능을 수행 할 수있는 회사는 큰 이점을 갖습니다. 우리는 Lisp가 소프트웨어를 신속하게 작성하기에 정말 좋은 언어라는 것을 알고 있었고 서버 기반 응용 프로그램은 소프트웨어 개발이 완료되는 순간 소프트웨어를 출시 할 수 있기 때문에 빠른 개발의 효과를 확대했습니다.
다른 회사가 Lisp를 사용하고 싶지 않다면 훨씬 좋습니다. 그것은 우리에게 기술적 우위를 줄 수 있으며, 우리가 얻을 수있는 모든 도움이 필요했습니다 …
Lisp를 사용하는 것이 실험이라고 말할 수 있습니다. 우리의 가설은 Lisp에서 소프트웨어를 작성하면 경쟁 업체보다 더 빠르게 기능을 수행 할 수있을뿐만 아니라 소프트웨어에서 할 수 없었던 작업을 수행 할 수 있다는 것입니다. 그리고 Lisp는 수준이 높기 때문에 대규모 개발 팀이 필요하지 않으므로 비용이 절감됩니다. 만약 그렇다면, 우리는 적은 돈으로 더 나은 제품을 제공 할 수 있으며 여전히 이익을 얻을 수 있습니다. 결국 모든 사용자를 확보하게되고 경쟁 업체는이를 얻지 못하게되고 결국에는 비즈니스를 중단하게됩니다. 어쨌든 그것은 우리가 희망했던 것입니다.
이 실험의 결과는 무엇입니까? 다소 놀랍게도 효과가있었습니다. 우리는 결국 20에서 30의 순서로 많은 경쟁자가 있었지만 그들의 소프트웨어는 우리와 경쟁 할 수 없었습니다. 우리는 wysiwyg 온라인 상점 빌더를 서버에서 실행했지만 데스크탑 애플리케이션처럼 느꼈습니다. 우리 경쟁자들에게는 cgi 스크립트가있었습니다. 그리고 우리는 항상 기능면에서 그것들보다 훨씬 앞서있었습니다. 때때로, 필사자들은 경쟁자들이 우리가 갖지 못한 기능들을 소개하려고 할 때가 있습니다. 그러나 Lisp를 사용하면 개발주기가 너무 빨라서 보도 자료에 발표 한 경쟁 업체 중 하루나 이틀 안에 새로운 기능을 복제 할 수있었습니다. 보도 자료를 다루는 언론인들이 우리에게 전화 할 때까지 우리는 새로운 기능을 갖게 될 것입니다.
우리는 경쟁사들에게 우리가 일종의 비밀 무기를 가지고있는 것처럼 보였을 것입니다. 사실 우리는 비밀 무기를 가지고 있었지만 그들이 생각했던 것보다 더 간단했습니다. 아무도 그들의 기능에 대한 뉴스를 우리에게 누설하지 않았습니다. 우리는 생각했던 것보다 소프트웨어를 더 빨리 개발할 수있었습니다 …
답변
어디에 : Emacs는 LISP를 사용하는 실제 응용 프로그램입니다.
이유 : 키 입력과 동작 간의 매핑을 표현하는 가장 좋은 방법이었습니다. 해석되고 빠르며 잘 정의되어 있으며 간단합니다.