สวัสดี! 😢
ในโพสต์นี้ ฉันอยากจะแนะนำภาษาการเขียนโปรแกรมใหม่ที่ฉันได้ทำมาตั้งแต่ไม่กี่เดือนที่ผ่านมา ฉันอยากให้คุณเจอ *ช่วยจินตนาการกลองม้วนที่นี่หน่อยได้ไหม? ขอบคุณ :-)*:
ลองดูที่นี่: https://souris-dev.github.io/samosac-jvm/
คุณสามารถลองใช้ที่นี่ในเบราว์เซอร์ได้เช่นกัน: http://playground.samosa-lang.org (โปรดทราบว่า Playground อาจทำงานไม่ถูกต้องบนโทรศัพท์มือถือเนื่องจากโปรแกรมแก้ไขโค้ดที่ใช้ในโมนาโกไม่ใช่ เข้ากันได้กับเบราว์เซอร์สมาร์ทโฟนอย่างเป็นทางการ)
สำหรับแหล่งที่มาของคอมไพเลอร์ ให้ไปที่ที่เก็บ GitHub: https://github.com/souris-dev/samosac-jvm (ยินดีรับประเด็น การสนับสนุน และข้อเสนอแนะ :-))
ทำไมถึงชื่อ “ซาโมซ่า”?
ซาโมซา (ออกเสียง “some-o-saah”; “saah” ในที่นี้ออกเสียงเหมือนคำว่า “เปรี้ยว” แต่ไม่มี “r” เป็นขนมอินเดีย มันกินได้และก็อร่อย ซาโมซ่ากับชัยอร่อยมาก เราต้องการเหตุผลอื่นอีกหรือไม่? :-)
ฉันยอมรับว่าบางทีฉันอาจจะหิวนิดหน่อยเมื่อตั้งชื่อมัน
แต่มีเฟรมเวิร์กและไลบรารีที่กินไม่ได้ทุกประเภท ดังนั้นฉันคิดว่าคงจะดีถ้ามีภาษาที่ทำให้คุณหิวและมีชื่อที่สนุกสนาน และด้วยเหตุนี้จึงเป็นของว่าง
เดิมที โปรเจ็กต์นี้มีชื่อว่า สแลงแต่ฉันพบในภายหลังว่ามีภาษาที่มีอยู่แล้วที่เรียกว่า สแลงซึ่ง Goldman Sachs ใช้เป็นการภายใน สิ่งนี้ทำให้เกิดการเปลี่ยนชื่อโครงการเป็น samosa,หรืออีกทางหนึ่งคือ samosa-lang
หมายเหตุ: ชื่อของคอมไพเลอร์คือ samosac และภาษาชื่อ samosa
เกี่ยวกับภาษา
Samosa เป็นภาษาโอเพ่นซอร์ส พิมพ์แบบคงที่ ภาษาโปรแกรมทั่วไป ที่ทำงานบน JVM (ใช่แล้ว Java Virtual Machine รุ่นเก่าที่ดีของเรา) มันทำงานในลักษณะเดียวกันกับภาษาที่ใช้ JVM อื่น ๆ
คอมไพเลอร์ samosac เขียนด้วย Kotlin และ Java และปัจจุบันมีให้บริการในรูปแบบ JAR ที่ปฏิบัติการได้ จะมีตัวเลือกการติดตั้งที่ง่ายกว่าในเร็วๆ นี้
ขณะนี้ภาษายังอยู่ในช่วงดั้งเดิม (ในรุ่นอัลฟ่ารุ่นแรก) และรองรับโครงสร้างพื้นฐานส่วนใหญ่และฟังก์ชันในตัวสองสามรายการ
คุณสามารถดูเอกสารได้ที่ https://souris-dev.github.io/samosac-jvm/ เพื่อดูรายการฟีเจอร์ที่อัปเดตที่ภาษานั้นรองรับ หากต้องการทดลองใช้ในเบราว์เซอร์ ให้ไปที่ http://playground.samosa-lang.org
แต่ทำไม
ฉันสร้างภาษาการเขียนโปรแกรมนี้ขึ้นมาเพราะฉันต้องการบางสิ่งที่จะท้าทายตัวเอง และเนื่องจากฉันค่อนข้างสนใจในการออกแบบคอมไพเลอร์ในช่วงนี้ เดิมทีฉันเริ่มสิ่งนี้เพื่อทำความเข้าใจวิธีการทำงานของคอมไพเลอร์ ฉันเชื่อว่ามันออกมาค่อนข้างดีแม้ว่าจะยังต้องมีการปรับปรุงอีกมากก็ตาม
ปัจจุบัน Samosa ใช้ JVM ดังนั้นจึงสามารถรองรับการทำงานร่วมกันกับ Java ได้ (นี่คือฟีเจอร์ที่กำลังจะมีขึ้น) ซึ่งจะช่วยให้ภาษาสามารถใช้ระบบนิเวศที่สมบูรณ์ของ Java ได้ในอนาคต เนื่องจากโค้ดไบต์ JVM เป็นแบบข้ามแพลตฟอร์ม โค้ด Samosa จึงสามารถทำงานบนระบบปฏิบัติการที่สามารถเรียกใช้ JRE ได้
มีลักษณะเป็นอย่างไร
หากคุณต้องการทราบว่าซาโมซ่าหรือของว่างมีลักษณะอย่างไร Google คือเพื่อนที่ดีที่สุดของคุณ (ฉันวาดรูปไม่เก่ง ไม่งั้นฉันจะใส่รูปภาพไว้ที่นี่)
ไวยากรณ์ของ samosa ซึ่งเป็นภาษาการเขียนโปรแกรมจะให้ความรู้สึกคุ้นเคยอย่างมากสำหรับทุกคนที่เคยใช้ C++, Java หรือภาษาการเขียนโปรแกรมอื่นๆ ที่มีไวยากรณ์คล้ายกัน เพื่อให้เกิดแนวคิด นี่คือโปรแกรมตัวอย่างที่แสดงตัวเลข N แรกของชุดฟีโบนัชชี (โดยที่ N คืออินพุตที่นำมาจากผู้ใช้):
(ตัวอย่างด้านบนใช้การเรียกซ้ำ แต่แน่นอนว่าคุณสามารถใช้การทำซ้ำได้เช่นกัน)
มีอะไรใหม่
นั่นเป็นคำถามที่ดี
ในปัจจุบัน จุดเด่นของ Samosa คือการสนับสนุนในตัวสำหรับการดำเนินการตามคำสั่งที่น่าจะเป็น
สิ่งนี้มีความหมายสำหรับเราคือเราสามารถระบุความน่าจะเป็นของคำสั่งที่ถูกดำเนินการ (ขณะรันไทม์) ในโค้ดได้ ความน่าจะเป็นอาจเป็นค่าคงที่หรือเป็นสิ่งที่ประเมิน ณ รันไทม์ Samosa เรียก ข้อความที่น่าจะเป็นแบบง่ายเหล่านี้
เราสามารถระบุคำสั่งอื่นที่ได้รับการดำเนินการอย่างน่าจะเป็นได้หากคำสั่งแรกไม่ได้รับการดำเนินการ Samosa เรียก ข้อความความน่าจะเป็นแบบง่ายพร้อมข้อความทางเลือก
ตรวจสอบเอกสารเพื่อดูรายละเอียดเพิ่มเติม: https://souris-dev.github.io/samosac-jvm/probables/
ข้อความที่เป็นไปได้ทั้งสองประเภทนี้สามารถผสมและซ้อนกันได้ (ดูตัวอย่างที่ https://souris-dev.github.io/samosac-jvm/probables/nested_probables.html ) การใช้คำสั่งผสมที่น่าจะเป็นไปได้ เช่น probable while loops และ probable if คำสั่ง ก็จะเป็นไปได้เช่นกันในอนาคตอันใกล้นี้ (คุณลักษณะนี้อยู่ระหว่างการพัฒนา)
เวอร์ชันที่กำลังจะมาถึงนี้ นอกเหนือไปจากฟีเจอร์อื่นๆ ยังเพิ่มการรองรับคำสั่งความน่าจะเป็นแบบมีเงื่อนไข ซึ่งจะช่วยให้ปัจจัยความน่าจะเป็นของคำสั่งขึ้นอยู่กับว่าคำสั่งที่น่าจะเป็นไปได้ก่อนหน้านี้บางคำสั่งถูกดำเนินการหรือไม่
สิ่งนี้ทำให้เรามีวิธีใหม่ในการแนะนำการสุ่มแบบควบคุมในโปรแกรม ข้อความที่น่าจะเป็นไปได้ง่ายๆ คำเดียวอาจไม่สนุก แต่การสามารถซ้อนมันได้จะเปิดประตูสู่ความสนุกได้อย่างง่ายดาย!
และในที่สุดคุณก็โทษโชคของคุณได้หากโปรแกรมของคุณไม่ได้ให้ผลลัพธ์ที่ต้องการ :-)
เกิดอะไรขึ้น?
มีฟีเจอร์มากมายที่วางแผนไว้สำหรับการเปิดตัวที่กำลังจะมาถึง แผนงานคุณลักษณะยังไม่สิ้นสุด แต่คุณลักษณะบางอย่างที่อยู่ระหว่างการพิจารณา ได้แก่:
- งบความน่าจะเป็นแบบมีเงื่อนไข
- งบความน่าจะเป็นแบบประสม
- ข้อความเลื่อนการตัดบัญชี (แรงบันดาลใจจาก Go)
- สำหรับลูป (เฉพาะในขณะที่ลูปพร้อมใช้งานในขณะนี้)
- อาร์เรย์
- คำสั่งที่จัดเก็บได้/คำสั่งผสม ที่ช่วยให้คุณสามารถจัดเก็บคำสั่งผสมหรือคำสั่งเป็นเทมเพลตในตัวแปรและวางไว้ในตำแหน่งต่างๆ ในโปรแกรมพร้อมการแก้ไขพารามิเตอร์เทมเพลต
- ตัวดำเนินการ
idk
ที่ให้คุณคอมไพล์เวอร์ชันต่างๆ ของโปรแกรมเดียวกันได้
การปรับปรุงบางอย่างที่วางแผนไว้สำหรับอนาคต ได้แก่:
- การสนับสนุนการดีบักโดยใช้ jdb (ยังสามารถทำได้ในทางเทคนิค แต่ไม่รองรับอย่างชัดเจน)
- ข้อความแสดงข้อผิดพลาดที่ดีขึ้น
บทความในบล็อกที่อธิบายเกี่ยวกับสถาปัตยกรรมและการออกแบบของคอมไพเลอร์ซาโมซ่าจะตามมาเร็วๆ นี้ :-)
ฉันหวังว่าคุณจะสนุกกับการโพสต์ ความคิดเห็นและข้อเสนอแนะยินดีต้อนรับ! อย่าตบมือและติดดาวไว้ที่ที่เก็บ GitHub (https://github.com/souris-dev/samosac-jvm) หากคุณพบว่าสิ่งนี้น่าสนใจ :-)
รอคอยที่จะเขียนโพสต์ถัดไปของฉันซึ่งฉันเริ่มอธิบายคอมไพเลอร์
ถึงตอนนั้น ลาก่อน!