คุณต้องการหาจุดสมดุลระหว่างความเรียบง่ายและความสะอาดคุณสมบัติที่น่าดึงดูดและแพลตฟอร์มที่จะช่วยให้คุณเขียนซอฟต์แวร์ที่น่าสนใจและมีประโยชน์ (สำหรับตัวคุณเอง) รวมทั้งเป็นเครื่องมือในการเรียนรู้ (สุดท้ายนี้จะทำให้คุณไปต่อและเรียนรู้ได้นานขึ้น) นี่คือความเป็นไปได้บางประการ:
โครงการ น่าจะเป็นภาษาถิ่นที่สะอาดที่สุด ไม่ต้องสงสัยเลยว่าทำไมThe Little Schemerจึงแปลจาก LISP เป็น Scheme ข้อกำหนดมาตรฐานโครงการที่ 5 คือR5RSเป็นการศึกษาที่ยอดเยี่ยมในตัวของมันเอง อาจเป็นภาษาและข้อกำหนดของห้องสมุดที่ดีที่สุดที่ฉันเคยอ่านและสั้นที่สุดที่มีเหตุผลครอบคลุม PLT Scheme (ตอนนี้ไม้) แพลตฟอร์มรวมถึงล่ามค่อนข้างดีและคอมไพเลอร์เป็นสิ่งที่ดีสำหรับการเขียนสคริปต์และยังมีเครื่องมือที่มองเห็นบางอย่างที่ทำให้มันยอดเยี่ยมสำหรับการเรียนรู้
เสียงกระเพื่อมธรรมดา อาจเป็นตัวแปรที่พกพาได้และครอบคลุมมากที่สุดนี่เป็นสิ่งที่คุณต้องการมากที่สุดหากคุณต้องการเขียนสิ่งต่างๆเช่นซอฟต์แวร์เชิงพาณิชย์ มาตรฐานกำหนดไลบรารีที่กว้างขวางและอื่น ๆ อีกมากมายที่มีอยู่นอกเหนือจากนั้นก็มีCLOSซึ่งอาจจะสอนคุณเกี่ยวกับ OO ได้มากกว่าภาษา OO ใด ๆ และคอมไพเลอร์บางตัวก็ดีมาก ข้อเสียรวมถึงหูดบางตัวที่ Scheme ไม่มี (เช่นการมีเนมสเปซแยกต่างหากสำหรับตัวแปรที่อ้างถึงฟังก์ชัน) ไม่สะอาดและเรียบง่าย (เช่นเดียวกับสิ่งใดก็ตามที่ต้องมีส่วนขยายและทำให้การประนีประนอมเป็นสิ่งจำเป็น สำหรับแอปพลิเคชันขนาดใหญ่ในโลกแห่งความเป็นจริง) ไม่มีมาโครที่ถูกสุขอนามัยและเน้นการเรียกซ้ำน้อยกว่า Scheme มาก
Clojureสิ่งนี้ทำงานบน JVM ซึ่งอาจทำให้เป็นขาขึ้นสำหรับนักพัฒนา Java มีหูดอยู่สองสามอย่าง (เช่นคุณต้องขอการเพิ่มประสิทธิภาพการโทรหางอย่างชัดเจนแม้ว่าสิ่งนี้อาจเปลี่ยนแปลงได้ในวันหนึ่งหากเพิ่ม TCO ลงใน JVM) แม้ว่ามาโครจะไม่ถูกสุขอนามัย แต่ก็มีคุณสมบัติบางอย่างที่จะช่วยคุณหลีกเลี่ยงการจับตัวแปรดังนั้นคุณจึงสามารถจับตัวแปรได้หากคุณต้องการจริงๆในขณะที่มีความเสี่ยงน้อยกว่าที่จะทำโดยไม่ได้ตั้งใจมากกว่าใน CL คุณสามารถเข้าถึงไลบรารี Java ทั้งหมดได้อย่างง่ายดาย นั่นอาจเป็นสิ่งที่ดีสำหรับโค้ด "โลกแห่งความจริง" และค่อนข้างไม่มีจุดหมายในแง่ของการเรียนรู้ มีชุดของไลบรารีสำหรับโครงสร้างข้อมูลถาวรและรองรับ STM ซึ่งทำให้น่าสนใจมากจากมุมมองที่เกิดขึ้นพร้อมกัน นี่อาจเป็นทางออกที่ดีที่สุดของคุณถ้าคุณ สนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการใหม่ ๆ ในการจัดการกับการเขียนโปรแกรมพร้อมกันและคู่ขนาน ดูเหมือนว่า Clojure สามารถใช้งานได้กับแอปพลิเคชันที่ใช้งานจริงขนาดใหญ่เช่นเดียวกับ Java ในแง่ที่ว่ามันจะมีความสามารถในการทำ "สิ่งที่น่าเกลียด" ที่คุณทำในแอปที่ใช้งานจริงซึ่งคุณไม่อยากทำและไม่ทำ เมื่อคุณกำลังเรียนรู้
Emacs Lisp ในแง่ของ LISP นี่ไม่ใช่หนึ่งในตัวอย่างที่ดีกว่าที่นั่น ข้อผิดพลาดที่ใหญ่ที่สุดประการหนึ่งคือการกำหนดขอบเขตแบบไดนามิก แต่ยังมีอีกหลายประการ อย่างไรก็ตามหากคุณเป็นผู้ใช้ Emacs นี่อาจเป็นเครื่องมือที่ทรงพลังที่สุดที่คุณสามารถเรียนรู้เพื่อปรับปรุงการใช้โปรแกรมแก้ไขของคุณ คุณได้เรียนรู้จากการเรียนรู้ Emacs Lisp มากแค่ไหนนอกเหนือจากวิธีการขยาย Emacs เป็นคำถามเปิดสำหรับฉัน ฉันไม่รู้ว่าเทคนิคที่น่าสนใจเช่นฟังก์ชันลำดับสูงถูกนำมาใช้ใน Emacs Lisp บ่อยเพียงใด
อัปเดต 2018
เป็นเวลาเกือบสิบปีแล้วที่ฉันเขียนโพสต์นี้และตระกูลภาษา Lisp ดูเหมือนจะได้รับแรงฉุดอย่างมีนัยสำคัญในจิตสำนึกของโปรแกรมเมอร์ทั่วไป สิ่งนี้ดูเหมือนจะเกี่ยวข้องกับ Clojure ซึ่งไม่เพียง แต่กลายเป็นภาษาถิ่นที่แยกจากกันอย่างถูกต้องของ Lisp ในสิทธิของตัวเองเท่านั้นการนำเสนอแนวคิดดีๆมากมายของตัวเอง แต่ตอนนี้ยังมีเวอร์ชันที่ใกล้เคียงกับ JavaScript ที่กำหนดเป้าหมายและได้สร้างแรงบันดาลใจให้ Lisps อื่น ๆ อีกมากมาย กำหนดเป้าหมายแพลตฟอร์มอื่น ๆ ตัวอย่างเช่นHyกำหนดเป้าหมาย CPython AST และ bytecode โดยมุ่งเป้าไปที่ความสามารถในการทำงานร่วมกันกับ Python ก่อน แต่ใช้แนวคิด Clojure "เมื่อมีข้อสงสัย" (แม้ว่าจากการกระทำครั้งล่าสุดข้อหลังอาจจะเปลี่ยนไปเล็กน้อย)
การเปลี่ยนแปลงครั้งใหญ่ที่นำมาสู่กระบวนการตัดสินใจของคุณคือคุณควรดูว่าภาษาลิสป์หรือภาษาลิสป์ใดที่มีให้ใช้งานและทำงานร่วมกับภาษาหรือแพลตฟอร์มที่คุณใช้อยู่แล้วไม่ว่าจะเป็นPerl , Ruby , Erlang , Goหรือแม้แต่c ++ บนไมโครคอนโทรลเลอร์