LISP ยังมีประโยชน์ในโลกปัจจุบันหรือไม่? เวอร์ชันใดที่ใช้มากที่สุด


117

ฉันพยายามสอนภาษาโปรแกรมใหม่ในช่วงเวลาปกติ เมื่อเร็ว ๆ นี้ฉันได้อ่าน Lisp และภาษาถิ่นของมันอยู่ตรงข้ามกับสเปกตรัมจากภาษาอย่าง C / C ++ ซึ่งทำให้ฉันอยากรู้มากขึ้นเกี่ยวกับเรื่องนี้ อย่างไรก็ตามมีสองสิ่งที่ไม่ชัดเจนสำหรับฉันและฉันกำลังมองหาแนวทางสำหรับพวกเขา:

  1. LISP ยังคงฝึกฝน / ใช้ในโลกปัจจุบันหรือว่าเป็นภาษาดั้งเดิมเช่น FORTRAN / COBOL ฉันหมายถึงนอกเหนือจากการบำรุงรักษาโค้ดที่มีอยู่แล้วมันใช้กับโครงการใหม่หรือไม่?

  2. ภาษาที่ใช้กันมากที่สุดคืออะไร? ฉันได้พบกับ Scheme และ Common LISP ในฐานะภาษากลางที่แพร่หลายมากที่สุดสองภาษาและต้องการความคิดเห็นของคุณว่าสิ่งใดเป็นสิ่งที่เป็นที่นิยม / มีประโยชน์มากที่สุดในการเรียนรู้และจะทำให้คุณพอใจมากหากคุณสามารถแนะนำทรัพยากร

ในขณะที่กระตือรือร้นที่จะเรียนรู้ภาษาที่แตกต่างจากภาษาขั้นตอนที่ฉันคุ้นเคย แต่ฉันไม่ต้องการที่จะลงทุนในความพยายามที่ไม่เหมาะสมในบางสิ่งถ้ามันล้าสมัยไปหมด - ฉันยังคงเรียนรู้ว่ามันเป็น "มืออาชีพ" แต่มีมุมมองทางวิชาการเท่านั้น


10
ฉันสนใจคำถามนี้มาก ทุกครั้งที่ฉันมีเวลาฉันตัดสินใจที่จะเรียนรู้ LISP และทุกครั้งที่ฉันถูกขัดขวางด้วยคำถามและความไม่แน่นอนแบบเดียวกันกับที่คุณถามเกี่ยวกับที่นี่ ฉันควรเรียนรู้ Lisp เวอร์ชันใด ใครบ้าง (นอกเหนือจาก Paul Graham) ใช้ Lisp จริงๆหรือไม่ ฉันควรเรียนรู้ Lisp หรือหนึ่งในภาษาการเขียนโปรแกรมที่ใช้งานได้ใหม่กว่าอย่าง Haskell หรือไม่? ประโยชน์ของ Lisp over Scheme ฯลฯ เป็นอย่างไร
Channel72

3
หลักสูตร Scheme / Lisp ของ MIT: ocw.mit.edu/courses/electrical-engineering-and-computer-science/
Joe Internet

เสียงกระเพื่อมสามัญ: gigamonkeys.com/book
Joe Internet

"ยังคง"? (ฉันตลก!)
jhocking

ฉันเพิ่งพบอื่น ๆ นี้เกี่ยวข้องกับหัวข้อใน SO: stackoverflow.com/q/1614724/212942
TCSGrad

คำตอบ:


59

ฉันชอบ Scheme หากคุณต้องการทำงานกับ JVM คุณควรตรวจสอบ Clojure ซึ่งเป็นเสียงกระเพื่อมที่ออกแบบมาเพื่อทำงานใน JVM และใช่เสียงกระเพื่อมยังคงคุ้มค่าการเรียนรู้เพื่อดูว่ามีประสิทธิภาพเช่นการออกแบบน้อยที่สุดสามารถ! คนที่สร้างเสียงกระเพื่อมมีบางสิ่งที่ถูกต้องจริงๆ มันน่าอัศจรรย์ว่ามีคุณสมบัติใหม่ ๆ ที่ยอดเยี่ยมของภาษาสมัยใหม่ที่มีอยู่ในทศวรรษ 1960!

สำหรับรูปแบบการฝังให้ลองใช้ guile: http://www.gnu.org/s/guile/


มีภาษาถิ่นที่ใช้งานได้ดีกับ C / C ++ สำหรับฉันเป็นคน C ++ เป็นหลักใช่ไหม คุณยังสามารถพูดถึงแหล่งข้อมูลสำหรับผู้เริ่มต้นอันดับด้วยเพื่อเริ่มเรียนรู้ภาษาถิ่นนั้นได้หรือไม่?
TCSGrad

10
หนังสือที่ดีที่สุดในการเรียนรู้รูปแบบคือ "The Little อุบาย" และ "SICP" mitpress.mit.edu/sicp มีการปรับใช้รูปแบบจำนวนมากที่สามารถฝังอยู่ใน c / c ++ ได้ แต่ฉันไม่รู้จริงๆว่าวันนี้เป็นวันไหนดีดังนั้นคุณอาจต้องทำ googling บ้าง
Zachary K

1
ฉันควรชี้ให้เห็นว่ารูปแบบนั้นง่ายมาก! คุณจะได้เรียนรู้ประมาณ 90% ของภาษาใน 2 ชั่วโมง แน่นอนว่าไม่ได้หมายความว่าคุณจะมีความเชี่ยวชาญเพียงแค่คุณจะรู้ว่าไวยากรณ์ทำงานอย่างไร
Zachary K

5
@ shan23 Scheme ออกแบบมาเพื่อการสอน ไม่ต้องสงสัยเลยว่ามันจะถูกใช้เพื่อสอนน้องใหม่ถึงวิธีการเขียนโปรแกรมดังนั้นฉันไม่สงสัยเลยว่าคุณจะไม่มีปัญหาในการเรียนรู้ หากคุณต้องการการรวม C หรือ C ++ ให้ดูที่ Guile ( en.wikipedia.org/wiki/GNU_Guile )
Vitor Py

1
หนังสือภาษาการเขียนโปรแกรม Scheme ของ Kent Dybvig อาจจะไม่ได้มีชื่อเสียง แต่เป็นหนังสือที่ดีมาก scheme.com/tspl4 หากคุณใช้ Emacs การเรียนรู้ Lisp บางอย่างนั้นมีประโยชน์
blispr

68

ในการตอบคำถาม 2 "ภาษาที่ใช้กันอย่างแพร่หลาย":

ขึ้นอยู่กับว่าคุณตีความ "ใช้กันอย่างแพร่หลายมากที่สุด" อย่างไร นี่คือคณิตศาสตร์ผ้าเช็ดปากสำหรับขอบเขตที่ต่ำกว่าในการใช้ภาษาท้องถิ่นที่เลือกไม่กี่ตัว

รหัสดิบส่วนใหญ่เขียน

  • แผนการที่เป็นไปได้ (ทุกภาษา) เนื่องจากแอปพลิเคชัน การศึกษา
    • 270 โรงเรียน ... ลองเดา 50 คน / ปีรหัส 500 สาย / นักเรียนทำงาน 10 ปี 1,000,000+ บรรทัดขึ้นอยู่กับคณิตศาสตร์ผ้าเช็ดปาก
    • 500,000 แร็กเก็ตของแร็กเก็ตในแร็กเก็ตเองและเครื่องมือของมัน
  • Lisp สามัญอาจเป็นเพราะAIและรหัสโอเพนซอร์สและรหัสการผลิตจำนวนมาก (ดูรหัสการผลิต)
  • อาจเป็นไปได้ว่า Emacs Lisp เพราะ ...
    • Emacs เอง: มากกว่า 1,000,000 บรรทัด
    • จำนวน emacs lisp ที่เปิดเผยต่อสาธารณะ - 237 โมดูล, ประมาณ 200 บรรทัด / โมดูลคือ40,000+บรรทัดใน EmacsWiki ซึ่งน่าจะมากกว่า ELPA
    • บวกแอปพลิเคชันที่เขียนด้วย emacs Lisp, .emacs files เป็นต้น
  • Clojure
    • ประเมินยาก ส่วนใหญ่เป็นดอทคอม อาจจะมาก

ผู้ชนะ: โครงการหรือ Common LISP มีสิ่งแปลกปลอมมากเกินไป

รหัส 'การผลิต' ส่วนใหญ่

ผู้ชนะ: ฉันคาดเดาธรรมดาชัด ฉันคิดว่าเราสามารถตอบ "ใช่" สำหรับคำถามที่ 1 ตามการใช้ Common LISP และ Clojure

ผู้ใช้ส่วนใหญ่

  • เสียงกระเพื่อมสามัญ
    • ลูกค้าซอฟต์แวร์ของ ITA รวมถึง Orbitz, Bing Travel และ Kayak.com - อาจเป็นล้าน
  • Clojure
    • ซิตี้กรุ๊ป (ไม่มีรายละเอียด), Akamai (ไม่มีรายละเอียด), simple.com และอื่น ๆ อีกมากมาย อาจเป็นล้าน
  • โครงการ
    • นักเรียน CS นักวิจัยและมือสมัครเล่น น้อยกว่าหนึ่งพันล้าน
    • ซีรี่ส์ Uncharted - มากกว่า 5 ล้าน
  • Emacs Lisp - โปรแกรมเมอร์ส่วนใหญ่ส่วนใหญ่บนแพลตฟอร์มยูนิกซ์ อาจเป็นล้าน

ผู้ชนะ: โครงการมีขอบเขตที่ต่ำที่สุดที่นี่เนื่องจากมียอดขายใน Uncharted แต่ก็เป็นที่ถกเถียงกันมาก

ข้อสรุป

สรุปแล้วฉันพบว่าแอปเปิ้ลตัวใหญ่


4
ไม่ใช่ส้มขนาดเล็ก? หรือมะนาวมะนาว
Vatine

โครงการจริง - โครงการแร็กเกต especailly - น่าจะเป็นภาษาที่ทันสมัยที่สุด เครื่องมือและไลบรารีระดับมืออาชีพ
Bikal Lem

ฉัน @Bikal ต้องการสนับสนุน OpenGL ไม่ได้ลงวันที่เป็นเช่นนั้น แต่แล้วโหมดโดยตรงไม่ได้เป็นความผิดพลาดที่ใหญ่ที่สุดของรหัสแร็กเกตของฉัน ...
เจส Millikan

ไม่มีความคิดว่า Orbitz ใช้ CL ... ฉันรู้ว่าจะหางานต่อไปของฉัน: D
Rig

2
มีการเขียน LOC มากกว่า 100k ใน Racket ไลบรารี / IDE / เครื่องมือมาตรฐานของ Racket นั้นมีมากกว่า 500k และมีการใช้งานใน บริษัท ต่างๆเช่น SET, Boeing และ Naughty Dog
Sam Tobin-Hochstadt

43

LISP ยังคงฝึกฝน / ใช้ในโลกปัจจุบันหรือเป็นภาษาดั้งเดิม

ใช่มันเป็น แต่คุณต้องรู้ว่าจะดู คนที่ใช้ LISP มักจะไม่ตะโกนดังเกินไป แต่มีตัวอย่างจำนวนหนึ่งของ startups ที่มีชื่อเสียงจำนวนมากที่ใช้มันเพื่อผลที่ดีในช่วง 20 ปีที่ผ่านมา นอกจากนี้ยังเป็นที่นิยมใน บริษัท ขนาดเล็กในยุโรป

ภาษาที่ใช้กันมากที่สุดคืออะไร?

นี่เป็นคำถามที่ถูกต้อง แต่ไม่ใช่คำตอบที่ง่าย มันอาจจะไม่ใช่คำตอบที่มีประโยชน์โดยเฉพาะอย่างยิ่ง: การใช้งานจำนวนมากมีการมุ่งเน้นเฉพาะดังนั้นจะเลือกที่ดีที่สุดหากพวกเขาเหมาะสมกับปัญหาเฉพาะของคุณมากกว่าตามการใช้งานอย่างกว้างขวาง ฉันจะบอกคุณเล็กน้อยเกี่ยวกับตัวเลือกของคุณและคุณสามารถตัดสินใจได้ด้วยตัวเอง

LISP เป็นตระกูลของภาษาและแต่ละภาษาเหล่านั้นมีตระกูลของภาษาถิ่นและการใช้งาน ภาษาถิ่นกว้างตกอยู่ในสองค่าย "LISPs" และ "Schemes"

LISP: จนกระทั่งเมื่อไม่นานมานี้ LISP ทั่วไปเป็นราชา มันเป็นความพยายามที่จะรวม LISP ที่ต่างกันทั้งหมดและโดยปราศจากความเมตตาเป็น "C ++" ของ LISP กล่าวคือมันเป็นภาษาที่ยิ่งใหญ่ มันมีทุกอย่าง ในช่วงไม่กี่ปีที่ผ่านมา Clojure ปรากฏตัวขึ้น Clojure เป็น LISP ที่ทำงานบน Java Virtual Machine และพยายามที่จะรูทตัวเองในปรัชญาการเขียนโปรแกรมการทำงาน ตามเนื้อผ้า LISP อื่น ๆ เป็นกระบวนทัศน์หลายอย่างเคร่งครัด Clojure น่าสนใจเพราะมันได้ทั้งดีที่สุดและแย่ที่สุดของ LISP และ JVM ยังคงมีความละเอียดมากมายของภาษาที่ใช้ Java และพวกเขาได้ฟรีและค่อนข้างง่ายด้วยไวยากรณ์เพื่อให้มี knobs และปุ่มมากมายสำหรับสิ่งที่แตกต่างกัน แต่พวกเขามีบางอย่างจริงๆแนวคิดที่น่าสนใจเกี่ยวกับประเภทข้อมูลโดยเฉพาะอย่างยิ่งวิธีการปฏิบัติที่พวกเขาคิดขึ้นมาเพื่อประยุกต์ใช้แนวคิดจากการเขียนโปรแกรมเชิงหน้าที่

แบบแผน: แบบแผนเป็นส่วนย่อยที่เข้มงวดของ LISP Scheme ถูกคิดค้นโดย Steele และ Sussman และในวัยเด็กมีความโดดเด่นในการใช้ใน MIT Computing 101 Lecture Course โครงการถูกกำหนดใน "แก้ไข ^ n รายงานเกี่ยวกับโครงการภาษาอัลกอริทึม (RnRS)" ใช่: พวกเขามีคณิตศาสตร์ตลกอยู่ที่นั่น Scheme เป็นภาษาที่ได้มาตรฐานในแบบที่ LISP อื่นไม่ใช่ สิ่งนี้ช่วยได้อย่างมากกับการพกพาระหว่างการนำไปใช้งาน แต่มันไม่ใช่ bullet เงิน ความพยายามในการสร้างมาตรฐานมีแนวโน้มที่จะอนุรักษ์นิยมและมีนวัตกรรมในการใช้งานโดยเฉพาะอย่างยิ่งสิ่งต่าง ๆ เช่นโมดูลมีแนวโน้มที่จะแตกต่างกัน นอกจากนี้ยังมีชุด SRFIs (Scheme Requests For Implementation) ซึ่งคล้ายกับกระบวนการ RFC ของ IETF ผู้คนใช้มันเพื่อสร้างมาตรฐานของสิ่งเล็ก ๆ น้อย ๆ ตามต้องการ

แบบแผนแตกต่างจาก LISP ที่พวกเขามีชุดของข้อกำหนดที่ยากที่พวกเขาต้องพึงพอใจซึ่งหนึ่งในนั้นคือ "การเพิ่มประสิทธิภาพการโทรหาง" ซึ่งจะช่วยให้การเรียกซ้ำมีประสิทธิภาพ ดังนั้นรูปแบบการเขียนโปรแกรมแบบเรียกซ้ำจึงเป็นที่นิยมใน Scheme มากกว่า LISP โครงการคือยังไม่มีความเมตตาเช่น "C" ของ LISP กล่าวคือเป็นภาษาเล็ก ๆ และคุณควรจะเก็บมันไว้ในหัวของคุณทันที

ปัจจุบันมีครอบครัวโครงการสองครอบครัว: ครอบครัวที่มีพื้นฐานมาจากรุ่นที่ 5 (R5RS) และครอบครัวที่อยู่ในรุ่นที่ 6 (R6RS) ความซับซ้อนของ R6RS นั้นยิ่งใหญ่กว่ารุ่นก่อน ๆ และการใช้งาน R5RS จำนวนมากเลือกที่จะข้ามมันไปหวังว่า R7RS จะคล้ายกับ R5RS มากกว่า R6RS กระบวนการกำหนดมาตรฐาน R7RS กำลังดำเนินการอย่างต่อเนื่องและได้พยายามรวมความต้องการของผู้ใช้งาน R5RS รวมถึงความต้องการของผู้ใช้ R6RS โดยสร้างมาตรฐานภาษาฐานขนาดเล็กในคณะทำงานชุดแรกจากนั้นมอบหมายคณะทำงานชุดที่สอง สิ่งนี้จะช่วยให้ภาษามีการใช้งานที่มีประสิทธิภาพและมีประโยชน์บนฮาร์ดแวร์ฝังตัวเล็ก ๆ รวมทั้งเครื่องจักรที่มีความสามารถมากขึ้น

ตอนนี้ฉันจะเฉพาะเจาะจงมากขึ้น:

PicoLisp เป็น LISP ที่ยอดเยี่ยมจริงๆ มันเล็กมาก! ผู้เขียนเขียนมันเพื่อตัวเองและอย่างที่ฉันเข้าใจเขาก็ทำมาหากินตั้งแต่ปี 1980 หากคุณเคยได้รับโอกาสเข้าร่วมพูดคุยจากเขาคุณควรทำ: เขาน่าสนใจจริงๆและรู้จักสิ่งของของเขามากและคุณจะไม่ได้สูดดมสิ่งที่สำคัญหรือน่าเบื่อแม้แต่น้อยที่สุด

ฉันไม่คุ้นเคยกับการใช้งาน Common LISP ดังนั้นฉันจะไม่แสดงความคิดเห็นเพิ่มเติมกับพวกเขา

Guile เป็นโครงการ GNU อย่างเป็นทางการ

แร็กเก็ตเป็นรูปแบบของ R6RS แต่เมื่อเร็ว ๆ นี้ดูเหมือนว่ามันจะขยายเครือข่ายและพยายามที่จะ "ทำหน้าที่เป็นแพลตฟอร์มสำหรับการสร้างภาษาการออกแบบและการใช้งาน"

ไก่มุ่งมั่นที่จะเป็นโครงการปฏิบัติ มันขึ้นอยู่กับ R5RS และคอมไพล์ลงไปที่ C สิ่งนี้กลายเป็นข้อได้เปรียบที่สำคัญจริงๆและสำคัญมากเพราะมันทำให้การใช้ไลบรารี่ C มีอยู่จริง ๆ ดังนั้น Chicken น่าจะเป็นโครงร่างที่มีประโยชน์ที่สุดสำหรับการแทนที่ Perl, Python, Ruby และอื่น ๆ เป็นภาษาสคริปต์ประจำวันของคุณ มีหลายคนที่ใช้มันเพื่อความต้องการของพวกเขาทั้งหมดเป็นเวลาหลายปี มันมี REPL เชิงโต้ตอบเช่นเดียวกับคอมไพเลอร์ ชุมชน (ทั้งในรายชื่อผู้รับจดหมายและ IRC) มีความรู้เป็นมิตรและเป็นประโยชน์

ค้นหาการนำไปใช้งานด้วยโมดูลจำนวนมาก: นี่แสดงให้เห็นว่าสามารถใช้งานได้อย่างกว้างขวางและหมายความว่ามีแนวโน้มที่จะมีบางอย่างที่ช่วยให้ทำงานได้

ค้นหาการนำไปปฏิบัติด้วยคอมไพเลอร์หรืออย่างน้อยที่สุดสิ่งที่ไม่ได้ใช้ IDE หรือ REPL อย่างเคร่งครัด การใช้งานจำนวนมากที่ออกแบบมาสำหรับการสอนนั้นยากมากที่จะใช้สำหรับการเขียนสคริปต์วัตถุประสงค์ทั่วไป

ฉันขอแนะนำไก่เพราะนั่นคือสิ่งที่ฉันใช้ ฉันใช้มันในโครงการส่วนตัวของฉันและฉันใช้มัน (และกำลังใช้งานอยู่) อย่างมืออาชีพ

ฉันไม่ต้องการลงทุนความพยายามเกินควรในบางสิ่งถ้ามันล้าสมัยไปหมด - ฉันยังคงเรียนรู้ว่ามันเป็น "ความตาย" อย่างมืออาชีพ แต่มีมุมมองทางวิชาการเท่านั้น ...

โครงการไม่ได้ตายอย่างมืออาชีพ แต่คุณอาจต้องใช้ความยาวพอสมควรเพื่อใช้ในบริบทนั้น สิ่งที่คล้ายกับไก่เป็นมากกว่าการแสวงหาความรู้ทางวิชาการและสามารถครอบคลุมพื้นฐานเกือบทั้งหมดของภาษาระดับสูงที่คุณใช้อยู่ในปัจจุบัน


3
แร็กเก็ตไม่ใช่ R6RS Scheme มีหนึ่งในภาษาที่มีการแจกจ่ายแร็กเก็ต ภาษาแร็กเก็ตที่เกิดขึ้นจริงเป็นโครงการที่แยกย้ายจาก RnRS ในหลายวิธีที่สำคัญ (ที่ฉันมีความรู้สึกผสม)
JasonFruit

27

พูดภาษาโปรตุเกสไม่ได้สำหรับทุกคน แต่ Clojure เป็นภาษาที่นิยมและเกี่ยวข้องในปัจจุบัน กลุ่มผู้ใช้งาน Clojure ในลอนดอนที่ฉันไปเมื่อต้นสัปดาห์นี้มีผู้เข้าร่วมประชุมมากกว่า 100 คน ....

ฉันพบว่ามันเป็นประสบการณ์ที่แจ่มใสมากในการเรียนรู้ Lisp ในรูปแบบของ Clojure ในปีที่ผ่านมา (หลังจากมีประสบการณ์มากมายกับ Java และ C #) สาเหตุหลักคือ:

  • มันค่อนข้างให้ความสำคัญกับการเขียนโปรแกรมการทำงาน (มากกว่า Lisps อื่น ๆ ส่วนใหญ่) ผู้เขียนและ BDFL Rich Hickey ได้อ้างถึง Haskell บ่อยครั้งว่าเป็นหนึ่งในแรงบันดาลใจของเขาในการออกแบบภาษาซึ่งหมายความว่าคุณจะได้รับสิ่งต่าง ๆ เช่นโครงสร้างข้อมูลที่เปลี่ยนแปลงไม่ได้และลำดับที่ไม่มีที่สิ้นสุดเป็นต้น
  • Macro metaprogramming - Lisp "code is data" ปรัชญานั้นยากที่จะเข้าใจเว้นแต่คุณจะได้รับประสบการณ์จริง แต่เป็นหนึ่งในเหตุผลที่ Lisps แสดงออกและมีประสิทธิผล
  • การสนับสนุนที่ยอดเยี่ยมสำหรับการทำงานพร้อมกันแบบมัลติคอร์ - ฉันคิดว่า Clojure เป็นภาษาที่ดีที่สุดสำหรับการเขียนโปรแกรมพร้อมกันในตอนนี้ ดูhttp://www.infoq.com/presentations/Value-Identity-State-Rich-Hickeyสำหรับการนำเสนอที่น่าสนใจเกี่ยวกับสิ่งนี้

ดูเหมือนว่าจะเป็นทางเลือกที่ใช้ได้จริงสำหรับการใช้งานจริงด้วยเหตุผลดังต่อไปนี้:

  • การทำงานบน JVM ด้วย Java interoperabilitiy ที่ง่ายมากช่วยให้คุณเข้าถึงไลบรารีและเครื่องมือทั้งหมดในระบบนิเวศ Java
  • มันเป็นภาษาแบบไดนามิกโดยค่าเริ่มต้นซึ่งทำให้สะดวกในการพัฒนาและสร้างต้นแบบอย่างรวดเร็วด้วยแทบทุกแผ่น อย่างไรก็ตามคุณสามารถเพิ่มคำใบ้แบบคงที่เพื่อให้ได้ประสิทธิภาพที่ดีตามที่คุณต้องการ

โดยส่วนตัวฉันรู้จักคนที่ใช้ Clojure ในธนาคารเพื่อการลงทุนและ บริษัท สตาร์ทอัพสองแห่ง ฉันยังได้เลือก Clojure เป็นภาษาพัฒนาหลักสำหรับการเริ่มต้นของฉันเองดังนั้นฉันยินดีที่จะนำเงินของฉันไปที่ :-)


9

ฉันกำลังเรียนรู้เสียงกระเพื่อมเช่นกัน (และฉันรักมัน) ฉันใช้ Common LISP แต่ฉันก็ยังยุ่งกับSBCL , Arc (หมายเหตุนั่นคือ Lisp รุ่นของ Paul Graham ที่ดังกล่าวโดย Vitor Braga สร้าง Yahoo store / Viaweb) และAllegro CLซึ่งคล้ายกับ Visual Studio for Lisp (สามารถ สร้าง GUIs แต่ฉันไม่เคยใช้เลย)

สำหรับการใช้งาน Lisp นั้นถูกนำมาใช้อย่างมากในปัญญาประดิษฐ์ แต่ฉันจะซื่อสัตย์ฉันไม่แน่ใจว่ามีการใช้ "ทั่วไป" อื่น ๆ อีกมากมายสำหรับ Lisp เว็บไซต์จำนวนมากที่ถูกสร้างขึ้นใน Lisp เดิมนั้นถูกเขียนขึ้นใหม่ในภาษาอื่น ๆ ดังนั้นจึงเป็นการยากที่จะพูดว่ามันถูกใช้ในการพัฒนาเว็บไซต์ (ไม่ได้บอกว่ามันไม่ใช่ แต่เว็บไซต์ขนาดใหญ่ที่ใช้มันแล้ว ) หลังจากทำการค้นหาอย่างรวดเร็ว (เร็วมาก) นี่คือรายการของซอฟแวร์ที่เขียนใน Common เสียงกระเพื่อมจากวิกิพีเดีย

[แก้ไข] สำหรับการใช้เสียงกระเพื่อมอย่างมืออาชีพมีงานออกมีที่คุณจะต้องใช้เสียงกระเพื่อม พวกเขามีจำนวนไม่มากเช่นงาน Java หรือ C # แต่มีอยู่จริง ฉันคิดว่า Lisp เป็นหนึ่งในภาษาเหล่านั้นที่ใช้สำหรับแอปพลิเคชันภายในและอาจมอบความได้เปรียบในการแข่งขันซึ่ง บริษัท ต่างๆไม่ต้องการยอมแพ้โดยการโฆษณาที่พวกเขาใช้ Lisp ฉันจำได้ว่าเห็นโพสต์ใน P.SE ที่ระบุว่า Smalltalk นั้นคล้ายกันในเวทีการเงิน

นอกจากนี้การแสดงให้เห็นว่าคุณสามารถเรียนรู้กระบวนทัศน์ที่แตกต่างกันสามารถเปิดประตูได้มากขึ้นแม้ว่าคุณจะไม่ได้ใช้เสียงกระเพื่อมในงาน

"เสียงกระเพื่อมมีค่าการเรียนรู้สำหรับประสบการณ์การรู้แจ้งที่ลึกซึ้งที่คุณจะได้รับเมื่อคุณได้รับมันในที่สุดประสบการณ์นั้นจะทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้นในช่วงเวลาที่เหลือของวันแม้ว่าคุณจะไม่เคยใช้เสียงกระเพื่อมมากก็ตาม - Eric Raymond "ทำอย่างไรจึงจะเป็น Hacker"

[/ แก้ไข]


7
FWIW, SBCL เป็นการใช้งาน Common LISP และ Allegro CL
Vatine

@Vatine - คุณจะถูกต้อง หากมีหน้าแดงฉันจะทำให้มันตอนนี้ ฉันไม่รู้ว่าทำไมฉันคิดว่ามันต่างกัน คอมไพเลอร์ที่แตกต่างกันฉันโง่! = ภาษาที่แตกต่าง :) ขอบคุณ!
Jetti

@ เจฟฟ์: พวกเขาทั้งสองขยายภาษาในทิศทางที่แตกต่างกันในขณะที่ปล่อยให้ "CL core" ทำงานร่วมกันได้
Vatine

@Jetti คุณใช้อะไรตั้งแต่แรก?
ทำเครื่องหมาย C

ฉันเชื่อว่าฉันใช้ CLISP อยู่ในรูปแบบ VM ที่ฉันไม่มีอีกต่อไป ฉันคิดว่าความเขลาของฉันทำให้ฉันเชื่อว่ามันเป็นเสียงกระเพื่อมสามัญ อย่างน้อยตอนนี้ฉันรู้ดีกว่า
Jetti

8

ถ้าคุณต้องการที่จะเรียนรู้ Lisp วันนี้ฉันจะได้ดูไม้อย่างใดอย่างหนึ่งซึ่งเป็นการดำเนินการโครงการที่รวดเร็ว JVM ทำงานบน (เพื่อให้มีไลบรารีของ gazillions และคุณสามารถทำให้มันโต้ตอบกับโค้ด Java ของคุณเอง)

แม้ว่าคุณจะไม่ได้เรียนรู้ที่จะใช้มันจริง ๆ การเรียนรู้มันก็มีประโยชน์เสมอ: คุณเรียนรู้วิธีคิดและการจัดการกับปัญหาใหม่ ๆ แม้ในภาษาอื่น


3
ปัญหาของ Scheme คือเมื่อคุณเริ่มมีการฝึกฝนคุณไม่ต้องการกลับไปใช้ภาษาอื่น ฉันเพิ่งเริ่มนำกระแสข้อมูลไปใช้ (อาจจะไม่สิ้นสุด, ประเมินผลอย่างเกียจคร้าน, เปลี่ยนแปลงไม่ได้) ใน C ++ และนั่นเป็นรหัสที่มากกว่าใน Scheme! ฉันรู้สึกประหลาดใจจริง ๆ ที่ Scheme ผสมผสานระหว่างความเรียบง่ายและพลัง
Giorgio

++ สำหรับแร็กเก็ต มันสมบูรณ์อย่างไม่น่าเชื่อซึ่งเป็นหนึ่งในบทวิจารณ์ของรูปแบบอื่น ๆ และเหนือสิ่งอื่นใดที่สามารถทำได้ในการสร้างภาษาของคุณเอง
Scott Klarenbach

7

ส่วนสำคัญของ Amazon แบ็กเอนด์เคยเป็น Lisp แต่ตอนนี้เขียนใหม่ใน C ++ หรือดังนั้นฉันเคยได้ยิน (ฉันต้องยอมรับว่าฉันไม่มีแหล่งที่เชื่อถือได้สำหรับเรื่องนี้)

Yahoo! ร้านค้าเป็นหนึ่งในตัวอย่างคลาสสิกของ Lisp เว็บแอป จาก Yahoo! ชื่อเสียงของร้านที่คุณอาจเคยได้ยินพอลเกรแฮม Graham เป็นหนึ่งในผู้สนับสนุน Lisp ที่รู้จักกันดีและเขียนอย่างกว้างขวางเกี่ยวกับเรื่องนี้ คุณอาจต้องการอ่านเว็บไซต์ของเขาเพื่อทราบคะแนนของเขา

AutoCAD เคยมีภาษา Lisp เพราะเป็นระบบมาโคร ฉันไม่รู้ว่ามันยังอยู่หรือไม่

โครงการเป็นภาษาที่สะอาดและสง่างามมาก มันอาจเป็นภาษาโปรแกรมที่ฉันโปรดปรานดังนั้นฉันอาจจะลำเอียง ถ้าฉันจะเขียนตอนนี้เป็นแอปพลิเคชั่นหลักฉันอาจจะเขียนแอพพลิเคชั่นโครงกระดูกใน C, ขยายและกำหนดกฎเกณฑ์ทางธุรกิจใน Scheme สิ่งนี้ทำให้ฉันใช้ Scheme และใช้ประโยชน์จาก C - เพื่อความเร็วและความพร้อมใช้งานของไลบรารีสำหรับเกือบทุกอย่าง


สิ่งที่คุณจะแนะนำให้เป็นหนังสือเริ่มต้น / คอมไพเลอร์สำหรับโครงการ? ฉันใช้ Linux ดังนั้นหากมีเครื่องมือแก้ไขที่มีประโยชน์อย่างชัดเจนสำหรับมือใหม่ (เช่น Kile สำหรับ LaTex) โปรดแจ้งให้เราทราบ ...
TCSGrad

1
@ shan23 The Little Schemer ( ccs.neu.edu/home/matthias/BTLS ) เป็นทางออกที่ดีที่สุดของคุณ ฉันเชื่อว่า emacs เป็นตัวแก้ไขทั่วไปสำหรับ Scheme แต่ใช้เวลาสักครู่เพื่อทำความคุ้นเคย
Vitor Py

1
Editor สำหรับเสียงกระเพื่อมที่ง่ายใช้ emacs มันถูกเขียนโดย lisp guys และใน lisp
Zachary K

คุณยังสามารถใช้ Racket IDE ( racket-lang.org ); มันเหมือน Emacs แต่มีการจัดรูปแบบอัตโนมัติและการโต้ตอบกับล่าม Scheme
Jeremiah Willcock

Lispbox ( common-lisp.net/project/lispbox ) ทำงานนอกกรอบ (ประสบการณ์ emacs บางอย่างมีประโยชน์) มันขึ้นอยู่กับ ccl ( ccl.clozure.com ) ดูgigamonkeys.com/book/…
Giorgio

4

LISP ยังคงฝึกฝน / ใช้ในโลกปัจจุบันหรือว่าเป็นภาษาดั้งเดิมเช่น FORTRAN / COBOL ฉันหมายถึงนอกเหนือจากการบำรุงรักษาโค้ดที่มีอยู่แล้วมันใช้กับโครงการใหม่หรือไม่?

ฉันรู้จักผู้ชายหลายคนที่ทำ Lisps ใน บริษัท startups ใน Silicon Valley และฉันรู้ว่า Amazon.com ใช้ Lisp มาตั้งแต่ต้น (แม้ว่าฉันเคยได้ยินมาว่าพวกเขาใช้ C ++ แทนด้วยเหตุผลบางอย่าง)

แต่ บริษัท หนึ่งที่จะเก็บตาบนเป็นสุนัขซน ทุกเกมของพวกเขาเขียนด้วยภาษา Lisp ในขั้นต้นพวกเขารีดของตัวเอง แต่พวกเขาใช้ MZScheme ในซีรีส์ Uncharted

ภาษาที่ใช้กันมากที่สุดคืออะไร? ฉันได้พบกับ Scheme และ Common LISP ในฐานะภาษากลางที่แพร่หลายมากที่สุดสองภาษาและต้องการความคิดเห็นของคุณว่าสิ่งใดเป็นสิ่งที่เป็นที่นิยม / มีประโยชน์มากที่สุดในการเรียนรู้และจะทำให้คุณพอใจมากหากคุณสามารถแนะนำทรัพยากร

ฉันพนันได้ว่า Common LISP, Clojure, Scheme และ Emacs Lisp เป็นภาษาถิ่นที่ใช้กันอย่างแพร่หลายทั้งสี่และฉันคิดว่า Scheme เป็นโปรแกรมที่ใช้งานบ่อยที่สุด แน่นอนว่าฉันไม่มีอะไรจะช่วยได้ :)

ฉันชอบ SICP และ Little Schemer ตามที่คนอื่นแนะนำ แต่ฉันยังแนะนำLand of Lispซึ่งเป็นการอ่านที่ให้ความบันเทิงมากกว่า :)


แท้จริงแล้ว Land of Lisp เป็นการอ่านที่น่าอัศจรรย์
Chiron

@ 4bu3li คุณยังไม่ได้ลงคะแนน?
ทำเครื่องหมาย C

1
เกี่ยวกับ Naughty Dog: นั่นไม่ถูกต้องอย่างสิ้นเชิงเกม PS2 ของพวกเขาถูกเขียนด้วยภาษาเป้าหมายที่เหมือนเสียงกระหึ่ม ... แต่เมื่อย้ายมาที่ PS3 พวกเขาได้เปลี่ยนไปใช้ C ++ MZScheme ส่วนใหญ่ใช้เป็นตัวประมวลผลล่วงหน้าของแมโครเขียนในบรรทัดด้วย C ++ และใช้สำหรับการประมวลผลสินทรัพย์บางส่วนและสคริปต์บางส่วนของพวกเขาเขียนด้วย S-exps แต่ไม่มีรหัส MZScheme ทำงานจริงบน PS3
Arelius

2

ฉันคิดว่ามันขึ้นอยู่กับสิ่งที่คุณต้องการทำบางส่วน - หากคุณกำลังมองหาข้อมูลเชิงลึกเกี่ยวกับแนวคิดต่าง ๆ ของการเขียนโปรแกรมและทำให้ตัวเองเป็นโปรแกรมเมอร์ที่ดีขึ้นฉันจะบอกว่ามันคุ้มค่าที่จะเรียนรู้อย่างน้อย หากคุณกำลังมองหาภาษาอื่นที่จะเพิ่มในประวัติการทำงานของคุณด้วยมุมมองในการทำงานกับภาษานี้คุณอาจต้องการหาที่อื่น มีงานเสียงกระเพื่อมไม่มากที่นั่น

ฉันลองใช้ SBCL หรือมากกว่านั้นเร็ว ๆ นี้ Clojure (และ Emacs Lisp บางตัว แต่ htat เป็นเพราะฉันเป็นผู้ใช้ Emacs ระยะยาว - ฉันจะพยายามเรียนรู้ Emacs Lisp เมื่อฉันลองเรียนรู้ Lisp) ตอนนี้สิ่งที่ฉันต้องทำคือหาเวลาเล่นกับภาษาเหล่านั้น ...


1
ส่วนใหญ่มันเป็นครั้งแรก ... ตามที่เห็นได้ชัดว่าถ้าฉันประสบความสำเร็จในนั้นแน่นอนว่ามันจะไม่ส่งผลกระทบต่อประวัติการทำงานของฉันเลย :) แต่อย่างจริงจังฉันต้องการมุมมองเกี่ยวกับ "สไตล์" การเขียนโปรแกรมที่แตกต่างกันเพื่อให้ฉันมีความคิดที่ดีว่าจะใช้ในสถานการณ์ต่าง ๆ (ไม่ต้องการตกอยู่ในสถานการณ์ที่ติดตั้งค้อนเท่านั้น ฉันต้องรักษาปัญหาทั้งหมดด้วยเล็บ !!)
TCSGrad

2

ฉันไม่รู้ว่ามีงานมากมายใน LISP ฉันไม่เห็นพวกเขาแน่นอน แต่ฉันจำได้เป็นเวลานานเกี่ยวกับการอ่านโพรบของนาซ่าที่พวกเขาใช้ LISP และสามารถแทรกรหัสใหม่จากโลกได้

นอกจากนี้ในนิวยอร์กกลุ่มพบปะสังสรรค์มีขนาดใหญ่มาก ฉันเดาว่าถ้าคุณสนใจและไปที่กลุ่มพบปะสังสรรค์ของคุณคุณอาจค้นหาเครือข่ายและหางาน (ไม่ใช่งานปิดบัง แต่สิ่งต่าง ๆ เช่น Java / C ++ / ฯลฯ ) ดูเหมือนว่าจะมีขนาดใหญ่มากในพื้นที่นิวยอร์กพื้นที่อื่นอาจแตกต่างกันไป

LISP เป็นวิธีคิดที่แตกต่าง LISP และ SQL ทั้งคู่ยังส่งผลให้ใช้นิพจน์ที่ซ้อนกันมากมาย ฉันใช้ SQL ตันแล้วสังเกตว่า LISP สมเหตุสมผลดีกว่า แต่ถ้าคุณมีปัญหากับ SQL ที่คุ้นเคยกับการใช้วงเล็บและนิพจน์ที่ซ้อนกันสุดขณะใช้ LISP จะทำให้การแสดงออกของ SQL ง่ายขึ้นมาก

ตัวอย่างคลาสสิกคือวิธีการนำ MAX ไปใช้ (a, b, c) คุณสามารถสร้างฟังก์ชั่นที่ซับซ้อนด้วยประโยค if หรือคุณสามารถพูดได้

สูงสุด (สูงสุด (a, b), c)

และใช้การโทรซ้อนกันสองครั้งของสองรายการ MAX ซึ่งสำหรับฉันนั้นง่ายต่อการอ่าน แม้ว่าหากประสิทธิภาพเป็นปัญหาคุณอาจต้องการวิธีอื่นเช่นกัน แต่ฉันก็ไม่ต้องนับจำนวนการเปรียบเทียบเมื่อใช้แต่ละวิธี ... นอกจากนี้หากคุณใช้งาน MAX ผ่านทางแมโคร C หรือวิธีอื่นที่ประเมิน การแสดงออกหลายครั้งคุณอาจไม่ได้รับผลลัพธ์ตามที่คาดไว้เนื่องจากอาจมีการประเมินการแสดงออกหลายครั้งดังนั้นระวังด้วยผลข้างเคียง ...


3
คุณสามารถทำให้ MAX ง่ายขึ้นโดยMAX(MAX(a b) c)
Andrea

คุณพูดถูกนั่นคือสิ่งที่ฉันได้รับคำตอบหลังจากตื่นนอน ฉันปรับคำตอบ
Cervo

2
โครงการนาซ่าคือห้วงอวกาศ 1: flownet.com/gat/jpl-lisp.html
Frank Shearar

2

สองคะแนนเพิ่มเติม:

ข้อแรก Lisp เป็นภาษาที่ยอดเยี่ยมสำหรับการเขียนโค้ดซึ่งการโต้ตอบระหว่างฟังก์ชันหรือข้อมูลมักจะซับซ้อน ในภาษายอดนิยมจำนวนมากหากคุณสับสนว่าเหตุใดโปรแกรมของคุณถึงทำในสิ่งที่ทำคุณต้องเขียนฟังก์ชั่นพิเศษเพื่อให้คุณสามารถตรวจสอบสถานะภายในของโปรแกรมได้ ในบางภาษาคุณต้องรอให้คอมไพล์ใหม่ แน่นอนว่าอาจมีเครื่องมือต่าง ๆ เช่น debuggers ที่ช่วยเหลือสิ่งนี้ อย่างไรก็ตามใน Lisp สิ่งที่คุณต้องการคือวิธีหยุดโปรแกรมจากนั้นโดยทั่วไปคุณสามารถเข้าถึงทุกสิ่งใน Lisp ได้ ใน Common LISP บางครั้งฉันพิมพ์ ^ C หรือโทรออกerrorเป็นฟังก์ชั่นเดียว (ซึ่งเป็นสิ่งเดียวที่ต้องทำการคอมไพล์ใหม่และคุณไม่ต้องทำอะไรเพื่อคอมไพล์ซ้ำ) เมื่อฉันหยุดโปรแกรมฉันก็ถูกโยนลงในโปรแกรมดีบั๊กทันที - แต่โปรแกรมดีบั๊กจะมอบพลังทั้งหมดของ Lisp และฉันสามารถออกจากโปรแกรมดีบั๊ก, เรียกใช้ฟังก์ชันเฉพาะเป็นต้นได้ฉันสามารถตรวจสอบโครงสร้างข้อมูลใด ๆ ได้อย่างง่ายดาย ในโปรแกรมของฉัน โครงการส่วนใหญ่ควรอนุญาตให้มีการปฏิบัติที่คล้ายกัน เสียงกระเพื่อมไม่ได้เป็นเอกลักษณ์ในเรื่องนี้ แต่สิ่งที่มันนำเสนอนอกเหนือไปจากสิ่งที่ภาษายอดนิยมจำนวนมากเสนอ

ข้อที่สอง: ถ้าคุณกำลังจะทดสอบด้วยภาษา Lisp ฉันจะไม่ทำ (a) โดยใช้ตัวแก้ไขที่ตรงกับวงเล็บและ (b) การเรียนรู้การเยื้อง Lisp ที่เหมาะสม เป็นความคิดที่ดีที่จะใช้โปรแกรมแก้ไขที่จะประมาณการเยื้องที่เหมาะสมสำหรับคุณเช่นกัน การจัดรูปแบบโค้ดสไตล์ C / C ++ / Java ถูกออกแบบมาสำหรับภาษาที่มีวงเล็บ / วงเล็บ / วงเล็บเหลี่ยมน้อยกว่า Lisp สไตล์การพิมพ์ที่สวยงามกระเพื่อมใช้งานได้ดีเมื่อคุณคุ้นเคยและคุณไม่ต้องสับสนกับวงเล็บหรือเสียพื้นที่ครึ่งหนึ่งในการใส่วงเล็บปิดหนึ่งอันต่อบรรทัด


1

ตอนนี้ฉันได้รับความประทับใจว่า Lisp ส่วนใหญ่จะใช้ในร้านให้คำปรึกษา

มันถือเป็นเรื่องเล็กน้อยสำหรับซอฟต์แวร์เชิงปฏิบัติ ส่วนใหญ่เป็นเพราะคนไม่คุ้นเคยกับมันฉันเชื่อว่า

ตามเนื้อผ้าโครงการเป็นภาษาทางวิชาการค่อนข้างชัดและร่วมกันชัด ๆ เป็นภาษาอุตสาหกรรม

เสียงกระเพื่อมมีประโยชน์อย่างยิ่งสำหรับการจัดการสัญลักษณ์และความสามารถในการสะท้อนแสง

ตัวอย่างเช่นโค้ดที่ฉันเขียนเพื่อเรียนรู้ Lisp เป็นโปรแกรมที่สร้างฟังก์ชั่นแลมบ์ดาสุ่มประเมินพวกมันจากนั้นก็ดำเนินการกับพวกมันเพื่อพยายามลดความแตกต่างของฟังก์ชั่นด้วยฟังก์ชั่นเป้าหมาย ทั้งหมดนี้เป็นการจัดการโดยตรง ในภาษาเช่น C ++ หรือ Java ฉันจะต้องคิดค้นการแสดงสำหรับฟังก์ชั่นที่คอมพิวเตอร์จะจัดการ


ประเด็นที่น่าสนใจที่คุณทำเกี่ยวกับความแตกต่างระหว่าง Scheme / Common Lisp - คุณช่วยอธิบายเกี่ยวกับสาเหตุของมันได้อย่างไร?
TCSGrad


1

ฉันต้องการเพิ่มมุมมองบางอย่างเกี่ยวกับ Common LISP และ Scheme ฉันหลีกเลี่ยงการปิดบังเนื่องจาก JVM ดังนั้นฉันจึงไม่มีมุมมองมากมาย

Scheme เป็นภาษาที่กระชับและชัดเจน ต้องใช้การตัดสินใจจำนวนมากที่ CL ต้องดำเนินการเนื่องจากเป็นมรดกและใช้แนวทางที่บริสุทธิ์กว่านี้ ตัวอย่างเช่นตัวแปรและฟังก์ชั่นอยู่ในเนมสเปซเดียวกัน ภาษาเริ่มต้นมีขนาดเล็กลงและกระชับยิ่งขึ้นซึ่งใช้งานได้ดีในการสอนสิ่งต่าง ๆ ที่เสียงกระเพื่อมเป็นสิ่งที่ดีเช่นมันกดดันการใช้การเรียกซ้ำแทนที่จะเป็นการวนซ้ำเนื่องจากโดยปกติแล้วจะไม่มีการวนซ้ำซ้ำและต้องการการเพิ่มประสิทธิภาพหาง . โครงการมีระบบมาโครที่ถูกสุขลักษณะที่น่าสนใจซึ่งมีค่ามากสำหรับการเรียนรู้ แต่ IMO ฉันขอแนะนำให้เรียนรู้แมโคร Unhygienic แบบ CL ซึ่งเป็นส่วนหนึ่งของรูปแบบภาษา (?) ที่เสนออย่างน้อยหนึ่งการใช้งานแม้ว่าจะไม่ใช่ส่วนหนึ่งของข้อมูลจำเพาะ เนื่องจากดูเหมือนว่าคุณต้องการเรียนรู้ภาษาเพื่อการเรียนรู้ของฉัน

ต้องบอกว่าชุมชนของโครงการมีการแยกส่วนและนอกเหนือจากในกระเป๋าเล็ก ๆ สองสามดูเหมือนว่าจะทุ่มเทเพื่อการวิจัยมากกว่าการทำงานจริง ... ตัวอย่างเช่นทุกภาษามีผู้จัดการแพคเกจของตนเองและแพคเกจมักไม่พกพา ข้ามภาษาซึ่งเป็นปัญหาใหญ่ในชุมชนโครงการ

Lisp สามัญในทางกลับกันดูเหมือนว่าจะเป็นวิธีการปฏิบัติมากขึ้นในการพัฒนาภาษา มาตรฐานเป็นเช่นนั้นรหัสเสียงกระเพื่อมมากเป็นแบบพกพาระหว่างการใช้งานคอมไพเลอร์จำนวนมากได้อย่างรวดเร็วและเพิ่มประสิทธิภาพที่ดี มีชุดของแพคเกจจำนวนมากซึ่งส่วนใหญ่เป็นแบบพกพาระหว่างการใช้งาน และดูเหมือนว่าจะมีการสร้างผลิตภัณฑ์จริงจำนวนมาก (เปรียบเทียบ) ในภาษา และด้วยการพูด quicklisp การจัดการแพ็คเกจรู้สึกใกล้เคียงกับสิ่งที่คุณจะได้รับในชุมชนสมัยใหม่อย่างเช่น Ruby หรือ Node CL อย่างไรก็ตามไม่ได้มีข้อบกพร่อง แต่ก็มีสเปคที่มีขนาดใหญ่มากเมื่อเทียบกับแบบแผนและแม้กระทั่งเป็นระบบวัตถุ CLOS สิ่งที่เขียนแบบดั้งเดิมเป็นห้องสมุดใน Lisps เป็นส่วนหนึ่งของ IIRC สเป็ค และคุณสามารถรู้สึกได้ถึงมรดกตกทอดผ่านระบบจำนวนมาก

มิฉะนั้นฉันบอกว่าฉันไม่สามารถพูดเกี่ยวกับการปิดบังและ Emacs Lisp เป็นตัวเลือกที่เหมาะสมอย่างชัดเจนหากเป้าหมายของคุณคือการเขียนส่วนขยายของ Emacs และค่อนข้างชัดเจนว่าไม่ใช่ตัวเลือกที่เหมาะสมสำหรับซอฟต์แวร์อื่น ๆ

TLDR; หากเป้าหมายของคุณคือการเรียนรู้ฉันขอแนะนำ Scheme อย่างไรก็ตามหากคุณต้องการสร้างซอฟต์แวร์ฉันขอแนะนำ Common Lisp ของตัวแปรเสียงหลักสองตัว


BTW, PLT Racket เป็นภาษาที่มีรูปแบบมากกว่าเดิมและมีพื้นเพมาจากรูปแบบชุมชนที่ดูเหมือนจะพยายามเป็นประโยชน์สำหรับการทำงานจริง ถ้าฉันจะเขียนโค้ดในรูปแบบวันนี้เป็นไปได้ว่าอาจเป็น PLT หรือ Chicken Scheme แต่ในภายหลังอาจเป็นเพราะจุดอ่อนในใจของฉัน
Arelius

0

ฉันเรียนรู้มากมายจากคำตอบ ขอบคุณทุกคนที่มีส่วนร่วมในการสนทนาที่แจ่มใสนี้

ฉันควรจะพูดถึงnewLISP แม้ว่ามันจะแตกต่างจากทั้ง CL และ Scheme แต่ก็มีฟังก์ชั่นที่มีประโยชน์มากมาย ฉันพบเซิร์ฟเวอร์ http, ฟังก์ชั่นการประมวลผลหลากหลาย (Cilk) และฟังก์ชั่นการประเมินผลระยะไกลสะอาดและใช้งานง่ายมาก

ปฏิบัติการเดี่ยวมีขนาดเล็กเร็วและมีแบตเตอรี่เจ๋ง ๆ มากมาย


มันอาจยุติธรรมที่จะพูดถึงมัน แต่ฉันจะไม่แนะนำอย่างแน่นอน ... ไม่มีการกำหนดขอบเขตคำศัพท์และไม่มีตัวอย่างเช่น - อย่างจริงจัง? ฉันไม่เข้าใจว่า newLISP กำลังพยายามทำอะไรให้สำเร็จ
cji

2
คุณพูดถูก - มันแตกต่างกัน มันใช้บริบทและการกำหนดขอบเขตแบบไดนามิกและจากโมดูลประสบการณ์และบริบทของฉันมีความสัมพันธ์กัน ไม่พยายามเป็น CL หรือ Scheme อื่น การอ่านหน้าเกี่ยวกับความแตกต่าง ( newlisp.org/index.cgi?page=Differences_to_Other_LISPs ) จะให้ความกระจ่างเกี่ยวกับปัญหาการออกแบบ ในทำนองเดียวกันฉันจะไม่แนะนำใครก็ตามที่ต้องการประสบการณ์แบบ CL หรือแบบแผน แต่สำหรับบางกรณีการใช้งานอาจเป็นตัวเลือกที่เหมาะสม นั่นคือความงามของระบบนิเวศโอเพ่นซอร์ส - ทางเลือกมากมาย!
CyberFonic

0

อีกปัจจัยที่ต้องพิจารณาในการเลือกภาษาของ Lisp ที่จะเรียนรู้อาจเป็นจำนวนและคุณภาพของการใช้งาน หากภาษามีการใช้งานเพียงหนึ่งหรือสองครั้งคุณก็จะติดอยู่กับข้อบกพร่องของพวกเขาจนกว่าข้อบกพร่องเหล่านั้นจะได้รับการแก้ไขและมีโอกาสที่คนจะหยุดการปรับใช้ ในตัวของมันเองนั้นไม่ใช่เหตุผลที่จะไม่ใช้สำเนียงเดี่ยวของ Lisp แต่มันเป็นสิ่งที่ต้องคำนึงถึง ข้อดีของ Scheme และ Common LISP คือมีการใช้งานหลายภาษาเหล่านี้ ทั้งสองภาษามีมาตรฐานที่เผยแพร่ดังนั้นการใช้งานล่าสุดค่อนข้างมีแนวโน้มที่จะเรียกใช้รหัสเดียวกันส่วนใหญ่ การใช้งานบางอย่างเหล่านี้ใช้เวลานาน แต่ยังอยู่ระหว่างการพัฒนา: ตอนนี้พวกเขากำลังใช้งานคุณภาพสูงและพวกเขายังคงได้รับการปรับปรุง


อ้างอิงจากสมาตรฐานอ้างอิงที่ Clojure ทำไม่เลวร้ายนักเมื่อเทียบกับ SBCL: benchmarksgame.alioth.debian.org/u32/…
AndreasScheinert

ขอบคุณ Andreas คุณถูก. แสดงให้เห็นว่าฉันรู้เกี่ยวกับ JVM มากแค่ไหน ในส่วนที่ฉันเข้าใจผิดโดย ABCL CL ที่อิง JVM ค่อนข้างช้า แต่ดี
ดาวอังคาร

ฉันเถียงว่าคุณต้องการเสียงกระเพื่อมบน JVM ไปเพื่อ Clojure มันไม่สมบูรณ์แบบ แต่เป็นความสุขที่แท้จริง (IMHO)
AndreasScheinert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.