โลกของการเขียนโปรแกรมไมโครคอนโทรลเลอร์กำลังเห็นการเปลี่ยนแปลงเมื่อภาษาระดับสูงเริ่มเข้ามาในพื้นที่ที่เคยใช้ภาษาระดับต่ำเป็นหลัก PicoRuby ซึ่งเป็นทางเลือกในการใช้งาน mruby ที่ออกแบบมาสำหรับอุปกรณ์ที่มีขนาดเล็ก ได้จุดประกายให้เกิดการถกเถียงในหมู่นักพัฒนาเกี่ยวกับข้อดีและข้อแลกเปลี่ยนของการใช้ภาษาแบบแปลความหมาย (interpreted languages) เช่น Ruby บนฮาร์ดแวร์ที่มีทรัพยากรจำกัด
ขนาดและความต้องการทรัพยากร
PicoRuby ต้องการหน่วยความจำ ROM ประมาณ 256 KB และ RAM 128 KB บนสถาปัตยกรรมแบบ 32 บิต ซึ่งข้อกำหนดเหล่านี้ได้สร้างปฏิกิริยาที่หลากหลายจากชุมชนนักพัฒนา แม้ว่าความต้องการเหล่านี้จะทำให้ภาษานี้สามารถทำงานบนอุปกรณ์เช่น Raspberry Pi Pico (ที่มีโปรเซสเซอร์ Arm Cortex-M0+ พร้อม RAM 264 KB และ Flash 2 MB) แต่นักพัฒนาบางคนก็ชี้ให้เห็นว่าข้อกำหนดเหล่านี้ไม่ได้มีขนาดเล็กนักหากเทียบกับมาตรฐานในอดีต
ผู้แสดงความคิดเห็นคนหนึ่งระบุว่าข้อกำหนดเหล่านี้เกินความสามารถของคอมพิวเตอร์โดยเฉลี่ยจนถึงประมาณปี 1990 ซึ่งแสดงให้เห็นว่าการรับรู้ของเราเกี่ยวกับสิ่งที่เรียกว่า เล็ก ได้เปลี่ยนแปลงไปตามกาลเวลา ข้อสังเกตนี้มีความเกี่ยวข้องอย่างยิ่งเนื่องจาก RAM และหน่วยความจำ Flash มีผลกระทบอย่างมากต่อราคาและขนาดของไมโครคอนโทรลเลอร์
คุณสมบัติของ PicoRuby:
- ROM: 256 KB (ขึ้นอยู่กับการตั้งค่าการสร้าง)
- RAM: 128 KB หรือน้อยกว่า (ขึ้นอยู่กับโค้ดแอปพลิเคชัน)
- สถาปัตยกรรม: 32 บิต
- ฮาร์ดแวร์อ้างอิง: Raspberry Pi Pico (Arm Cortex-M0+, 264 KB RAM, 2 MB Flash)
คุณลักษณะสำคัญ:
- พกพาได้ - ขึ้นอยู่กับไลบรารี C มาตรฐานเท่านั้น
- สร้างไบนารีที่ประมวลผลได้สามตัว:
- picorbc: คอมไพเลอร์สำหรับโค้ด Ruby เพื่อแปลงเป็นไบต์โค้ดของ VM
- picoruby: ตัวแปลภาษา Ruby
- r2p2: เวอร์ชัน POSIX ของ R2P2
การแข่งขันกับ MicroPython
PicoRuby เข้าสู่พื้นที่ที่ MicroPython ได้สร้างความโดดเด่นไว้แล้ว MicroPython นำเสนอความสามารถที่คล้ายกันในการรันภาษาระดับสูงแบบแปลความหมายบนไมโครคอนโทรลเลอร์และได้สร้างระบบนิเวศที่แข็งแกร่ง นักพัฒนาที่คุ้นเคยกับทั้งสองโครงการแนะนำว่าผู้ที่สนใจ PicoRuby อาจต้องการสำรวจ MicroPython ด้วย ซึ่งปัจจุบันครองส่วนแบ่งการตลาดที่ใหญ่กว่าในตลาดเฉพาะนี้
การแข่งขันระหว่างโครงการเหล่านี้สะท้อนให้เห็นถึงแนวโน้มที่กว้างขึ้นของการนำภาษาที่เป็นมิตรกับนักพัฒนามาใช้กับระบบฝังตัว ซึ่งอาจทำให้การพัฒนาฮาร์ดแวร์เข้าถึงได้ง่ายขึ้นสำหรับผู้ที่ไม่มีประสบการณ์การเขียนโปรแกรมภาษา C มากนัก
การถกเถียงเรื่องภาษา C
การอภิปรายที่เร่าร้อนที่สุดอาจเกี่ยวข้องกับคำถามว่าภาษาระดับสูงเช่น Ruby เป็นตัวเลือกที่เหมาะสมแทนภาษา C ในการเขียนโปรแกรมไมโครคอนโทรลเลอร์หรือไม่ ชุมชนดูเหมือนจะแบ่งแยกในคำถามพื้นฐานนี้
บางคนเกลียดการใช้ C บางคนยอมรับมัน แม้กระทั่งรักมัน (รวมถึงนักพัฒนาเกมจำนวนมาก!) คุณมีการควบคุมอย่างเต็มที่! แต่ฉันสงสัย... C แย่ขนาดนั้นจริงๆ หรือ??
ผู้สนับสนุนภาษา C เน้นย้ำถึงประสิทธิภาพและการควบคุมทรัพยากรฮาร์ดแวร์โดยตรงที่ภาษานี้มอบให้ อย่างไรก็ตาม นักวิจารณ์ชี้ให้เห็นถึงการขาดคุณสมบัติด้านความปลอดภัยและความง่ายที่นักพัฒนาสามารถแนะนำข้อผิดพลาดที่สำคัญผ่านการพิมพ์ผิดหรือข้อผิดพลาดในการจัดการหน่วยความจำ ดังที่นักพัฒนาคนหนึ่งได้กล่าวไว้ C แลกการประมวลผลที่รวดเร็วมากกับการพัฒนาที่ช้าลง โดยเฉพาะอย่างยิ่งเมื่อสร้างโค้ดขนาดใหญ่ที่มีความถูกต้องเป็นสิ่งสำคัญ
ประสบการณ์การพัฒนาและความปลอดภัย
การอภิปรายเกี่ยวกับ PicoRuby เน้นย้ำถึงความตึงเครียดพื้นฐานในการพัฒนาระบบฝังตัว: การแลกเปลี่ยนระหว่างประสิทธิภาพการทำงานและประสิทธิภาพการพัฒนา การพิมพ์แบบไดนามิกและการทำงานในระดับที่สูงขึ้นของ Ruby สามารถเร่งรอบการพัฒนาและลดข้อผิดพลาดบางประเภท แต่ต้องแลกกับประสิทธิภาพการทำงานและการใช้หน่วยความจำที่มากขึ้น
นักพัฒนาบางคนโต้แย้งว่าคุณสมบัติด้านความปลอดภัยของภาษาระดับสูงนั้นคุ้มค่ากับต้นทุนด้านทรัพยากร โดยเฉพาะอย่างยิ่งเมื่อความสามารถของไมโครคอนโทรลเลอร์ยังคงพัฒนาต่อไป ความสามารถในการหลีกเลี่ยงข้อผิดพลาดทั่วไป เช่น buffer overflows, null pointer dereferences และการรั่วไหลของหน่วยความจำ สามารถนำไปสู่ระบบที่แข็งแกร่งยิ่งขึ้น โดยเฉพาะอย่างยิ่งสำหรับนักพัฒนาที่ไม่ใช่ผู้เชี่ยวชาญด้านระบบฝังตัว
PicoRuby แสดงถึงจุดกึ่งกลางที่น่าสนใจในการถกเถียงนี้ โดยนำเสนอไวยากรณ์และโมเดลการเขียนโปรแกรมของ Ruby ในขณะที่ยังคงรักษาขนาดที่ค่อนข้างเล็กเมื่อเทียบกับการใช้งาน Ruby แบบเต็มรูปแบบ เมื่ออุปกรณ์ฝังตัวยังคงเติบโตในด้านประสิทธิภาพการประมวลผลและความจุของหน่วยความจำ เราอาจเห็นการนำรันไทม์ภาษาระดับสูงมาใช้มากขึ้น โดยเฉพาะอย่างยิ่งในบริบทของการสร้างต้นแบบและการศึกษา ซึ่งความเร็วในการพัฒนามีความสำคัญมากกว่าประสิทธิภาพการทำงานโดยสมบูรณ์
อ้างอิง: PicoRuby