วันนี้การวิพากษ์วิจารณ์ของเสียงกระเพื่อมสามัญใดยังคงใช้อยู่


29

ในการวิพากษ์วิจารณ์ของเสียงกระเพื่อมสามัญเขียนโดย Rodney A. Brooks และ Richard P. Gabriel จาก Stanford ในปี 1984 การออกแบบการตัดสินใจบางอย่างที่เก็บรักษาไว้โดยคณะกรรมการ Common Lisp แม้ว่าการอภิปรายส่วนใหญ่จะยังคงใช้ได้ แต่มีสองแถลงการณ์ที่อ้างถึงเทคโนโลยีที่มีอยู่ในขณะนั้นและอาจเป็นเท็จในวันนี้

ข้อความทั้งสองนี้คือ:

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

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

ใน LISP สามัญการควบคุมมากเกินไปเล็กน้อยถูกวางไว้ในเลขคณิตจุดลอยตัว และแน่นอนว่าถึงแม้ว่าการทำงานที่ถูกต้องของโปรแกรม floating-point-point สามารถบรรลุได้ แต่ประสิทธิภาพอาจแตกต่างกันไป

เท่าที่ฉันเข้าใจดูเหมือนว่าการเขียนรหัสตัวเลขที่มีประสิทธิภาพใน Common LISP เป็นไปได้ แต่มีความท้าทายมากกว่าที่จะเป็น

เมื่อสามสิบปีก่อน ฉันจะพิจารณาคำแถลงเหล่านี้ได้อย่างไรถ้าฉันยินดีที่จะเขียนโปรแกรม Common LISP สำหรับการใช้งานซอฟต์แวร์เสรีอย่างใดอย่างหนึ่ง (CLISP, SBCL และคณะ)


เป็นคำถามที่ดีมาก! ชอบที่จะได้ยินจากใครบางคนที่มีความรู้เกี่ยวกับ Common LISP ในหัวข้อนี้ ความกลัวของฉันคือพวกเขายังคงใช้งานอยู่บนพื้นฐานของความนิยมที่ชัดเจนของ Common LISP ทุกวันนี้

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

2
ในทางกลับกันฮาร์ดแวร์ที่ทันสมัยโดยทั่วไปใช้จุดลอยตัวของ IEEE ดังนั้นจึงอาจคาดการณ์พฤติกรรมได้มากกว่าการใช้งานในปี 1984
microtherion

คำตอบ:


31

กระดาษมีความน่าสนใจในหลาย ๆ

ส่วนที่น่าสนใจที่สุดคือ: ผู้เขียนทำผิดกระดาษจาก 1984 เพียงสองปีต่อมาในปี 1986 ตัวเอง Brooks and Gabriel ได้พัฒนาคอมไพเลอร์ Lisp ที่ปรับให้เหมาะสมอย่างมากและขายมันประสบความสำเร็จในเชิงพาณิชย์มาหลายปี: Lucid Common Lisp (PDF)

บำรุงรักษาสำหรับคอมไพเลอร์นี้ชัดยังคงมีอยู่จากLispWorks : มันคือตอนนี้เรียกว่าLiquid Common เสียงกระเพื่อม

คอมไพเลอร์การปรับให้เหมาะสมของ Liquid CL มีการจัดทำเป็นเอกสารไว้ในบทที่ 3 ของคู่มือผู้ใช้ขั้นสูง : การปรับโปรแกรม Lisp ให้เหมาะสม

มีการเขียนและปรับใช้แอพพลิเคชั่นทางการค้าจำนวนมากใน Lucid CL ตัวอย่างเช่นในเมืองของฉันระบบข้อมูลการขนส่งสาธารณะแห่งแรกสำหรับ HVV (Hamburger Verkehrsverbund) ถูกนำไปใช้งานโดยใช้ Lucid CL บน SUN SPARCstation มันมีให้สำหรับประชาชนในสถานีรถไฟโดยใช้หน้าจอสัมผัสขนาดใหญ่และในศูนย์บริการ

Lucid CL ประสบความสำเร็จเนื่องจากคอมไพเลอร์โหมดการผลิตสร้างแอพพลิเคชั่น Common Lisp ที่รวดเร็วส่วนใหญ่สำหรับแพลตฟอร์ม Unix / RISC

Brooks และ Gabriel กำลังเขียนเกี่ยวกับ Lucid Common Lisp ในปี 1986:

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

ดังนั้นพวกเขาจึงเพิ่งนำสิ่งที่วิพากษ์วิจารณ์ของเสียงกระเพื่อมมาอ้างว่าเป็นเรื่องยากหรือเป็นไปไม่ได้

ทุกวันนี้การใช้งานขั้นสูงกำลังเพิ่มประสิทธิภาพมากขึ้น แต่ฮาร์ดแวร์ก็เร็วกว่า 1,000 เท่าในปี 1984 VAX 11/780 ก็มี MIPS หนึ่งอัน (ล้านคำสั่งต่อวินาที) และ Lisp Machine ก็อยู่ในนั้นด้วย ช่วงนั้น Motorola 68000 มีอัตราสัญญาณนาฬิกา 8 MHz

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

ในฐานะผู้ใช้ / ผู้พัฒนาไม่จำเป็นต้องเขียนโค้ดพกพาและใช้ระบบ Common LIS ที่สนับสนุนทั้งหมดสิบ + ในปัจจุบัน ใช้การปรับใช้ที่เหมาะสมที่สุดสำหรับปัญหาแอปพลิเคชัน


คำตอบของคุณแม่นยำและละเอียดมากแน่นอนสมควรได้รับเงินรางวัล!
user40989

1
"การเพิ่มประสิทธิภาพสูง" ไม่ได้แปลว่าคอมไพเลอร์คือ "ฉลาดพอ" คำว่า "ฉลาดพอ" ตั้งคำถาม "เพื่อจุดประสงค์อะไร?" ยังคงมีแอปพลิเคชัน (ส่วนใหญ่สำหรับแพลตฟอร์มแบบฝังที่ จำกัด มาก) ซึ่งคุณจะไม่เขียนด้วย Common LISP เนื่องจากการเพิ่มประสิทธิภาพยังไม่สามารถกำจัดค่าโสหุ้ยในการดำเนินการทั้งหมดจากการพิมพ์แบบไดนามิกการจัดสรรฮีปและการรวบรวมขยะ แน่นอน Common LISP นั้นไม่ซ้ำกันในเรื่อง "ความล้มเหลว" ยังไม่พบภาษาใดในป่าที่เหมาะสมกับทุกสิ่งอย่างแท้จริง
Steve314

@ Steve314: เป้าหมายของ Lucid CL คือตลาดสำหรับระบบ AI ที่ใช้ระบบ Lisp ขนาดใหญ่, ระบบ CAD และอื่น ๆ บนเวิร์กสเตชันและเซิร์ฟเวอร์ Unix เป้าหมาย Lucid CL ไม่ใช่ระบบฝังตัว Lucid CL จะจัดการกับค่าใช้จ่ายในการพิมพ์แบบไดนามิกการจัดสรรฮีปและพื้นที่การปรับให้เหมาะสมอื่น ๆ อีกมากมายรวมถึงตัวรวบรวมขยะที่มีประสิทธิภาพ ถึงกระนั้น GC เป็นสิ่งจำเป็นส่วนใหญ่ แอปพลิเคชันโดยทั่วไปใช้เทคนิคพิเศษเพื่อหลีกเลี่ยงการ consing และดังนั้นเพื่อลดอัตรา GC เช่นกลุ่มทรัพยากร
Rainer Joswig

21

เมื่อบทความนี้ถูกเขียนขึ้นในปี 1984 คอมพิวเตอร์ที่มี RAM 1 เมกะไบต์และฮาร์ดไดรฟ์ 20 เมกะไบต์ซึ่งสามารถนั่งบนโต๊ะทำงานของคุณเป็นเรื่องใหญ่ โดยปกติแล้วข้อพิพาทจะเกิดขึ้นในทางปฏิบัติของภาษาในระดับสูงเนื่องจาก Lisp ใช้ฮาร์ดแวร์ที่สปาร์ตัน ความก้าวหน้าของทั้งฮาร์ดแวร์และเทคโนโลยีคอมไพเลอร์ที่เกิดขึ้นตั้งแต่นั้นทำให้โปรแกรม Lisp ง่ายต่อการเขียนและดำเนินการโดยไม่คำนึงถึงความไร้ประสิทธิภาพของตัวเลขที่อาจมีอยู่ในภาษา

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

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

ในระยะสั้นสถานการณ์วันนี้ดีกว่ามากแล้ว

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