สวัสดี! 😢

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

ลองดูที่นี่: 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 คำสั่ง ก็จะเป็นไปได้เช่นกันในอนาคตอันใกล้นี้ (คุณลักษณะนี้อยู่ระหว่างการพัฒนา)

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

สิ่งนี้ทำให้เรามีวิธีใหม่ในการแนะนำการสุ่มแบบควบคุมในโปรแกรม ข้อความที่น่าจะเป็นไปได้ง่ายๆ คำเดียวอาจไม่สนุก แต่การสามารถซ้อนมันได้จะเปิดประตูสู่ความสนุกได้อย่างง่ายดาย!

และในที่สุดคุณก็โทษโชคของคุณได้หากโปรแกรมของคุณไม่ได้ให้ผลลัพธ์ที่ต้องการ :-)

เกิดอะไรขึ้น?

มีฟีเจอร์มากมายที่วางแผนไว้สำหรับการเปิดตัวที่กำลังจะมาถึง แผนงานคุณลักษณะยังไม่สิ้นสุด แต่คุณลักษณะบางอย่างที่อยู่ระหว่างการพิจารณา ได้แก่:

  1. งบความน่าจะเป็นแบบมีเงื่อนไข
  2. งบความน่าจะเป็นแบบประสม
  3. ข้อความเลื่อนการตัดบัญชี (แรงบันดาลใจจาก Go)
  4. สำหรับลูป (เฉพาะในขณะที่ลูปพร้อมใช้งานในขณะนี้)
  5. อาร์เรย์
  6. คำสั่งที่จัดเก็บได้/คำสั่งผสม ที่ช่วยให้คุณสามารถจัดเก็บคำสั่งผสมหรือคำสั่งเป็นเทมเพลตในตัวแปรและวางไว้ในตำแหน่งต่างๆ ในโปรแกรมพร้อมการแก้ไขพารามิเตอร์เทมเพลต
  7. ตัวดำเนินการ idk ที่ให้คุณคอมไพล์เวอร์ชันต่างๆ ของโปรแกรมเดียวกันได้

การปรับปรุงบางอย่างที่วางแผนไว้สำหรับอนาคต ได้แก่:

  1. การสนับสนุนการดีบักโดยใช้ jdb (ยังสามารถทำได้ในทางเทคนิค แต่ไม่รองรับอย่างชัดเจน)
  2. ข้อความแสดงข้อผิดพลาดที่ดีขึ้น

บทความในบล็อกที่อธิบายเกี่ยวกับสถาปัตยกรรมและการออกแบบของคอมไพเลอร์ซาโมซ่าจะตามมาเร็วๆ นี้ :-)

ฉันหวังว่าคุณจะสนุกกับการโพสต์ ความคิดเห็นและข้อเสนอแนะยินดีต้อนรับ! อย่าตบมือและติดดาวไว้ที่ที่เก็บ GitHub (https://github.com/souris-dev/samosac-jvm) หากคุณพบว่าสิ่งนี้น่าสนใจ :-)

รอคอยที่จะเขียนโพสต์ถัดไปของฉันซึ่งฉันเริ่มอธิบายคอมไพเลอร์

ถึงตอนนั้น ลาก่อน!