Theppitak's blog

My personal blog.

03 ธันวาคม 2551

32-bit datrie

จากที่เคย เกริ่น ไว้นานแล้ว ถึงปัญหาเรื่อง dict ใน swath ที่เพิ่ม-ลบคำไม่ได้ จำเป็นต้องแทนที่โค้ด trie ด้วย datrie ตัวใหม่ แต่มีปัญหาว่า datrie นั้นใช้ node index ขนาด 16 บิต ซึ่งทำให้จำนวนโหนดไม่เพียงพอกับรายการคำของ swath ประกอบกับปัญหา dict ตัดคำของ libthai ก็มาชนลิมิตนี้เหมือนกัน รวมทั้งมีผู้รายงานเข้ามาบ่อย ว่าต้องการเพิ่มคำให้ได้มากกว่านี้ ก็สรุปว่าต้องแก้ datrie ให้รองรับ node index ขนาดใหญ่ขึ้น

ก็ได้ ประกาศแผน ใน thai-linux-foss-devel mailing list ว่าจะตัดสินใจ break ABI โดยล้มเลิกความคิดเรื่อง backward compatibility กับ trie 16 บิต หรือการใช้ index 24 บิต แต่จะใช้ index 32 บิตอย่างเดียวไปเลย เพื่อความเรียบง่ายของโค้ด พร้อมกันนี้ก็ถือโอกาสปรับ API ให้รองรับการใช้งานที่กว้างขึ้นด้วย สรุปแผนคือ:

  • แตก branch r_0_1_x-branch สำหรับ maintain datrie 0.1.x แล้วพัฒนารุ่นใหม่ใน HEAD ซึ่งจะมุ่งสู่รุ่น 0.2.0 ต่อไป
  • break ABI โดยเปลี่ยน SONAME ของไลบรารีเป็น libdatrie.so.1
  • เปลี่ยนขนาดของ node index จาก 16 บิต เป็น 32 บิต
  • ปรับฟอร์แมตของแฟ้ม จากเดิมที่แยกเป็น *.br และ *.tl ให้รวมอยู่ในแฟ้มเดียว
  • ปรับ API จากที่ต้องอ่าน-เขียนกับแฟ้มเสมอ ให้กลายเป็นแค่ทางเลือกหนึ่งในการ load/save เท่านั้น และให้ใช้ trie ใน memory ล้วน ๆ ได้ด้วย

ตอนนี้ใน CVS ได้ใช้ node index ขนาด 32 บิตแล้ว รวมทั้งปรับโค้ดเรื่องการจัดการ overflow นิดหน่อย ขั้นต่อไปคือทำเรื่อง API และฟอร์แมตของแฟ้ม

ป้ายกำกับ: , ,

1 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem