อ่าน 6 นาที
จีเอ็นยู ไกล์
ภาษาอัจฉริยะสากลของ GNU สำหรับส่วนขยาย ( GNU Guile ) เป็นระบบภาษาส่วนขยาย ที่ได้รับความนิยมสำหรับ โครงการ GNU และมีการนำภาษาโปรแกรมSchemeมาใช้ เวอร์ชันแรกได้รับการเผยแพร่ในปี 1993.
จีเอ็นยู ไกล์
| จีเอ็นยู ไกล์ | |
|---|---|
| ตระกูล | ลิสป์ |
| ออกแบบโดย | ออเบรย์ จาฟเฟอร์, ทอม ลอร์ด, ไมล์ส เบเดอร์ |
| นักพัฒนา | โครงการ GNU |
| ปรากฏครั้งแรก | 1993 [ 1 ] |
| เวอร์ชันเสถียร | 3.0.11 [ 2 ] / 1 ธันวาคม 2025 |
| แพลตฟอร์ม | IA-32 , x86-64 , AArch64 , อาร์เมล , armhf , mips , mips64el , mipsel , ppc64el , s390x |
| โอเอส | ลินุกซ์ , บีเอสดี , วินโดวส์ (ผ่านMinGWหรือCygwin ) |
| ใบอนุญาต | LGPL-3.0 หรือเวอร์ชันที่ใหม่กว่า |
| นามสกุลไฟล์ | .scm .go (อ็อบเจ็กต์ Guile) |
| เว็บไซต์ | gnu.org/software/guile |
| ได้รับอิทธิพลจาก | |
| ลิสป์ , สกีม , เอสซีเอ็ม | |
ภาษาอัจฉริยะสากลของ GNU สำหรับส่วนขยาย[ 3 ] ( GNU Guile ) เป็นระบบภาษาส่วนขยาย ที่ได้รับความนิยมสำหรับ โครงการ GNU [ 4 ]และมีการนำภาษาโปรแกรมSchemeมาใช้ เวอร์ชันแรกได้รับการเผยแพร่ในปี 1993 [ 1 ] นอกเหนือจากส่วนใหญ่ของมาตรฐาน Scheme แล้วGuile Schemeยังรวมถึงส่วนขยายแบบโมดูลาร์สำหรับงานเขียนโปรแกรมที่แตกต่างกันมากมาย[ 5 ] [ 6 ]
สำหรับการขยายโปรแกรม Guile มีlibguileซึ่งช่วยให้สามารถฝังภาษาลงในโปรแกรมอื่น ๆ และผสานรวมอย่างใกล้ชิดผ่านอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) ของ ภาษาCในทำนองเดียวกันประเภทข้อมูล ใหม่ และรูทีนย่อยที่กำหนดผ่าน API ของภาษา C สามารถนำมาใช้เป็นส่วนขยายของ Guile ได้[ 7 ]
Guile ถูกใช้ในโปรแกรมหลายโปรแกรมภายใต้โครงการ GNU ( GDB , Make , Guix , GNU TeXmacs , GnuCash , LilyPond , Lepton-EDA ...) [ 8 ]แต่ก็มีการใช้งานนอกเหนือจากนั้นด้วย เช่น ในschism ของ Google
แผนการอันแยบยล
Guile Scheme เป็นภาษาโปรแกรมระดับสูงอเนกประสงค์ที่มีความยืดหยุ่นสูง ช่วยให้สามารถแสดงแนวคิดต่างๆ ได้ด้วยโค้ดจำนวนบรรทัด น้อย กว่าภาษาอื่นๆ เช่นCตัวอย่างเช่นระบบมาโครแบบสุขอนามัย ของ Guile ช่วยให้สามารถเพิ่มองค์ประกอบไวยากรณ์เฉพาะโดเมนได้โดยไม่ต้องแก้ไข Guile Guile ใช้มาตรฐาน Scheme R5RS, R6RS และ R7RS ส่วนใหญ่[ 9 ]คำขอการใช้งาน Scheme (SRFI) หลายรายการและส่วนขยายอื่นๆ อีกมากมาย
แนวคิดหลักของ Guile Scheme คือ "นักพัฒนาใช้อัลกอริธึมและโครงสร้างข้อมูลที่สำคัญใน C หรือ C++ และส่งออกฟังก์ชันและประเภทเพื่อใช้โดยโค้ดที่ตีความ แอปพลิเคชันจะกลายเป็นไลบรารีของฟังก์ชันพื้นฐานที่จัดการโดยตัวตีความ ซึ่งรวมประสิทธิภาพของโค้ดที่คอมไพล์เข้ากับความยืดหยุ่นของการตีความ" [ 10 ] ดังนั้น Guile Scheme (และภาษาอื่นๆ ที่ Guile นำมาใช้) สามารถขยายได้ด้วยประเภทข้อมูลและรูทีนย่อย ใหม่ๆ ที่นำมาใช้ผ่าน C API
การแจกจ่ายมาตรฐานมีโมดูลสำหรับการเรียกใช้ระบบ Portable Operating System Interface ( POSIX ) การจัดตารางเวลาอิน เทอร์ เฟซฟังก์ชันภายนอก การประมวลผล XMLตาม นิพจน์ S ผ่านSXML , SXPath และ SXSLT HTTPและAPI อื่นๆ ของ World Wide Web การต่อเนื่องที่คั่นด้วยตัวคั่นการ เขียน โปรแกรมอาร์เรย์[ 11 ]และฟังก์ชันอื่นๆ[ 5 ] [ 6 ] โปรแกรม Guile สามารถใช้สิ่งอำนวยความสะดวกจากSLIBซึ่งเป็นไลบรารี Scheme แบบพกพาได้[ 12 ]
รายละเอียดการดำเนินการ
เมื่อใช้continuationsกับcall/ccซึ่งเป็นข้อกำหนดของมาตรฐาน Scheme นั้น Guile จะคัดลอกสแต็ก การดำเนินการ ไปยังฮีปแล้วคัดลอกกลับมา[ 13 ]คู่มือแนะนำให้ใช้ continuations แบบ delimited แทน เนื่องจากมีการใช้งานที่มีประสิทธิภาพมากกว่า[ 14 ]
เนื่องจากโค้ดต่างประเทศอาจมีตัวชี้ไปยังวัตถุ Scheme Guile จึงใช้ตัวเก็บขยะแบบอนุรักษ์นิยมBoehm – Demers–Weiser (BDW) [ 15 ]
ประวัติศาสตร์
คู่มือ Guile ให้รายละเอียดเกี่ยวกับการเริ่มต้นและประวัติศาสตร์ช่วงแรกของภาษา[ 16 ] สรุปโดยย่อมีดังนี้:
หลังจากความสำเร็จของEmacsใน ชุมชน ซอฟต์แวร์เสรีในฐานะแอปพลิเคชันที่ขยายและปรับแต่งได้สูงผ่านภาษาส่วนขยาย (และการใช้งานบางส่วน) Emacs Lispชุมชนเริ่มพิจารณาว่ากลยุทธ์การออกแบบนี้สามารถนำไปใช้กับระบบ GNU ส่วนที่เหลือได้อย่างไร Tom Lord เริ่มทำงานเกี่ยวกับรันไทม์ภาษาแบบฝังตัวที่ชื่อว่า GNU Extension Language (GEL) ซึ่งอิงตามการใช้งาน Scheme ของ Aubrey Jaffer ที่ชื่อSCM (ซึ่งอิงตามSIOD ของ George Carrette ) [ 17 ] [ 18 ] Lord โน้มน้าวRichard Stallmanให้ GEL เป็นภาษาส่วนขยายอย่างเป็นทางการของโครงการ GNU โดยให้เหตุผลว่า Scheme เป็น ภาษา Lisp ที่สะอาด กว่า Emacs Lisp และ GEL สามารถพัฒนาเพื่อใช้งานภาษาอื่น ๆ บนรันไทม์เดียวกันได้ นั่นคือ Emacs Lisp หลังจากที่ Lord ค้นพบว่า GEL มีความขัดแย้งด้านชื่อกับภาษาโปรแกรมอื่น เขาจึงขอคำแนะนำสำหรับชื่อใหม่ จากการมีส่วนร่วมหลายครั้งในกลุ่มข่าว Usenet หลาย กลุ่ม ลอร์ดได้เลือก Guile อย่างเป็นที่ถกเถียงจากคำแนะนำของลี โทมัส[ 19 ] [ 20 ] [ 21 ] [ 22 ]
ในระหว่างการพัฒนา Guile (ในขณะนั้นคือ GEL) และก่อนการเปิดตัวสู่สาธารณะ ภาษาส่วนขยายTclกำลังได้รับความนิยมและถูกผลักดันให้เป็นภาษาส่วนขยายสากล Stallman เห็นว่า Tcl มีประสิทธิภาพน้อยเกินไปในฐานะภาษาส่วนขยาย และได้โพสต์คำวิจารณ์ไปยังกลุ่มข่าว comp.lang.tcl ซึ่งก่อให้เกิดสงครามโต้เถียงที่รู้จักกันในชื่อ "สงคราม Tcl" [ 23 ]เนื่องจากการประกาศโครงการ Guile สู่สาธารณะเกิดขึ้นพร้อมกับการถกเถียงเรื่อง Tcl จึงกลายเป็นความเข้าใจผิดทั่วไปว่า Guile เริ่มต้นจากการตอบสนองต่อเรื่องนี้
หลังจากการเปิดตัว Guile ครั้งแรก การพัฒนาก็หยุดชะงักไปหลายปี แต่ในปี 2009–2010 ก็มีการปรับปรุงครั้งใหญ่[ 24 ]และ Guile 2.0 ก็ได้เปิดตัวในปี 2011 พร้อมโครงสร้างพื้นฐานคอมไพเลอร์ ใหม่ การใช้งาน เครื่องเสมือนการเปลี่ยนไปใช้ตัวเก็บขยะ Boehm–Demers–Weiserการปรับปรุงภาษา Guile Scheme หลายอย่าง และการเปลี่ยนแปลงครั้งสำคัญอื่นๆ[ 25 ]
หนึ่งในเป้าหมายของ Guile คือการอนุญาตให้ใช้ภาษาอื่นควบคู่ไปกับ Scheme เพื่อให้ Guile เป็นสภาพแวดล้อมรันไทม์ที่เป็นกลางทางภาษาอย่างแท้จริง ความพยายามต่างๆ ในเวอร์ชันก่อนหน้าได้เกิดขึ้นแล้ว เช่นภาษาถิ่นของ Scheme ที่แตกต่างกันโดยพื้นฐานแล้วเฉพาะไวยากรณ์ที่คล้ายกับ C การแปลEmacs Lispตัวแปลง Tcl ที่ได้รับแรงบันดาลใจจากtkWWWและสิ่งที่คล้ายกับภาษาLogo [ 26 ] ใน เวอร์ชัน 2.0 โครงการได้เปลี่ยนไปใช้ แนวทาง หอคอยคอมไพเลอร์ สำเร็จ ซึ่งอนุญาตให้กำหนดคอมไพเลอร์จากภาษาหนึ่งไปยังอีกภาษาหนึ่ง โดยทั่วไปจากภาษาระดับสูงไปยัง การแสดงแทนระดับกลางระดับต่ำและในที่สุดก็เป็นไบต์โค้ดเครื่องเสมือน หรือโค้ดเครื่อง ดั้งเดิม [ 27 ] [ 28 ]
เมื่อวันที่ 16 มีนาคม 2017 Guile 2.2.0 ได้รับการเผยแพร่พร้อมคอมไพเลอร์ที่ปรับแต่งใหม่และรีจิสเตอร์เสมือนประสิทธิภาพสูง ตามประกาศการเผยแพร่โดย Andy Wingo โปรแกรมในโลกแห่งความเป็นจริงมักแสดงความเร็วที่เพิ่มขึ้น 30% หรือมากกว่านั้นเมื่อใช้ Guile 2.2 เมื่อเทียบกับซีรี่ส์ 2.0 ก่อนหน้า Guile 2.2.0 ยังลดการใช้หน่วยความจำ เพิ่มความเร็วของตัวแปล "eval" ให้การสนับสนุนที่ดีขึ้นสำหรับการเขียนโปรแกรมแบบมัลติคอร์ และลบข้อจำกัดคงที่ใดๆ เกี่ยวกับการเรียกฟังก์ชันแบบเรียกซ้ำ นอกจากนี้ยังสนับสนุนการสร้างสิ่งอำนวยความสะดวกในการทำงานพร้อมกันในพื้นที่ผู้ใช้ที่มัลติเพล็กซ์ "ไฟเบอร์" น้ำหนักเบาหลายล้านรายการพร้อมกัน และให้การใช้งาน Elisp ที่เข้ากันได้กับ Emacs อย่างสมบูรณ์ โดยใช้งานคุณสมบัติและข้อบกพร่องทั้งหมดของ Elisp ในลักษณะเดียวกับ Emacs [ 29 ]
เมื่อวันที่ 16 มกราคม 2020 Guile 3.0.0 ได้รับการเผยแพร่พร้อมกับการสร้างโค้ดเนทีฟแบบทันเวลา ( JIT ) เพื่อประสิทธิภาพที่ดียิ่งขึ้น เมื่อเทียบกับเวอร์ชัน 2.2 ประสิทธิภาพการทดสอบไมโครเบนช์มาร์คโดยรวมดีขึ้นประมาณสองเท่า ในขณะที่การทดสอบเบนช์มาร์คบางรายการเร็วขึ้นถึง 32 เท่า นอกจากนี้ยังมีการรองรับคำจำกัดความและการแสดงออกที่สลับกันในบริบททางศัพท์ การรองรับข้อยกเว้นที่มีโครงสร้างแบบเนทีฟ การรองรับมาตรฐาน Scheme R6RS และ R7RS ที่ดีขึ้น และการเพิ่มประสิทธิภาพอีกมากมาย[ 30 ] [ 31 ]
| 1958 | 1960 | พ.ศ. 2508 | 1970 | พ.ศ. 2518 | 1980 | พ.ศ. 2528 | 1990 | พ.ศ. 2538 | 2000 | 2548 | 2010 | 2015 | 2020 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LISP 1, 1.5, LISP 2 (เลิกพัฒนาแล้ว) | |||||||||||||||
| แมคลิสป์ | |||||||||||||||
| อินเตอร์ลิสป์ | |||||||||||||||
| เอ็มดีแอล | |||||||||||||||
| เครื่องลิสป์ ลิสป์ | |||||||||||||||
| โครงการ | อาร์5อาร์เอส | อาร์6อาร์เอส | R7RS ขนาดเล็ก | ||||||||||||
| ไม่มี | |||||||||||||||
| ZIL (ภาษาการใช้งาน Zork) | |||||||||||||||
| ฟรานซ์ ลิสป์ | |||||||||||||||
| มิวลิสป์ | |||||||||||||||
| ลิสปาร์กทั่วไป | มาตรฐาน ANSI | ||||||||||||||
| เลอ ลิสป์ | |||||||||||||||
| โครงการ MIT | |||||||||||||||
| เอ็กซ์แอลไอเอสพี | |||||||||||||||
| ที | |||||||||||||||
| เชซ สกีม | |||||||||||||||
| อีแมคส์ ลิสป์ | |||||||||||||||
| ออโต้ลิสป์ | |||||||||||||||
| พิโคลิสป์ | |||||||||||||||
| กลเม็ด | |||||||||||||||
| ยูลิสป์ | |||||||||||||||
| ไอเอสลิสป์ | |||||||||||||||
| โอเพ่นลิสป์ | |||||||||||||||
| โครงการ PLT | แร็กเก็ต | ||||||||||||||
| นิวลิสปาร์ | |||||||||||||||
| จีเอ็นยู ไกล์ | |||||||||||||||
| วิชวล LISP | |||||||||||||||
| โคลจูร์ | |||||||||||||||
| อาร์ค | |||||||||||||||
| แอลเอฟอี | |||||||||||||||
| ไฮ | |||||||||||||||
การผสานรวม Emacs
ที่ผ่านมามีความพยายามหลายครั้งที่ไม่สำเร็จในการแทนที่หรือเสริม ภาษาส่วนขยาย Emacs Lispด้วย Guile ควบคู่ไปกับความพยายามในการสนับสนุนภาษาอื่นๆ ใน Guile
ด้วย Guile เวอร์ชัน 2.0 ความพยายามครั้งใหม่ในการใช้งาน Elisp บนคอมไพเลอร์ Guile และการแทนที่การใช้งาน Elisp ของ Emacs ด้วย libguile ได้เริ่มต้นขึ้นและมีความคืบหน้าอย่างมากผ่านโครงการGoogle Summer of Code [ 32 ] Emacs ที่ใช้ Guile สามารถให้ประสิทธิภาพการทำงานที่ดีขึ้นสำหรับ Emacs Lisp รองรับคุณสมบัติภาษา Emacs Lisp ใหม่ได้ง่ายขึ้น ทำให้ไลบรารี Guile ที่เขียนด้วยภาษาโปรแกรมอื่น ๆ สามารถใช้งานได้กับโค้ด Emacs Lisp และอนุญาตให้เขียนส่วนขยาย Emacs ในภาษาโปรแกรมอื่น ๆ ที่ Guile รองรับ ทั้งหมดนี้ในขณะที่ยังคงเข้ากันได้กับฐานโค้ด Emacs Lisp ที่มีอยู่เดิมอย่างสมบูรณ์
ณ เดือนตุลาคม 2557 การใช้งานมาถึงขั้นที่ Guile Emacs สามารถรันโค้ด Emacs Lisp ส่วนใหญ่ได้อย่างน่าเชื่อถือ ปัญหาที่เหลืออยู่หรือปัญหาที่อาจเกิดขึ้น ได้แก่ การแสดงสตริง Emacs Lisp ภายในที่แตกต่างจากสตริง Scheme ความแตกต่างระหว่างวิธีที่ Emacs Lisp และ Scheme จัดการกับออบเจ็กต์รายการ Boolean ที่เป็นเท็จและว่างเปล่า มาโคร Emacs Lisp ไม่สามารถทำงานร่วมกับ Scheme ได้ Emacs Lisp ไม่ได้ถูกออกแบบมาสำหรับการทำงานพร้อมกัน และความสามารถในการพกพาของ Guile ไปยังแพลตฟอร์มที่ Emacs รองรับ ข้อกังวลอื่นๆ ที่ชุมชน Emacs ยกขึ้นมา ได้แก่ ขนาดสัมพัทธ์ของชุมชน Emacs และ Guile และว่าจะทำให้เกิดการแตกแยกในชุมชนหรือไม่หาก Emacs สามารถขยายได้ในภาษาการเขียนโปรแกรมอื่นนอกเหนือจาก Emacs Lisp [ 33 ]
ในงาน EmacsConf 2024 มีการประกาศเปิดตัว Guile-Emacs อีกครั้ง[ 34 ] [ 35 ]
การผสานรวม GNU Make
GNU makeสามารถสร้างได้โดยรองรับ GNU Guile เป็นภาษาส่วนขยายแบบฝังตัว[ 36 ]
อ่านเพิ่มเติม
- "กายวิภาคของ Guile อินเทอร์เฟซสำหรับ Tcl/Tk" (1995)
- แบลนดี, จิม (1998). ปีเตอร์ เอช. ซาลัส (บรรณาธิการ). "Guile: แกนหลักของตัวแปลภาษาสำหรับแอปพลิเคชันที่สมบูรณ์"คู่มือภาษาการเขียนโปรแกรม IV: ภาษาการเขียนโปรแกรมเชิงฟังก์ชันและตรรกะ (ฉบับที่ 1). สำนักพิมพ์เทคนิคแมคมิลแลน: 87–104 . ISBN 1-57870-011-6.
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ
- คู่มืออ้างอิง Guileในรูปแบบเว็บเพจยาวหน้าเดียว
- ซอร์สโค้ดบน แพลตฟอร์ม พัฒนาซอฟต์แวร์GNU Savannah
- เล่ห์เหลี่ยมคืออะไร?
- "ประวัติโดยย่อของกลลวง" (จากคู่มือกลลวง)
- บทสัมภาษณ์ในปี 2003 กับ Marius Vollmer ผู้ดูแล GNU Guile
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ จีเอ็นยู ไกล์
ภาษาอัจฉริยะสากลของ GNU สำหรับส่วนขยาย ( GNU Guile ) เป็นระบบภาษาส่วนขยาย ที่ได้รับความนิยมสำหรับ โครงการ GNU และมีการนำภาษาโปรแกรมSchemeมาใช้ เวอร์ชันแรกได้รับการเผยแพร่ในปี 1993.
แผนการอันแยบยล
Guile Scheme เป็น ภาษาโปรแกรมระดับสูง อเนกประสงค์ ที่ มีความยืดหยุ่นสูง ช่วยให้สามารถแสดงแนวคิดต่างๆ ได้ด้วย โค้ดจำนวนบรรทัด น้อย กว่าภาษาอื่นๆ เช่น C ตัวอย่างเช่น ระบบมาโครแบบสุขอนามัย ของ Guile...
รายละเอียดการดำเนินการ
เมื่อใช้ continuations กับ call/cc ซึ่งเป็นข้อกำหนดของมาตรฐาน Scheme นั้น Guile จะคัดลอก สแต็ก การดำเนินการ ไปยัง ฮีป แล้วคัดลอกกลับมา [ 13 ] คู่มือแนะนำให้ใช้ continuations แบบ delimited แทน เนื่องจากมีการใช้งานที่มีประสิทธิภาพมากกว่า [ 14 ]
ประวัติศาสตร์
คู่มือ Guile ให้รายละเอียดเกี่ยวกับการเริ่มต้นและประวัติศาสตร์ช่วงแรกของภาษา [ 16 ] สรุปโดยย่อมีดังนี้: