อะไรที่ยอดเยี่ยมเกี่ยวกับ Lisp? [ปิด]


105

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

แล้ว Lisp มันยอดเยี่ยมขนาดไหนและทำไมถึงไม่ใช้มากกว่านี้ล่ะ? มีอะไรที่ไม่ดีเกี่ยวกับ Lisp (นอกเหนือจากจำนวนวงเล็บที่ไม่หยุดหย่อน) หรือไม่?


5
"ภาษายอดนิยมในปัจจุบันสืบเชื้อสายมาจากภาษา C" เพียงผิวเผิน หากคุณมองไปที่คุณลักษณะต่างๆแทนที่จะใช้เพียงการใช้เครื่องหมายปีกกาคุณจะพบว่าภาษาสมัยใหม่อยู่ไม่ไกลจาก Lisp และใกล้ชิดกันมากขึ้นตลอดเวลา โปรแกรมใน C # หรือ Python หรือ Ruby จะดูคล้าย Lisp มากกว่าที่จะชอบ C.
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 ไม่ได้รับเพราะ (หรือเมื่อ) เป็นที่นิยม
Ken

ฉันไม่คิดว่าทุกคนที่ใช้ Lisp จะรักมัน ประสบการณ์ของฉันแตกต่างกัน ลองถามนักเรียนวิทยาศาสตร์คอมพิวเตอร์ที่เริ่มต้นด้วย Scheme อาจมีประมาณ 10% ที่จะรักมัน 30% จะเคารพและ 60% จะเกลียดมัน ฉันไม่คิดว่าภาษายอดนิยมส่วนใหญ่สืบเชื้อสายมาจาก C.
Rainer Joswig

คำตอบ:


58

Lisp เป็นภาษาโปรแกรมของ Chuck Norris

เสียงกระเพื่อมเป็นแถบที่ภาษาอื่น ๆ วัดได้

การรู้จัก Lisp แสดงให้เห็นถึงการตรัสรู้ของนักพัฒนา

ฉันเคยได้ยินเกี่ยวกับจุดอ่อน 3 ประการ (และข้อโต้แย้งของพวกเขา):

  1. การพิมพ์แบบไดนามิก

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

    บทความนี้ระบุว่าสำหรับการพิมพ์แบบไดนามิกพร้อมกับการทดสอบเพิ่มเติมได้ที่: พิมพ์ดีดที่แข็งแกร่งเมื่อเทียบกับการทดสอบที่แข็งแกร่ง

  2. ยากที่จะรับ

    จริงๆแล้วมีสองส่วนคือการเรียนรู้และเครื่องมือ

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

    ฉันได้อ่านThe Little Schemerและกำลังอ่านPractical Common Lispซึ่งยอดเยี่ยมทั้งคู่

    ต่อไปเป็นเครื่องมือ ฉันใช้ Mac ดังนั้นฉันจึงใช้Aquamacs Emacs เป็นศูนย์ (ทำให้ Emac น่าอยู่สำหรับมือใหม่) และSteel Bank Common Lisp (SBCL)

  3. ขาดห้องสมุด

    ฉันยังไม่สามารถบอกได้อย่างแน่นอน แต่ฉันสงสัย สำหรับการสร้างเว็บไซต์ดูเหมือนว่าHunchentootและElephantจะมีชุดเครื่องมือที่ดี แต่จริงๆแล้วฉันไม่เห็น Lispers บ่นเกี่ยวกับการไม่มีห้องสมุด (อาจเป็นเพราะ Lisp มีพลังมากจนไม่จำเป็น?)


4
ถึงที่อยู่ (3) - คุณดู Clojure หรือยัง?
viksit

5
"แต่จริงๆแล้วฉันไม่เห็นลิสเปอร์สบ่นเกี่ยวกับการไม่มีห้องสมุด (อาจเป็นเพราะลิสป์มีพลังมากจนไม่จำเป็น?)" ฉันจะแก้ไขคำพูดสุดท้ายเป็น "(อาจเป็นเพราะเสียงกระเพื่อมมีพลังมากจนไม่จำเป็นสำหรับพวกเขา?)" สิ่งนี้สร้างความแตกต่างอย่างมาก
Agnius Vasiliauskas

50
อย่าพูดว่าทำไมเสียงกระเพื่อมถึงดีมากโหวตลงจากฉัน
Kilon

30
โหวตให้คะแนนเพราะ "X เจ๋งมาก X ยอดเยี่ยม X ก็เหมือน Y ซึ่งก็ยอดเยี่ยมเช่นกันเพราะฉันบอกว่ามันยอดเยี่ยม!" ไม่ใช่คำตอบสำหรับ "เหตุใด X จึงได้รับการยกย่องว่ายิ่งใหญ่" การอ้างอิงทางการเมืองยังไม่เหมาะสมและไม่เป็นประโยชน์ (คนส่วนใหญ่ไม่คิดว่าลัทธิเสรีนิยมเป็นความคิดที่ดี) สามจุดนั้นมีประโยชน์ แต่ฉันหวังว่ามันจะไม่ "มันมีจุดอ่อน A ... แต่จริงๆแล้วมันไม่ใช่จุดอ่อน!"
Superbest

1
Lisp เป็นภาษาโปรแกรมของ Chuck Norris นั่นคือสิ่งที่ทำให้มันดีมาก เข้าใจแล้ว โหวตลดลง
NiCk Newman

71

“ Lisp เป็นภาษาโปรแกรมที่ตั้งโปรแกรมได้”
- John Foderaro, CACM, กันยายน 2534

นี่คือมุมมองของฉัน:

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

ถ้าคุณขุดเล็ก ๆ น้อย ๆ ลึกอ่านSICPและเขียนประเมิน metacircular คุณค้นพบสิ่งที่สอง: หนึ่งล่ามทั้ง (รับเพียงไม่กี่พื้นฐาน) เป็นเพิ่งหน้าของรหัสและสองความสัมพันธ์ระหว่างรหัสและข้อมูล ช่วยให้สามารถใช้เทคนิคการเขียนโปรแกรมที่สวยงามได้

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


1
ในทางทฤษฎีคุณสามารถฝังภาษาใด ๆ ลงใน Lisp เช่น Rust, Ruby, C, Java, Python, Erlang ดังนั้น Python (Hy) และ Rust รุ่น s-expression จึงถูกเรียกว่า (Risp) [แม้ว่าฉันจะไม่รู้ว่ามันเสถียรแค่ไหนก็ตาม] หากคุณเขียนโค้ดด้วย Hy แทน Python คุณจะมีความสามารถในการมาโครและการแก้ไขโครงสร้างเช่น parinfer / paredit ( shaunlebron.github.io/parinfer ) มาโครช่วยให้คุณสามารถฝัง DSL ของคุณเองใน Lisp และยังสามารถใช้เพื่อเปลี่ยนโค้ดช้าให้เป็นโค้ดเร็วผ่านมาโครคอมไพเลอร์ คุณยังสามารถเปลี่ยนรหัส Python (Hy) ให้เป็น Rust (Risp) ได้โดยการเปลี่ยนต้นไม้ sexp
aoeu256

ฉันยังได้ยินคำพูดนี้หลายครั้ง คุณช่วยอธิบายอีกนิด @ aoeu256 ได้ไหม
นักศึกษา

67

Lisp นั้นดีเพราะมีไวยากรณ์ที่เรียบง่ายและเรียบง่ายมาก

เสียงกระเพื่อมไม่ดีเพราะมีไวยากรณ์ที่เรียบง่ายและเรียบง่ายมาก


4
มีอะไรไม่ดีเกี่ยวกับไวยากรณ์ที่เรียบง่ายและเรียบง่ายปกติ
oskarkv

27
@oskarkv - ไวยากรณ์ขั้นต่ำปกติโดยสิ้นเชิงหมายความว่าไม่มีอคติต่อการใช้งานใด ๆ โดยเฉพาะ สิ่งนี้ฟังดูดีจนกว่าคุณจะพบกับหลักการ Pareto: การมีอคติต่อกรณีที่เกิดขึ้นบ่อยที่สุดจะมีประสิทธิภาพมากขึ้นและหยุดแสร้งทำเป็นว่าทุกกรณีมีโอกาสเท่ากัน หากลูกค้าของคุณ 20% อยู่ในนิวยอร์คและ 80% ในแอลเอคุณควรนั่งบนรั้วที่ไหนสักแห่งในแคนซัส / โอคลาโฮมาเพื่อที่จะยังคง "เป็นกลาง" ในแง่ภูมิศาสตร์ หรือรู้สึกมากกว่าที่จะไปที่ลูกค้าส่วนใหญ่? เราชอบภาษาที่บิดเบือนคุณลักษณะที่อาจมีปัญหา
Daniel Earwicker

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

3
มันฟังดูแย่เมื่อคุณใส่แบบนั้น ฉันไม่ได้ใส่แบบนั้น! อคติต่อเหตุการณ์ที่เกิดขึ้นบ่อยที่สุดสถานการณ์ที่เป็นไปได้มากที่สุดเป็นอย่างไร? (แน่นอน) เป็นคำที่สัมพันธ์กันดังนั้นจึงขึ้นอยู่กับสิ่งที่คุณกำลังทำ หากคุณขาดข้อมูลอย่างแท้จริงเกี่ยวกับสิ่งที่คุณจะทำก็ไม่มีเหตุผลใดที่ต้องพยายามเตรียม แต่มันอาจจะไม่จริง - คุณมีข้อมูลและเพื่อให้คุณสามารถเตรียม ("อคติ") ตัวเองต่อสถานการณ์ที่เป็นไปได้มากที่สุดที่คุณต้องเตรียมตัวให้พร้อม
Daniel Earwicker

22

"โปรแกรม C หรือ Fortran ใด ๆ ที่ซับซ้อนเพียงพอมีการใช้งานแบบเฉพาะกิจระบุอย่างไม่เป็นทางการกำจัดข้อบกพร่องและใช้งานได้ช้ากว่าครึ่งหนึ่งของ Common Lisp"

กฎข้อที่ 10 ของ Greenspun


16

นี่คือลิงค์ที่เป็นประโยชน์:


1
เกี่ยวกับเสียงกระเพื่อมนั้นยอดเยี่ยมมาก (ฉันเพิ่งผ่านไปครึ่งทางแม้ว่าฉันจะยอมรับว่ามาโครจะหนาแน่นไปหน่อย) แต่คุณต้องรู้ Lisp เพื่ออ่าน นอกเหนือจากปัญหาเล็กน้อยนี้แล้วหนังสือเล่มนี้ยังเป็นหนังสือที่ยอดเยี่ยมไม่เพียง แต่เกี่ยวกับ Lisp แต่เกี่ยวกับวิศวกรรมซอฟต์แวร์โดยทั่วไป
JS

9

บทแรกของปีเตอร์ซีเบลยอดเยี่ยมการปฏิบัติธรรมดาชัดครอบคลุมเหตุผลที่เขาชื่นชอบเสียงกระเพื่อม บรรทัดล่างคือวลี "ภาษาโปรแกรมที่ตั้งโปรแกรมได้" - ความสามารถในการปรับแต่งภาษาตามโดเมนของคุณหรือสไตล์ที่ต้องการ


3

โปรแกรม Lisp มีแนวโน้มที่จะให้การทำแผนที่ที่ชัดเจนยิ่งขึ้นระหว่างแนวคิดของคุณเกี่ยวกับวิธีการทำงานของโปรแกรมและโค้ดที่คุณเขียนจริงๆ

ที่มา: http://www.gigamonkeys.com/book/introduction-why-lisp.html

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