ข่าวไอที Blognone » Mozilla เปิดบทเรียนเขียน Firefox Crash Reporter ใหม่ด้วยภาษา Rust

Mozilla เปิดบทเรียนเขียน Firefox Crash Reporter ใหม่ด้วยภาษา Rust

25 เมษายน 2024
9   0

ผู้ใช้ Firefox อาจเคยเจอปัญหาแอพแครช และเจอหน้าจอส่งรายงานการแครช Firefox Crash Reporter กลับไปยัง Mozilla เพื่อใช้วิเคราะห์

Firefox Crash Reporter มีสถานะเป็นแอพแยกขาดจาก Firefox แต่บันเดิลมาในชุดติดตั้งเดียวกัน เหตุผลที่ต้องแยกขาดจากกันเป็นเพราะเมื่อ Firefox แครช ตัว Crash Reporter จะยังทำงานได้ต่อไป ไม่ใช่โดนลากให้แครชตามไปด้วยกัน

อย่างไรก็ตาม Crash Reporter ถูกเขียนขึ้นมานานมากแล้ว (เบื้องหลังเป็น C++ และบางส่วนเป็น Objective-C สำหรับเวอร์ชันแมค) หลายส่วนเริ่มล้าสมัย เช่น เวอร์ชันแมคจะสร้างไฟล์ไบนารีด้วยเครื่องมือตัวเก่าที่แอปเปิลเองยังเลิกใช้ไปแล้ว โค้ดตัวเดิมจึงกลายเป็นภาระในการดูแลมากขึ้นเรื่อยๆ

ล่าสุด Mozilla ประกาศว่าเพิ่งเขียน Firefox Crash Reporter ขึ้นมาใหม่ด้วยภาษา Rust ด้วยเหตุผลหลายอย่าง เช่น ความปลอดภัยของหน่วยความจำ (memory safety) ที่ระดับของภาษา, ระบบตัวแปร type system และไลบรารีมาตรฐานทำให้ดูแลโค้ดได้ง่าย

No Description

หน้าตา Firefox Crash Reporter ตัวใหม่ ที่หน้าตาเหมือนเดิม

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

แนวทางของ Mozilla ยังไปสุดคือ จะพยายามมีโค้ดเฉพาะแพลตฟอร์มให้น้อยที่สุด ดังนั้นโค้ดสร้าง GUI จึงต้องสร้าง GUI abstraction ตรงกลางขึ้นมาก่อน ใช้โครงสร้างแบบ declarative แล้วค่อยแปลงมันไปเป็น GUI แบบเนทีฟบนแต่ละแพลตฟอร์ม ผ่านชุดสร้าง GUI ของแพลตฟอร์มอีกที

  • Linux ใช้ GTK+ 3 ซึ่งถือว่ามีปัญหาน้อยที่สุด เพราะ GTK ค่อนข้างสมัยใหม่ ใช้แนวทาง declarative เหมือนกัน
  • macOS ใช้ Cocoa (AppKit และ Foundation frameworks) เจอปัญหาว่า GUI ของแมคมีโค้ดส่วนที่ถูก generated ด้วย Xcode เยอะมาก การเขียน GUI ขึ้นมาเองโดยไม่มี Xcode ต้องเขียนบางอย่างเองทั้งหมด เช่น ช็อตคัตคีย์บอร์ด
  • Windows ใช้ Win32 API ซึ่งเป็นแพลตฟอร์มที่เขียนยากที่สุด เพราะ Win32 API เก่ามากๆ แล้ว ไม่รองรับการทำ abstraction มากนัก ต้องคัสตอมโค้ดเยอะมาก

ในบทความยังมีรายละเอียดส่วนอื่นๆ อีกมาก ใครที่สนใจสร้างแอพด้วย Rust ก็ตามไปอ่านกันได้

ที่มา - Mozilla

[source: https://www.blognone.com/node/139410]