คุณจะใช้ (ภาษาถิ่น) LISP สำหรับแอปพลิเคชันจริงหรือไม่? ที่ไหนและทำไม [ปิด]


31

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

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


6
emacs นับเป็นแอปพลิเคชั่น "โลกแห่งความจริง" หรือไม่? gnu.org/software/emacs/emacs-lisp-intro
S.Lott

1
@ S.Lott: ใช่ หากคุณใช้ elisp ในการสร้างส่วนขยายสำหรับ Emac นั่นเป็นเรื่องปกติและแอปพลิเคชันของภาษา LISP
Anto

GNU Guile มีจุดประสงค์เพื่อจุดประสงค์นี้อย่างแท้จริง

1
ในขณะที่น่าสนใจฉันไม่คิดว่าคำถามนี้เหมาะสำหรับไซต์นี้อีกต่อไป มีหลายเหตุผล: 1- กว้างเกินไป 2- มันเชิญรายการคำตอบ 3- ไม่มีวิธีที่ชัดเจนในการตัดสินใจว่าคำตอบที่ "ถูกต้อง" คืออะไร 4- แปลเป็นภาษาท้องถิ่นในเวลาเกินไป ("ยังไม่ได้รับการสนับสนุนอุตสาหกรรมมาก") 5- มันเชิญอภิปรายและอภิปราย
Andres F.

คำตอบ:


18

คุณจะใช้ภาษา LISP สำหรับโปรแกรมการผลิตหรือไม่?

อย่างแน่นอน

โปรแกรมประเภทใดและเพราะเหตุใด

เสียงกระเพื่อมเป็นภาษาไดนามิกวัตถุประสงค์ทั่วไป วันนี้มันมีปัญหาพื้นฐานเช่นเดียวกับภาษาไดนามิกวัตถุประสงค์ทั่วไปอื่น ๆ ที่ไม่ได้เผยแพร่โดย Microsoft: เธรดพื้นเมือง, การรวม GUI, การดำเนินการที่กำหนดของ GC และหน่วยความจำขนาดเล็ก

LispWorks และ SBCL ประสบความสำเร็จฉันเชื่อว่า อาจเป็นไปได้ที่คนอื่น ๆ ? ฉันยังไม่ได้ตรวจสอบอย่างเต็มที่

LispWorks และ Franz Common Lisp - ผลิตภัณฑ์เชิงพาณิชย์ - รวมเข้ากับ GUI เพื่อระดับความสำเร็จ ไม่มีการซื้อ $$ ฉันไม่ทราบว่ามันใช้งานได้ดีเพียงใด ฉันสงสัยว่าพวกเขาทำงานได้ค่อนข้างดี ...

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

ฉันเชื่อว่าสามารถทำได้ในบางพื้นที่ของหน่วยความจำขนาดเล็ก

จุดพื้นฐานของฉันคือ Common LISP พร้อมทางเทคนิคในการสร้างระบบการผลิต และมันก็เป็นเช่นนั้น

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

โดยส่วนตัวแล้วฉันจะกระโดดไปที่การสร้างระบบการผลิตแบบเต็มเปี่ยมใน Common Lisp จากพื้นดินในสภาพแวดล้อมแบบทีม

แก้ไข: ฉันไม่ได้ตอบว่าทำไมเสียงกระเพื่อมเมื่อเทียบกับภาษาอื่น ๆ

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

ตัวอย่างแบบง่าย ๆ อย่างหนึ่งคือชุดคำสั่งยาวของ Python len(mysequence)วิธีหลามคือการโทร แต่ถ้าเราคิดถึงมันความยาวคือสมบัติของลำดับ ดังนั้นจึงmysequence.len()เป็นความคิดที่เหมาะสมกว่า เสียงกระเพื่อมเป็นลบความแตกต่างของวากยสัมพันธ์ที่ (length thing)เป็นทั้งไวยากรณ์การเรียกใช้ฟังก์ชันและไวยากรณ์ของวิธีการ แน่นอนว่าบางคนพบว่าน่าผิดหวังและต้องการความแตกต่างทางวากยสัมพันธ์ ฉันอยากจะมีระเบียบ

แก้ไข 2: ฉันแปลงส่วนของวิทยานิพนธ์ MS ของฉันที่ทำงานบนเดสก์ท็อปเป็น Common LISP และมันก็เป็นความสุขที่ได้ทำงานด้วย


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

4
@ เฟร็ด: ใช่แล้วนั่นคือกฎข้อที่ n ของ Greenspun และกฎของ jwz
พอลนาธาน

2
จำนวนมากเหล่านี้แก้ไขได้โดย Clojure เพียงแค่อาศัยการออกแบบมาโดยเฉพาะเพื่อให้เข้ากันได้และแทนที่ Java แต่แน่นอนว่ายังมีการใช้ Scheme และ CL สำหรับ JVM เช่นกัน (เช่น Kawa, ABCL)
Jörg W Mittag

4
Clojure สร้างความรำคาญให้ฉันเพราะมันเป็นอีกส่วนหนึ่ง
พอลนาธาน

การกระจายตัวไม่ได้เป็นสิ่งที่ไม่ดี สิ่งที่น่ารำคาญจริงๆใน Clojure คือการขาดคู่ประ สามารถนับเป็นภาษาที่เหมือนเสียงกระเพื่อมโดยปราศจากสิ่งพื้นฐานได้หรือไม่?
SK-logic

11

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

ฉันพบว่ามันเป็นประสบการณ์ที่แจ่มใสมากในการเรียนรู้ 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สำหรับการนำเสนอที่น่าสนใจเกี่ยวกับสิ่งนี้
  • การพัฒนาเชิงโต้ตอบที่ REPLเป็นวิธีที่ยอดเยี่ยมในการสร้างแอปพลิเคชัน มันให้ความรู้สึกถึงพลังที่แท้จริงในการปรับเปลี่ยนโค้ดแอปพลิเคชันที่ทำงานอยู่ของคุณและตรวจสอบโครงสร้างข้อมูลสดแบบมีโปรแกรม

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

  • การทำงานบน JVM ด้วย Java interoperabilitiy ที่ง่ายมากช่วยให้คุณเข้าถึงไลบรารีและเครื่องมือทั้งหมดในระบบนิเวศ Java
  • คุณกำลังใช้งาน JVM ซึ่งเป็นแพลตฟอร์มที่ทดลองและทดสอบแล้วสำหรับแอปพลิเคชันระดับองค์กร Clojure ได้รับประโยชน์จากคุณสมบัติ JVM ที่ดีเช่นการรวบรวม GC และ JIT ที่ยอดเยี่ยมฟรี
  • มันเป็นภาษาแบบไดนามิกโดยค่าเริ่มต้นซึ่งทำให้สะดวกในการพัฒนาและสร้างต้นแบบอย่างรวดเร็วด้วยแทบสำเร็จรูป อย่างไรก็ตามคุณสามารถเพิ่มคำใบ้แบบคงที่เพื่อให้ได้ประสิทธิภาพที่ดีตามที่คุณต้องการ
  • เป็นชุมชนที่เน้นการปฏิบัติและเป็นประโยชน์ - ประเภทของวัฒนธรรมที่ผู้คนทำสิ่งต่าง ๆ และให้ความสำคัญกับการแก้ปัญหาที่ออกแบบมาอย่างดีเพื่อแก้ปัญหาจริง
  • มีการสนับสนุนเครื่องมือใน IDEs ฉันเองใช้ Eclipse กับปลั๊กอินทวนเข็มนาฬิกา (เพราะฉันต้องการการรวม Java) แต่มีตัวเลือกอื่น ๆ อีกมากมาย

8

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

  • การสนับสนุนผู้ขาย การใช้ LISP ที่เราใช้ - หากมีข้อผิดพลาดและรบกวนการพัฒนาของเราและตามกำหนดเวลาของเราผู้ขายจะทำงานเพื่อแก้ไขปัญหากับเราหรือไม่?
  • สนับสนุนห้องสมุด มีห้องสมุดอะไรบ้าง การจัดการสตริง, คณิตศาสตร์, การเข้าถึงข้อมูล, เว็บเซอร์เล็ต (หรือ LISP- เทียบเท่า), ชุดเครื่องมือสำหรับหน้าต่าง ฯลฯ ... ฉันไม่ต้องการเขียนสิ่งนี้ตั้งแต่ต้น
  • สนับสนุนเครื่องมือ - IDE ดีแค่ไหน? แข็ง / มั่นคงหรือไม่สม่ำเสมอ? สนับสนุนบรรณาธิการที่ดี? ดีบักเกอร์รวม? ถ้าฉันต้องทำ GUI dev ใน LISP จะมี visual IDE หรือฉันต้องใช้รหัส GUI layout ด้วยมือ (ฉันเกลียดการทำเช่นนั้น)
  • การพัฒนา buy-in (ฉันไม่ต้องการใช้เวลามากเกินไปในการสอนเพื่อนร่วมทีมของฉันเป็นภาษาใหม่ทั้งหมด)

ปัจจัยทั้งหมดเหล่านี้จะได้รับการพิจารณาเมื่อตัดสินใจว่า LISP เหมาะสมสำหรับโครงการหรือไม่ ในโลกธุรกิจฉันไม่เคยมีประสบการณ์มาก่อน


ฉันเห็นด้วยกับคุณว่ามักจะได้รับผลกระทบมากขึ้นจากเครื่องมือและห้องสมุดที่มีอยู่มากกว่าภาษานั้น ๆ (หากภาษามีฟังก์ชั่นพื้นฐานบางอย่าง)
Giorgio

6

อย่างแน่นอน พอลเกรแฮมอธิบายมันได้ดี

... ย้อนกลับไปในปี 1995 เรารู้บางสิ่งบางอย่างที่ฉันไม่คิดว่าคู่แข่งของเราเข้าใจและยังมีอีกไม่กี่คนที่เข้าใจในตอนนี้: เมื่อคุณเขียนซอฟต์แวร์ที่ต้องทำงานบนเซิร์ฟเวอร์ของคุณเองเท่านั้นคุณสามารถใช้ภาษาที่คุณต้องการ ..

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

หาก บริษัท อื่นไม่ต้องการใช้ LISP ก็ยิ่งดีกว่ามาก มันอาจทำให้เราได้เปรียบด้านเทคโนโลยีและเราต้องการความช่วยเหลือทั้งหมดที่เราจะได้รับ ...

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

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

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


8
"... เดิม Paul Graham เขียน reddit ใน lisp ที่ด้านหลังของผ้าเช็ดปากในขณะที่เขากำลังรอกาแฟมันมีพลังมากที่ต้องเขียนใหม่ในไพ ธ อนเพื่อให้คอมพิวเตอร์ธรรมดาเข้าใจได้เพราะมัน ถูกเขียนด้วย lisp มันแทบจะไม่มีความพยายามในการเขียนสิ่งใหม่ทั้งหมดและการ rewrite นั้นเสร็จสมบูรณ์ในระหว่างรอบการประมวลผลสองรอบ Paul Graham เองก็ถูกเขียนด้วย lisp โดยเวอร์ชั่นก่อนหน้าของตัวเขาเอง รุ่นก่อนหน้าของเสียงกระเพื่อม. มันกระเพื่อม, พอลเกรแฮม, เสียงกระเพื่อม, พอลเกรแฮม, ตลอดทางลง "
John Cartwright

5

โดยที่: Emacs เป็นแอปพลิเคชั่นในโลกแห่งความจริงที่ใช้ LISP

ทำไม: มันเป็นวิธีที่ดีในการแสดงการแมประหว่างการกดแป้นและการกระทำ มันตีความและรวดเร็วและกำหนดไว้อย่างดีและง่าย


ฉันจะขยายคำตอบนี้โดยบอกว่าทำไมมันเป็นสิ่งที่ดีสำหรับการแสดงการทำแผนที่ระหว่าง ketstrokes และการกระทำ
Anto

@ ถึง: จากประสบการณ์ของฉัน Lisp ทำให้ง่ายต่อการสร้าง abstractions ที่ทรงพลังซึ่งสามารถแสดงการกระทำใด ๆ ที่คุณสามารถทำได้ในเอดิเตอร์ด้วยวิธีที่สอดคล้องกันมากๆ - หลังจากใช้ Emacs มาสักระยะหนึ่งคุณสามารถเดาได้ว่าเกือบทุกอย่างทำอะไร . สิ่งนี้ทำให้เป็นไปได้ในการแมปสิ่งที่คุณสามารถทำได้ในตัวแก้ไขกับการลากเส้นคีย์โดยการโยงแต่ละครั้งจะคล้ายกันมากกับการโยงซึ่งกันและกันทำให้ทั้งการเขียนและการบำรุงรักษาง่ายขึ้น
Tikhon Jelvis

4

ทั้งMacsymaและAutocadนั้นใช้ภาษาของ Lisp ฉันจะแบ่งพวกเขาเป็น 'โลกแห่งความจริง' และ Emacs


Mathematica ไม่ได้มีพื้นฐานมาจาก Lisp
Rainer Joswig

2
AutoCAD ให้บริการ AutoLISP เป็น API แต่เขียนในรหัสที่ได้รับการจัดการ C ++ และ. NET
CAD bloke

1
@RainerJoswig Macsyma อาจหมายถึงแทนที่จะเป็น Mathematica
user40989

2

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


2

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


0

ตอนนี้ฉันกำลังพยายามใช้ newLisp แทน Php บนเว็บไซต์ส่วนตัวของฉันผ่านทาง เฟรม Dragonfly ถ้าฉันสามารถหาวิธีที่จะทำให้ Apache เล่นได้ดีฉันจะใช้มัน (เว็บเซิร์ฟเวอร์ในตัวทำงานได้ดีมาก แต่ฉันอยากทำงานผ่าน Apache มาก) และเมื่อเกิดขึ้นฉันจะใช้ newLisp ทุกที่ที่ฉันจะใช้ Php เพราะฉันไม่ชอบ Php และฉันจะชอบ newLisp

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

แต่โดยสุจริตฉันชอบ Ruby to Lisp ... แต่นี่เป็นเรื่องของชุมชนและเอกสาร


0

ฉันใช้งานแอพพลิเคชั่นเชิงพาณิชย์ที่เป็นกรรมสิทธิ์ใน Common Lisp เรียกว่า Tankanซึ่งทำงานบน Microsoft Windows ในรูปแบบที่สามารถเรียกใช้งานได้

เป็นโปรแกรมสำหรับฝึกตัวเองให้จดจำตัวอักษรคันจิของญี่ปุ่น

โปรแกรมทำงานเป็นเซิร์ฟเวอร์ HTTP พื้นหลัง การทำงานของเซิร์ฟเวอร์นี้และการนำทางไปยังหน้าต่างๆได้รับการประสานงานโดยแอปพลิเคชั่นไอคอนแจ้งเตือนระบบเล็ก ๆ (aka "Tray") ซึ่งฉันพัฒนาขึ้นโดยใช้ Visual C ++

แอปพลิเคชั่นไอคอนถาดเล็ก ๆ จะเริ่มต้นตรวจสอบและหยุดเซิร์ฟเวอร์ที่ใช้ Lisp และสื่อสารกับมันโดยใช้ท่อ Win32 ที่เชื่อมโยงกับอินพุตและเอาต์พุตมาตรฐาน ผ่านทางไพพ์เซิร์ฟเวอร์ Lisp แจ้งแอปพลิเคชันไอคอนถาดของ URL ที่แม่นยำพร้อมหมายเลขพอร์ตที่ถูกต้องและแอปพลิเคชันไอคอนถาดนั้นสามารถเปิดเบราว์เซอร์ผ่าน Shell API เพื่อเรียกดู URL นั้น ผู้ใช้เพียงดับเบิลคลิกที่ไอคอนเพื่อแสดง UI

โปรแกรม Lisp เก็บรักษาไว้ในหน่วยความจำของตนเป็นสถานะเซสชันที่ค่อนข้างซับซ้อนซึ่งมีประวัติอินพุตของผู้ใช้และความสัมพันธ์ที่หลากหลายระหว่างวัตถุต่าง ๆ สัญกรณ์วัตถุวงกลมของ Lisp (เปิดใช้งานโดย*print-circle*ตัวแปร) และวิธีการทำงานข้าม CLOS ที่กำหนดเองprint-objectวิธีการนั้นมีส่วนช่วยอย่างมากในการใช้งานการคงอยู่: ผู้ใช้สามารถบันทึกสถานะลงในดิสก์ ทุกอย่างถูกบันทึกรวมถึงสถานะของ UI มีโครงสร้างย่อยที่ใช้ร่วมกันจำนวนมากในกราฟวัตถุเช่นเดียวกับรอบ นอกจากนี้ cruft แบบคงที่จำนวนมากที่ไม่จำเป็นต้องคงอยู่เช่นเนื้อหาของวัตถุรายการพจนานุกรม ด้วยวิธีการพิมพ์แบบกำหนดเอง ANSI Common Lisp แบบกำหนดเองคุณสามารถสร้างการนำเสนอแบบย่อสำหรับวัตถุที่สามารถอ่านด้วยเครื่องได้

แทบไม่มีการใช้ JavaScript ใน UI ของเว็บ แม้แต่การควบคุมเพื่อซ่อนและแสดงส่วนต่างๆของ UI ก็ทำได้โดยการส่งแบบฟอร์มและการแสดงผล HTML อีกครั้ง ดังนั้นรายละเอียดทั้งหมดของสถานะ UI จึงอยู่ในเซิร์ฟเวอร์และคงอยู่เมื่อผู้ใช้บันทึก HTML รุ่นใหม่นั้นเร็วมาก มันทำโดยการแสดงออก backquote ยักษ์ Lisp ซึ่งฟีดแมโครสร้าง HTML รหัสที่รวบรวมโดย Clozure Common Lisp (CCL) ทำให้สิ่งนี้เกิดขึ้นอย่างรวดเร็วจนคุณแทบจะไม่ทราบว่าเมื่อคุณคลิกปุ่ม [+] บน UI เพื่อเปิดบางสิ่งคุณกำลังส่งคำขอไปยังเซิร์ฟเวอร์ที่สร้างใหม่ หน้ายี้ทั้งหน้าและไม่ใช่แค่เรียกใช้ JavaScript ในตัวเครื่องบางตัวเพื่อเปลี่ยนการเปิดเผยองค์ประกอบเอกสารในเครื่อง

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

CLISP ยังไม่ถูกทอดทิ้ง มันยังคงใช้สำหรับจ่ายไฟให้กับแบ็คเอนด์โดยใช้ฐานรหัสทั่วไปที่เหมือนกัน

ฉันพัฒนาระบบสิทธิ์ใช้งานดั้งเดิมสำหรับโปรแกรมโดยใช้ crypto เส้นโค้งวงรีที่จัดทำโดยห้องสมุด IronClad ซึ่งเซิร์ฟเวอร์ใบอนุญาตใช้เพื่อลงนามใบอนุญาตเพื่อรับรองพวกเขา (ฉันดูเหมือนจะจำได้ว่าฉันอาจใช้โปรแกรมบรรทัดคำสั่งของ OpenSSL เพื่อสร้างพารามิเตอร์ EC สำหรับคีย์เซิร์ฟเวอร์)

สิทธิ์ใช้งานจะแสดงเป็นวัตถุ Lisp มันเป็นเครื่องบรรณาการให้ Lisp พกพาได้ที่โปรแกรม Windows ที่รวบรวมโดย Clozure Common Lisp สามารถสร้างลิขสิทธิ์แบบ S-expression, โปรแกรม CLISP ที่ทำงานบนเซิร์ฟเวอร์ Debian สามารถกรอกข้อมูลลงในช่องลายเซ็นดิจิตอลที่หายไปในวัตถุนั้นและส่งกลับไปที่ โปรแกรม Windows ที่สามารถตรวจสอบลายเซ็นได้

บนเซิร์ฟเวอร์นอกเหนือจากบริการออกใบอนุญาตที่ใช้ CGI แล้วฉันยังใช้ API บรรทัดคำสั่งอย่างง่ายสำหรับการจัดการสิทธิ์ใช้งาน คุณสามารถแสดงรายการสิทธิ์ใช้งานค้นหารายการเฉพาะและแก้ไขคุณลักษณะของแอปเช่นการแก้ไขวันหมดอายุของสิทธิ์การใช้งานชั่วคราวเพื่อให้ผู้ใช้มีข้อยกเว้น ส่วนท้ายใบอนุญาตยังสร้างอีเมล ฉันไม่ได้ใช้ไลบรารีใด ๆ สำหรับการจัดการ CGI ในฝั่งเซิร์ฟเวอร์: เพียงแค่โค้ด Lisp ที่ทำด้วยมือเพื่อจัดการกับตัวแปรสภาพแวดล้อม Apache และอาร์กิวเมนต์บรรทัดคำสั่ง (แม้ว่ารหัสห้องสมุดจะใช้สำหรับจัดการกับการเข้ารหัส URL และการสร้าง HTML) ไม่มีฐานข้อมูลที่ใช้สำหรับการจัดเก็บ ใบอนุญาตจะถูกแบ่งเป็นไฟล์ที่เรียกว่าlicenses.lispและนั่นคือที่


-1

หากมีคนจ่ายเงินให้ฉันแน่นอน

พวกเขาอาจจะสนใจจ่ายคนที่รู้ภาษามากกว่า ฉันเล่นกับ elisp และแบบแผนเพียงไม่กี่ครั้ง

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