4 คะแนน โดย GN⁺ 2024-04-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

แนะนำภาษาโปรแกรม Piet

  • Piet เป็นภาษาโปรแกรมสำหรับเขียนโปรแกรมที่ดูเหมือนภาพวาดนามธรรม
  • ตั้งชื่อตาม Piet Mondrian ผู้บุกเบิกศิลปะนามธรรมเชิงเรขาคณิต

หลักการออกแบบภาษา Piet

  • โค้ดโปรแกรมมีลักษณะเป็นงานศิลปะนามธรรม

สีที่ใช้ใน Piet

  • Piet ใช้สีเฉพาะทั้งหมด 20 สี
    • วงจรเฉดสี: แดง -> เหลือง -> เขียว -> ฟ้าอมเขียว -> น้ำเงิน -> ม่วงแดง -> แดง
    • วงจรความสว่าง: สว่าง -> ปกติ -> มืด -> สว่าง
  • สีขาวและสีดำไม่รวมอยู่ในสองวงจรนี้
  • สามารถใช้สีเพิ่มเติมได้ (เช่น ส้ม, น้ำตาล) แต่ผลลัพธ์ขึ้นอยู่กับการติดตั้งใช้งาน
    • ในกรณีที่ง่ายที่สุด จะถูกจัดการเหมือนสีขาว

Codel (โคเดล)

  • หน่วยพื้นฐานของโค้ด Piet คือบล็อกสี
    • ประกอบด้วยโคเดลสีเดียวกันที่อยู่ติดกันตั้งแต่หนึ่งตัวขึ้นไป
    • บล็อกสีที่ติดกันเฉพาะตามแนวทแยงไม่นับว่าต่อเนื่องกัน
    • ไม่มีข้อจำกัดเรื่องรูปร่าง และอาจมี "รู" ภายในที่เป็นสีอื่นได้

สแตก

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

การทำงานของโปรแกรม

  • อินเทอร์พรีเตอร์ของ Piet เริ่มทำงานจากบล็อกสีที่มีโคเดลมุมซ้ายบนของโปรแกรม
  • โดยคงค่า Direction Pointer (DP) และ Codel Chooser (CC) ไว้ และย้ายบล็อกสีตามกฎต่อไปนี้:
    • หาแนวขอบของบล็อกสีปัจจุบันที่อยู่ไกลที่สุดในทิศทางของ DP
    • จากแนวขอบนั้น หาโคเดลที่อยู่ไกลที่สุดในทิศทางของ CC
    • จากโคเดลดังกล่าว ย้ายไปยังบล็อกสีที่อยู่ติดกันในทิศทางของ DP
  • ทำซ้ำกระบวนการข้างต้นจนกว่าโปรแกรมจะสิ้นสุด

องค์ประกอบทางไวยากรณ์

ตัวเลข

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

บล็อกสีดำและขอบเขต

  • บล็อกสีดำและขอบของโปรแกรมใช้จำกัดการไหลของโปรแกรม
  • หากพยายามย้ายไปยังบล็อกสีดำหรือขอบเขต CC จะถูกสลับและ DP จะหมุนตามเข็มนาฬิกา
  • หากยังย้ายไม่ได้หลังพยายาม 8 ครั้ง โปรแกรมจะสิ้นสุด

บล็อกสีขาว

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

คำสั่ง

  • นิยามโดยการเปลี่ยนสีเมื่ออินเทอร์พรีเตอร์ย้ายจากบล็อกสีหนึ่งไปยังอีกบล็อกสีหนึ่ง
  • คำสั่งที่จะรันถูกกำหนดจากจำนวนขั้นของการเปลี่ยนในวงจรเฉดสีและวงจรความสว่าง
  • หากย้ายผ่านบล็อกสีขาว จะไม่รันคำสั่ง
  • คำสั่งหลัก:
    • push, pop, add, subtract, multiply, divide, mod, not, greater
    • pointer, switch, duplicate, roll
    • in(number), in(char), out(number), out(char)

ความเห็นของ GN⁺

  • Piet เป็นภาษาโปรแกรมที่ดึงดูดสายตา และแสดงให้เห็นการผสานกันอย่างมีเอกลักษณ์ระหว่างศิลปะนามธรรมกับการเขียนโปรแกรม
  • อย่างไรก็ตาม ในแง่การใช้งานจริงดูเหมือนจะมีข้อจำกัด คาดว่าการเขียนโปรแกรมที่ซับซ้อนคงไม่ใช่เรื่องง่าย
  • น่าจะเหมาะกับการทดลองด้านการออกแบบภาษาโปรแกรม การทำปริศนา หรือการสร้างงานศิลปะเป็นหลัก
  • สำหรับภาษาการเขียนโปรแกรมแบบภาพ Google Blockly หรือ MIT Scratch อาจเป็นทางเลือกที่ใช้งานได้จริงมากกว่า
  • คิดว่า Piet เป็นภาษาที่ลึกเกินไปพอสมควร จึงอาจยากที่จะใช้เป็นเครื่องมือให้ผู้เริ่มต้นเรียนรู้การเขียนโปรแกรมจริง ๆ

1 ความคิดเห็น

 
GN⁺ 2024-04-25
ความเห็นจาก Hacker News
  • โปรแกรมสุดท้ายในหน้าตัวอย่างของภาษา Piet น่าทึ่งจริง ๆ มีคนคนหนึ่ง (ชื่อ Piet) เห็นผลงานที่ชวนให้นึกถึงภาษา Piet แล้วลองรันดู ปรากฏว่ามันทำงานได้จริง นี่น่าจะเป็นครั้งแรกในประวัติศาสตร์ที่ศิลปินกราฟิกวาดโปรแกรมที่รันได้โดยบังเอิญ

  • Piet เป็นการทดลองที่ก้าวล้ำในบรรดาภาษาโปรแกรมแบบ esoteric แต่ยังไม่ค่อยบรรลุเป้าหมายที่จะทำให้มันดูเหมือนภาพของ Mondrian เว้นแต่ว่านักพัฒนาจะตั้งใจทำเช่นนั้น อยากให้โครงสร้างของภาษาถูกออกแบบมาให้สิ่งที่เขียนออกมาดูเหมือนภาพของ Mondrian โดยตัวมันเอง

  • เรื่องนี้ทำให้เกิดคำถามว่า "อัลกอริทึมมีหน้าตาอย่างไร?" เราจะสร้างบางอย่างในโลกจริงที่เหมือนนิยายของ Hermann Hesse เรื่อง 'The Glass Bead Game' (Magister Ludi) ได้ไหม? ในฐานะคนที่โน้มเอียงไปทางการมองเห็นก็อยากเชื่อว่าได้ และเคยพยายามใช้เครื่องมือแบบนั้นจริง ๆ แต่คำตอบมักคลุมเครือ ทำให้ยากจะหาสมดุลระหว่างพลังในการแสดงออกทางภาพกับความเป็นโมดูลาร์

  • ของแนวนี้ดูเหมือนจะโผล่มาในหนังระทึกขวัญแนวอาชญากรรม โดยทำให้ตัวเอกหรือนักสืบสับสนอยู่พักหนึ่ง ก่อนจะมีใครสักคนรู้ว่าแท้จริงแล้วมันคือโค้ด พวกเราเคยคิดว่า QR code มีประโยชน์แล้วนะ...

  • การค้นพบ Piet เป็นช่วงเวลาพิเศษที่มีทั้งความยำเกรง ความสับสน และความพิศวง เรื่องนี้ถูกเก็บไว้ในการสนทนากับเพื่อนชื่อ Oz ในพอดแคสต์ด้าน CS

  • มีคนทำ Quine ด้วย Piet ไว้แล้ว ภาพเสียไปแล้ว แต่ยังมีสำเนาอยู่ใน CodeGolf

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

  • ฉันเคยเจอสิ่งนี้ตอนเรียนมหาวิทยาลัย แล้วก็นั่งเขียนโปรแกรมง่าย ๆ จนดึก เป็นประสบการณ์ที่สนุกมาก แนะนำให้ทุกคนลองสักครั้ง!

  • หน้าตัวอย่างน่าทึ่งมาก คุณจะเห็นผืนผ้าใบค่อย ๆ พัฒนาไปจนซับซ้อนและสวยงามยิ่งขึ้น

  • เท่มาก! สงสัยว่าจะเป็นไปได้ไหมที่จะรวบรวมงาน Piet แล้วสร้างโปรแกรมที่คืนค่าข้อความตามที่กำหนด เหมือนตัวสร้างโค้ด Piet อะไรทำนองนั้น น่าจะเป็นของขวัญแบบงานพิมพ์ที่ยอดเยี่ยม!