ภาษาโปรแกรม Gleam กำลังดึงดูดความสนใจจากนักพัฒนาที่กำลังมองหาทางเลือกแบบ statically-typed สำหรับเครื่องเสมือน BEAM การสนทนาในชุมชนล่าสุดเผยให้เห็นความสนใจที่เพิ่มขึ้นในภาษาฟังก์ชันนัลนี้ที่ผสมผสานไวยากรณ์สมัยใหม่เข้ากับความน่าเชื่อถือที่พิสูจน์แล้วของสภาพแวดล้อมรันไทม์ของ Erlang
เครื่องเสมือน BEAM ให้ประโยชน์ที่เป็นเอกลักษณ์
นักพัฒนาหลายคนในตอนแรกลังเลเกี่ยวกับการพึ่งพา BEAM VM ของ Gleam โดยชอบภาษาที่คอมไพล์เป็นโค้ดดั้งเดิมมากกว่า อย่างไรก็ตาม ชุมชนเน้นย้ำว่า BEAM มีประโยชน์ที่โดดเด่นซึ่งระบบปฏิบัติการไม่สามารถให้ได้ เครื่องเสมือนนี้ช่วยให้สามารถสร้างโปรเซสที่มีน้ำหนักเบาได้ โดยสามารถสร้างโปรเซสพร้อมกันได้หลายล้านโปรเซสโดยไม่มีการลดประสิทธิภาพ โปรเซสแต่ละตัวจะรักษา heap และ garbage collector ของตัวเองไว้ ป้องกันไม่ให้งานใดงานหนึ่งบล็อกทั้งระบบ
ตัวจัดตารางเวลาของ BEAM รับประกันการจัดสรรทรัพยากรอย่างยุติธรรมในทุกโปรเซส แม้แต่การดำเนินการที่ใช้การคำนวณมากในโปรเซสหนึ่งก็จะไม่ส่งผลต่อการตอบสนองของโปรเซสอื่น สถาปัตยกรรมนี้พิสูจน์แล้วว่ามีค่าเป็นพิเศษสำหรับการสร้างเว็บเซอร์วิสที่ปรับขนาดได้และแอปพลิเคชันที่ทำงานพร้อมกัน
BEAM: Bogdan/Björn's Erlang Abstract Machine - เครื่องเสมือนที่รันโปรแกรม Erlang, Elixir และ Gleam
คุณสมบัติหลักของ BEAM VM :
- การสร้างโปรเซสที่มีน้ำหนักเบา (โปรเซสพร้อมกันหลายล้านตัว)
- แต่ละโปรเซสมี heap และ garbage collector เป็นของตัวเอง
- การจัดตารางงานแบบยุติธรรมป้องกันการบล็อกโปรเซส
- การเปลี่ยนโค้ดแบบ hot swap โดยไม่ต้องหยุดระบบ
- ความทนทานต่อข้อผิดพลาดและการดูแลแบบในตัว
การออกแบบภาษาดึงการเปรียบเทียบกับ Rust และ Scala
ข้อเสนอแนะจากชุมชนแสดงให้เห็นว่า Gleam รู้สึกคล้ายกับ Rust มากกว่าภาษา BEAM อื่นๆ เช่น Elixir ระบบ static type และความสามารถในการ pattern matching สร้างประสบการณ์การพัฒนาที่หลายคนรู้สึกคุ้นเคยหากเคยทำงานกับภาษาโปรแกรมระบบสมัยใหม่ นักพัฒนาบางคนสังเกตเห็นความคล้ายคลึงกับ Scala โดยเฉพาะในวิธีที่ภาษาสร้างสมดุลระหว่างแนวคิดการเขียนโปรแกรมเชิงฟังก์ชันกับไวยากรณ์ที่ใช้งานได้จริง
แนวทางของภาษาในการจัดการข้อผิดพลาดโดยใช้ Result types และคีย์เวิร์ด use
ได้รับการชื่นชมในการสร้างโค้ดที่สะอาดและอ่านง่ายขึ้น ตัวเลือกการออกแบบนี้ช่วยให้นักพัฒนาจัดการข้อผิดพลาดอย่างชัดเจนโดยไม่มีความยืดยาวที่มักเกี่ยวข้องกับรูปแบบการจัดการข้อผิดพลาดแบบดั้งเดิม
การเปรียบเทียบภาษาโปรแกรม:
- Gleam เทียบกับ Rust: มีระบบ static typing และ pattern matching ที่คล้ายคลึงกัน
- Gleam เทียบกับ Elixir: ใช้ BEAM VM ร่วมกันแต่มีแนวทาง syntax ที่แตกต่าง
- Gleam เทียบกับ Scala: มีความสมดุลในการเขียนโปรแกรมเชิงฟังก์ชันที่เปรียบเทียบได้
- แพลตฟอร์มเป้าหมาย: การคอมไพล์สำหรับ BEAM VM และ JavaScript
Parser Combinators เน้นจุดแข็งของการเขียนโปรแกรมเชิงฟังก์ชัน
การสนทนาเผยให้เห็นว่าทำไมภาษาฟังก์ชันนัลจึงเป็นเลิศในงานการแยกวิเคราะห์ Parser combinators ช่วยให้นักพัฒนาสามารถสร้าง parser ที่ซับซ้อนได้โดยการรวมคอมโพเนนต์เล็กๆ ที่นำมาใช้ซ้ำได้ ระบบนิเวศของ Gleam รวมถึงไลบรารีเช่น party
และ parser_gleam
ที่ใช้รูปแบบเหล่านี้ ทำให้การประมวลผลข้อความและการแยกวิเคราะห์ข้อมูลเข้าถึงได้ง่ายขึ้น
การ pattern matching บน algebraic data types ช่วยเพิ่มความสามารถในการแยกวิเคราะห์เพิ่มเติม คุณสมบัติเหล่านี้ช่วยให้นักพัฒนาสามารถแสดงตรรกะการแยกวิเคราะห์ที่ซับซ้อนในลักษณะที่ชัดเจนและเป็นการประกาศที่สะท้อนโครงสร้างของข้อมูลที่กำลังประมวลผลอย่างใกล้ชิด
ไลบรารี Parser Combinator ของ Gleam:
- party - มีให้ใช้งานที่ hexdocs.pm/party/
- parser_gleam - มีให้ใช้งานที่ hexdocs.pm/parser_gleam/
ความกังวลเรื่องความสุกงามและระบบนิเวศยังคงอยู่
แม้ว่าความกระตือรือร้นสำหรับ Gleam จะเพิ่มขึ้น แต่นักพัฒนาบางคนแสดงความระมัดระวังเกี่ยวกับการนำภาษานี้มาใช้ในการผลิต ความกังวลหลักมุ่งเน้นไปที่ความสุกงามของระบบนิเวศ ความสมบูรณ์ของไลบรารีมาตรฐาน และแพ็กเกจของบุคคลที่สามที่มีอยู่ สิ่งเหล่านี้เป็นความท้าทายทั่วไปสำหรับภาษาโปรแกรมใหม่ๆ แม้ว่าระบบนิเวศ BEAM จะให้รากฐานที่มั่นคงสำหรับการพัฒนาต่อยอด
ภาษานี้ยังคงพัฒนาต่อไป โดยมีการพัฒนาอย่างต่อเนื่องเพื่อแก้ไขช่องว่างเหล่านี้ เมื่อนักพัฒนาจำนวนมากขึ้นทดลองใช้ Gleam และมีส่วนร่วมในระบบนิเวศของมัน ความกังวลเรื่องความสุกงามเหล่านี้คาดว่าจะลดลงเมื่อเวลาผ่านไป
ความสนใจที่เพิ่มขึ้นใน Gleam สะท้อนแนวโน้มที่กว้างขึ้นไปสู่ภาษาที่ผสมผสานระบบ type สมัยใหม่เข้ากับสภาพแวดล้อมรันไทม์ที่พิสูจน์แล้ว สำหรับนักพัฒนาที่สร้างระบบที่ทำงานพร้อมกันและทนต่อข้อผิดพลาด Gleam เสนอทางเลือกที่น่าสนใจที่ใช้ประโยชน์จากการปรับปรุง BEAM VM หลายทศวรรษในขณะที่ให้คุณสมบัติภาษาร่วมสมัย
อ้างอิง: My First Impressions of Gleam