ข้ามไปเนื้อหา

ภาษาคลีน

จากวิกิพีเดีย สารานุกรมเสรี
คลีน
กระบวนทัศน์ภาษาโปรแกรมเชิงฟังก์ชันแบบบริสุทธิ์, การประเมินผลแบบไม่เข้มงวด
ออกแบบโดยกลุ่มวิจัยเทคโนโลยีซอฟต์แวร์ มหาวิทยาลัยราดบาวด์ ไนเมเคิน
ปรากฏครั้งแรกค.ศ. 1987
รุ่นเสถียร
3.1
การกำหนดชนิดตัวแปรชนิดข้อมูลแบบคงที่, ชนิดข้อมูลเข้มแข็ง, การอนุมานชนิด, ชนิดข้อมูลเอกลักษณ์
โอเอสข้ามแพลตฟอร์ม
สัญญาอนุญาตSimplified BSD
นามสกุลไฟล์.icl, .dcl, .abc
เว็บไซต์clean.cs.ru.nl

คลีน (อังกฤษ: Clean) เป็นภาษาโปรแกรมเชิงฟังก์ชันแบบบริสุทธิ์ มีการประเมินผลแบบไม่เข้มงวดหรือแบบขี้เกียจ และมีระบบชนิดข้อมูลแบบคงที่พร้อมการอนุมานชนิด ภาษานี้เป็นภาษาทั่วไปที่ออกแบบเพื่อใช้เขียนโปรแกรมจริง ไม่ใช่เพียงภาษาเพื่อการทดลองทางทฤษฎี เว็บไซต์ทางการอธิบาย Clean ว่าเป็นภาษาเชิงฟังก์ชันแบบบริสุทธิ์และขี้เกียจสำหรับการสร้างแอปพลิเคชันใช้งานจริง โดยมีคุณลักษณะเด่น เช่น ชนิดข้อมูลเอกลักษณ์ ชนิดข้อมูลพลวัต และฟังก์ชันทั่วไป[1]

คลีนพัฒนาขึ้นที่มหาวิทยาลัยราดบาวด์ ไนเมเคิน ประเทศเนเธอร์แลนด์ ตั้งแต่ปลายคริสต์ทศวรรษ 1980 เดิมรู้จักในชื่อ Concurrent Clean System และต่อมาเรียกสั้นลงเป็น Clean ภาษานี้มีไวยากรณ์และแนวคิดหลายส่วนใกล้เคียงกับภาษาแฮสเคิล แต่ต่างกันเด่นในวิธีจัดการสถานะและอินพุต/เอาต์พุต: คลีนใช้ระบบชนิดข้อมูลเอกลักษณ์ ส่วนแฮสเคิลใช้โมนาดเป็นกลไกหลักในการจัดลำดับผลข้างเคียง[2][3]

แม้คลีนเป็นภาษาที่มีผู้ใช้เฉพาะกลุ่มเมื่อเทียบกับภาษาโปรแกรมกระแสหลัก แต่ระบบยังมีการดูแลอยู่ หน้า Download Clean ระบุว่ารุ่นเสถียรล่าสุดคือ Clean 3.1 และรองรับ Windows, Linux และ macOS[4] ในระบบนิเวศรุ่นใหม่ยังมีตัวจัดการแพ็กเกจชื่อ Nitrile, เครื่องมือค้นหาฟังก์ชัน Cloogle, และงานวิจัยหรือเฟรมเวิร์กที่เขียนด้วยคลีน เช่น iTask และ mTask[1][2]

ประวัติ

[แก้]

คลีนเริ่มพัฒนาใน ค.ศ. 1987 โดยกลุ่มนักวิจัยด้านเทคโนโลยีซอฟต์แวร์ของมหาวิทยาลัยราดบาวด์ ไนเมเคิน ประเทศเนเธอร์แลนด์ ภาษานี้มีรากจากงานวิจัยด้านการเขียนโปรแกรมเชิงฟังก์ชันและการเขียนโปรแกรมด้วยกราฟรีไรต์ เดิมใช้ชื่อ Concurrent Clean System สะท้อนความสนใจในระบบเชิงฟังก์ชันที่รองรับการคำนวณพร้อมกัน ต่อมาชื่อถูกย่อเหลือ Clean System และในที่สุดใช้ชื่อ Clean

การเปลี่ยนแปลงสำคัญเกิดขึ้นในรุ่น Clean 1.0 ช่วงกลางคริสต์ทศวรรษ 1990 เมื่อภาษาพัฒนาไปสู่ภาษาเชิงฟังก์ชันระดับสูงที่มีไวยากรณ์ใกล้เคียงภาษาตระกูลมิแรนดา แฮสเคิล และภาษาเชิงฟังก์ชันร่วมสมัยอื่น หน้า Release history ของโครงการระบุว่า Clean 1.0 เพิ่มคุณลักษณะจำนวนมาก เช่น ฟังก์ชันโอเวอร์โหลด คลาสชนิดข้อมูล เรคคอร์ด อาร์เรย์ การปรับปรุงระบบชนิดข้อมูลเอกลักษณ์ และชนิดข้อมูลมีอยู่จริง[5]

Clean 2.0 ออกใน ค.ศ. 2001 พร้อมคุณลักษณะใหม่ เช่น การเขียนโปรแกรมชนิดข้อมูลพลวัตและการลิงก์แบบไดนามิก ส่วน Clean 3.0 ออกเมื่อวันที่ 2 ตุลาคม ค.ศ. 2018[5] ปัจจุบันหน้า Download Clean ระบุว่า Clean 3.1 เป็นรุ่นเสถียรล่าสุด และมีแพ็กเกจสำหรับ Windows, Linux และ macOS[4]

ลักษณะของภาษา

[แก้]

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

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

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

คุณลักษณะเฉพาะที่สำคัญที่สุดของคลีนคือ ชนิดข้อมูลเอกลักษณ์ (อังกฤษ: uniqueness typing) ระบบนี้ทำให้คอมไพเลอร์รู้ว่าค่าบางค่ามีการอ้างอิงเพียงแห่งเดียวในช่วงเวลาหนึ่ง จึงสามารถอัปเดตค่าหรือจัดการทรัพยากร เช่น ไฟล์ อาร์เรย์ และสถานะภายนอก ได้อย่างปลอดภัยในภาษาเชิงฟังก์ชันแบบบริสุทธิ์[1] แนวคิดนี้ต่างจากแฮสเคิล ซึ่งจัดการอินพุต/เอาต์พุตและสถานะผ่านโมนาดเป็นหลัก[3]

ชนิดข้อมูลพลวัตและฟังก์ชันทั่วไป

[แก้]

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

คลีนยังมีฟังก์ชันทั่วไปหรือ generic functions ซึ่งช่วยให้เขียนฟังก์ชันที่ทำงานกับโครงสร้างข้อมูลหลายชนิดได้โดยอาศัยรูปแบบของชนิดข้อมูล คุณสมบัตินี้เหมาะกับงานที่ต้องเดินโครงสร้างข้อมูล เช่น การแปลงค่า การเปรียบเทียบ การพิมพ์ค่า หรือการทำงานซ้ำ ๆ กับชนิดข้อมูลหลากหลายรูปแบบ[1]

การคอมไพล์และระบบเครื่องมือ

[แก้]

ระบบคลีนคอมไพล์โปรแกรมเป็นโค้ดเครื่องผ่านรูปแบบกลางชื่อ ABC โดยทั่วไปไฟล์ต้นฉบับของคลีนใช้สกุล .icl สำหรับไฟล์ implementation และ .dcl สำหรับไฟล์ definition ส่วน .abc เป็นรูปแบบกลางที่ใช้ในระบบคอมไพเลอร์

หน้า Download Clean ระบุว่า Clean มีแพ็กเกจสำหรับ Windows ทั้ง 32 และ 64 บิต, Linux ทั้ง 32 และ 64 บิต รวมถึง Linux บน ARM 64 บิต และ macOS 64 บิต[4] การติดตั้งบน Linux และ macOS ต่างจาก Windows อยู่บ้าง เพราะเวอร์ชัน Windows มี IDE และชุดเครื่องมือแบบรวมมากกว่า ส่วนระบบ Unix-like มักใช้งานผ่านบรรทัดคำสั่ง[4]

ในระบบนิเวศใหม่ของคลีน มีเว็บไซต์ clean-lang.org ซึ่งอธิบาย Clean ว่าเป็นภาษาเชิงฟังก์ชันแบบบริสุทธิ์และขี้เกียจที่ใกล้เคียง Haskell และมาพร้อมตัวจัดการแพ็กเกจชื่อ Nitrile[2] นอกจากนี้ยังมี Cloogle ซึ่งเป็นเครื่องมือค้นหาอย่างเป็นทางการสำหรับไลบรารีมาตรฐาน ไลบรารีภายนอก ข้อความผิดพลาดของคอมไพเลอร์ คำสั่ง ABC และองค์ประกอบของไวยากรณ์[1][6]

iTask และ mTask

[แก้]

งานวิจัยและการใช้งานร่วมสมัยของคลีนจำนวนหนึ่งเกี่ยวข้องกับระบบ iTask ซึ่งเป็นเครื่องมือสำหรับสร้างระบบจัดการเวิร์กโฟลว์บนเว็บโดยใช้ภาษาเวิร์กโฟลว์ที่ฝังอยู่ในคลีน[1] โครงการนี้แสดงให้เห็นการใช้ภาษาฟังก์ชันแบบบริสุทธิ์กับงานแอปพลิเคชันเชิงโต้ตอบและระบบธุรกิจ

อีกโครงการหนึ่งคือ mTask ซึ่งเป็นกรอบงานสำหรับเขียนระบบอินเทอร์เน็ตของสรรพสิ่งจากแหล่งโปรแกรมเดียว โดยใช้โดเมนสเปซิฟิกแลนเกวจแบบฝังตัวในคลีน หน้าโครงการอธิบายว่า mTask สามารถสร้างไบต์โค้ดสำหรับอุปกรณ์ฝังตัว เช่น Arduino, ESP8266 และ ESP32 และทำงานร่วมกับ iTask เพื่อซิงโครไนซ์ข้อมูลได้[1]

เปรียบเทียบกับแฮสเคิล

[แก้]

คลีนและแฮสเคิลเป็นภาษาเชิงฟังก์ชันแบบบริสุทธิ์ที่มีการประเมินผลแบบขี้เกียจและระบบชนิดข้อมูลเข้มแข็ง ทั้งสองภาษามีไวยากรณ์บางส่วนใกล้เคียงกัน เช่น ลิสต์คอมพรีเฮนชัน การจับคู่รูปแบบ ฟังก์ชันลำดับสูง และชนิดข้อมูลพีชคณิต อย่างไรก็ตาม ทั้งสองภาษาเลือกแนวทางต่างกันในเรื่องการจัดการสถานะและอินพุต/เอาต์พุต: แฮสเคิลใช้โมนาด ส่วนคลีนใช้ชนิดข้อมูลเอกลักษณ์เป็นกลไกสำคัญ[3]

ตัวอย่างความต่างทางไวยากรณ์ที่พบบ่อยคือ ลิสต์คอมพรีเฮนชันในแฮสเคิลเขียนด้วยเครื่องหมาย <- และใช้เครื่องหมายจุลภาคแยกเงื่อนไข ส่วนคลีนใช้ <- ร่วมกับเครื่องหมาย \\ และ | ในรูปแบบเฉพาะของภาษา

แนวคิด แฮสเคิล คลีน
ลิสต์คอมพรีเฮนชัน [x | x <- [1..10], odd x] [x \\ x <- [1..10] | isOdd x]
ไทป์ข้อมูลพีชคณิต
data Tree a = Empty | Node (Tree a) a (Tree a)
:: Tree a = Empty | Node (Tree a) a (Tree a)
as-pattern
t@(Node l x r)
t=:(Node l x r)

โดยรวม แฮสเคิลมีระบบนิเวศใหญ่กว่าและมีการใช้งานกว้างกว่า ส่วนคลีนมีความโดดเด่นในฐานะภาษาเชิงวิจัยที่สำรวจแนวคิดเรื่องชนิดข้อมูลเอกลักษณ์ การคอมไพล์ภาษาฟังก์ชัน และการสร้างระบบเชิงโต้ตอบด้วย iTask และ mTask

ตัวอย่างโค้ด

[แก้]

โปรแกรม “Hello, world!” ในคลีนสามารถเขียนได้สั้นมาก โดยกำหนดค่าของ Start ซึ่งเป็นจุดเริ่มต้นของโปรแกรม

module hello

Start = "Hello, world!"

ตัวอย่างฟังก์ชันแฟกทอเรียล:

module factorial

fac :: Int -> Int
fac 0 = 1
fac n = n * fac (n - 1)

Start = fac 5

ตัวอย่างลิสต์คอมพรีเฮนชันเพื่อสร้างรายการเลขคี่ตั้งแต่ 1 ถึง 10:

module odds

Start = [x \\ x <- [1..10] | isOdd x]

สถานะปัจจุบัน

[แก้]

คลีนไม่ใช่ภาษาโปรแกรมกระแสหลักและมีผู้ใช้จำนวนน้อยเมื่อเทียบกับภาษาเชิงฟังก์ชันอย่างแฮสเคิล เออร์แลง หรือโอแคมล์ แต่ยังไม่ใช่โครงการที่หายไปทั้งหมด หน้า Download Clean ได้รับการแก้ไขใน ค.ศ. 2026 และยังระบุ Clean 3.1 เป็นรุ่นเสถียรล่าสุด พร้อมลิงก์แพ็กเกจสำหรับหลายระบบปฏิบัติการ[4] ขณะเดียวกัน clean-lang.org และระบบแพ็กเกจ Nitrile สะท้อนความพยายามทำให้ระบบนิเวศของคลีนใช้งานง่ายขึ้นสำหรับผู้ใช้รุ่นใหม่[2]

บทบาทสำคัญของคลีนในปัจจุบันจึงอยู่ในสามด้าน ได้แก่ งานวิจัยภาษาโปรแกรม การศึกษาแนวคิดเชิงฟังก์ชันขั้นสูง และโครงการเฉพาะทางอย่าง iTask, mTask และเครื่องมือในชุมชนคลีน มากกว่าจะเป็นภาษาสำหรับพัฒนาแอปพลิเคชันทั่วไปในอุตสาหกรรมขนาดใหญ่

ดูเพิ่ม

[แก้]

อ้างอิง

[แก้]
  1. 1 2 3 4 5 6 7 "Clean". Clean. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  2. 1 2 3 4 "Clean". TOP Software Technology. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  3. 1 2 3 Lubbers, Mart; Achten, Peter (2024). "Clean for Haskell Programmers". arXiv:2411.00037 [cs.PL].
  4. 1 2 3 4 5 "Download Clean". Clean Wiki. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  5. 1 2 "Release history". Clean Wiki. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  6. "Documentation". Clean Wiki. สืบค้นเมื่อ 7 กรกฎาคม 2026.

แหล่งข้อมูลอื่น

[แก้]