ภาษาโปรแกรมมิ่ง J ซึ่งเป็นภาษาเชิงฟังก์ชันที่เน้นการจัดการอาร์เรย์คล้ายกับ APL กำลังเป็นที่ถกเถียงในชุมชนโปรแกรมเมอร์เมื่อไม่นานมานี้ โดยเฉพาะเรื่องไวยากรณ์ที่เป็นเอกลักษณ์และวิธีการแก้ปัญหา บทความแนะนำ J ล่าสุดได้จุดประกายการสนทนาเกี่ยวกับความแปลกของภาษาและปัญหาที่เกิดขึ้นซ้ำๆ เกี่ยวกับชื่อบทความที่ถูกตัดทอนเมื่อแชร์บนแพลตฟอร์มต่างๆ
ปัญหาการตัดชื่อบทความชี้ให้เห็นปัญหาในการส่งข้อมูล
บทความชื่อ Understanding J ดูเหมือนจะถูกตัดเมื่อมีการแชร์ ทำให้มีความเห็นหลายรายการเกี่ยวกับชื่อที่ไม่สมบูรณ์ สมาชิกในชุมชนชี้ให้เห็นว่านี่เป็นปัญหาที่เกิดขึ้นซ้ำๆ กับผู้โพสต์บางคนที่ใช้บอทอัตโนมัติในการโพสต์เนื้อหาจากเว็บไซต์อื่นโดยไม่ตรวจสอบว่าชื่อเรื่องจะพอดีหรือไม่ ผู้แสดงความคิดเห็นคนหนึ่งแนะนำว่าการย่อชื่อเป็น Understanding J: An introduction to J that gets to the point จะทำงานได้ดี ในขณะที่อีกคนหนึ่งสังเกตว่าผู้โพสต์ได้โพสต์ชื่อเรื่องที่มีปัญหามาประมาณห้าปีแล้วโดยไม่ได้แก้ไขบอทของพวกเขา
ไวยากรณ์ที่เป็นเอกลักษณ์ของ J สร้างความสนใจและความสับสน
คุณลักษณะไวยากรณ์ที่โดดเด่นของ J โดยเฉพาะการใช้ขีดล่างสำหรับตัวเลขลบ (เช่น _3
แทนที่จะเป็น -3
) ได้รับความสนใจจากผู้แสดงความคิดเห็นหลายคน ทางเลือกที่ไม่ธรรมดานี้มาจากความสัมพันธ์ของ J กับ APL ซึ่งใช้อักขระพิเศษ (¯) สำหรับการปฏิเสธ J ได้นำขีดล่างมาใช้เป็นทางเลือกที่เข้ากันได้กับ ASCII นอกจากนี้ภาษานี้ยังใช้ขีดล่างในรูปแบบที่ไม่ซ้ำใครสำหรับการแสดงค่าอนันต์ (_
) และลบอนันต์ (__
) ซึ่งเป็นวิธีการที่ลดความจำเป็นในการจัดการข้อยกเว้นในการคำนวณบางอย่าง
ช่วงนี้ผมเริ่มหลงใหลใน J... แต่มันก็ยังวนเวียนอยู่ในหัวผม และผมหยุดคิดถึง J ในช่วงเวลาที่แปลกที่สุด เมื่อผมใช้ภาษาโปรแกรมมิ่งมากขึ้นเรื่อยๆ ผมก็ยิ่งหลงใหลในมันมากขึ้น
คุณลักษณะสำคัญของภาษา J
- ภาษาโปรแกรมที่เน้นการทำงานกับอาร์เรย์ คล้ายกับ APL
- ภาษาเชิงฟังก์ชัน รองรับการเขียนโปรแกรมแบบ tacit (รูปแบบ point-free)
- ไวยากรณ์พิเศษ สำหรับการแสดง:
- ตัวเลขลบ:
_3
(ใช้ขีดล่างแทนเครื่องหมายลบ) - อินฟินิตี้:
_
(ขีดล่างเดี่ยว) - อินฟินิตี้ลบ:
__
(ขีดล่างคู่)
- ตัวเลขลบ:
- จำนวนเชิงซ้อน แสดงในรูปแบบ:
2j3
- คำวิเศษณ์ เพื่อเพิ่มประสิทธิภาพให้กับคำกริยา (ฟังก์ชัน) รวมถึง:
/
(Insert)\
(Prefix)*.
(Each)@:
(At)&:
(Under)
ประสบการณ์การเรียนรู้ J ยังคงเป็นที่จดจำ
เรื่องที่น่าสนใจเป็นพิเศษคือผู้แสดงความคิดเห็นคนหนึ่งเล่าถึงประสบการณ์การเรียนรู้ J ระหว่างการศึกษาด้านคอมพิวเตอร์เมื่อยี่สิบปีที่แล้ว แม้ว่าจะพบว่ามันสับสนในตอนนั้นและพบข้อบกพร่องของตัวแปลภาษา พวกเขาก็ยังแสดงความหลงใหลในภาษานี้ที่ยังคงอยู่มาหลายทศวรรษ ความรู้สึกนี้สะท้อนให้เห็นว่าวิธีการโปรแกรมที่ไม่ธรรมดาของ J สามารถสร้างความประทับใจที่ยาวนาน แม้ว่าการสัมผัสครั้งแรกจะท้าทายหรือไม่สมบูรณ์ก็ตาม
การโปรแกรมแบบอาร์เรย์สร้างแรงบันดาลใจให้กับความคิดในการออกแบบภาษา
การสนทนายังลงลึกไปถึงปรัชญาการออกแบบภาษา โดยผู้แสดงความคิดเห็นบางคนพิจารณารูปแบบการโปรแกรมในอุดมคติที่อาจรวมการโปรแกรมแบบอาร์เรย์ (เช่น J) กับแนวทางแบบต่อเนื่อง (เช่น FORTH) สิ่งนี้จุดประกายให้มีการกล่าวถึง Uiua ซึ่งเป็นภาษาที่เน้นอาร์เรย์อีกภาษาหนึ่งที่อาจตอบสนองความต้องการดังกล่าว แสดงให้เห็นว่า J ยังคงสร้างแรงบันดาลใจให้กับความคิดเกี่ยวกับการออกแบบและการใช้งานภาษาโปรแกรมมิ่ง
สำหรับผู้ที่สนใจลอง J โดยไม่ต้องตั้งค่ามากมาย ผู้แสดงความคิดเห็นคนหนึ่งแนะนำให้เพิ่มไดเรกทอรี .devcontainer
พร้อม Dockerfile เพื่อเปิดใช้งานการทดลองผ่านเบราว์เซอร์ด้วย GitHub Codespaces ซึ่งแสดงให้เห็นถึงความพยายามอย่างต่อเนื่องของชุมชนในการทำให้ภาษาที่ไม่ธรรมดานี้เข้าถึงได้ง่ายขึ้นสำหรับโปรแกรมเมอร์ที่สนใจ
อ้างอิง: Understanding J