แนะนำภาษาโปรแกรม 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 ความคิดเห็น
ความเห็นจาก 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 อะไรทำนองนั้น น่าจะเป็นของขวัญแบบงานพิมพ์ที่ยอดเยี่ยม!