หลายคนน่าจะสร้างเครื่องมือ CLI/TUI ด้วย Rust เพราะข้อดีอย่างประสิทธิภาพของ Rust และการแจกจ่ายแบบไบนารีเดียว
เครื่องมืออย่าง Textual ของ Python หรือ Ink ของ JS นั้นไวยากรณ์ค่อนข้างใช้งานง่าย แต่บางครั้งก็อาจกังวลเรื่องการพึ่งพา runtime หรือ overhead ด้านประสิทธิภาพได้เช่นกัน ส่วนฝั่ง Rust แม้ ratatui จะมี ecosystem ที่ดี แต่ก็ใช้เวลาไม่น้อยในการจัดเลย์เอาต์
เลยทำขึ้นมาสองอย่างนี้
1. tui.builders — Terminal UI บนเบราว์เซอร์
เป็นเอดิเตอร์ที่ออกแบบแบบภาพและส่งออกโค้ด Rust ได้
https://tui.builders
เมื่อคุณลากวิดเจ็ตและตั้งค่าคุณสมบัติใน inspector
โค้ดจะถูกสร้างแบบ 1:1:
- inspector: width=30, padding=2, border=rounded
- code: .w(30).p(2).border(Border::Rounded)
2. SuperLightTUI — ออกแบบมาเพื่อการแมปแบบ 1:1 นี้
เป็นไลบรารี Rust TUI
ใช้แนวทาง utility class แบบ CSS flexbox + Tailwind
ถ้ามีประสบการณ์พัฒนาเว็บ ก็สามารถจัดเลย์เอาต์ได้โดยแทบไม่ต้องเรียนรู้เพิ่ม
slt::run(|ui| {
ui.bordered(Border::Rounded).p(2).gap(1).col(|ui| {
ui.text("hello").bold().fg(Color::Cyan);
if ui.button("click").clicked { count += 1; }
});
});
closure เดียวคือทั้งแอป ไม่ต้องมีโครงสร้าง App, event loop
หรือการ implement trait ก็เรนเดอร์ได้ใน 3 บรรทัด
- dependency 2 ตัว (crossterm + unicode-width), unsafe 0
- เรนเดอร์แบบ immediate-mode, เฟรมละ ~1ms
- วิดเจ็ตมากกว่า 50 แบบ (กราฟ, ตาราง, รูปภาพ, AI widget ฯลฯ)
- ใช้งานได้ด้วยตัวไลบรารีอย่างเดียวโดยไม่ต้องใช้เอดิเตอร์
หวังว่าจะเป็นประโยชน์สำหรับคนที่อยากได้ทั้งประสิทธิภาพของ Rust TUI และความเร็วในการพัฒนาไปพร้อมกัน
- tui.builders: https://tui.builders
- GitHub: https://github.com/subinium/SuperLightTUI
- crates.io: cargo add superlighttui
2 ความคิดเห็น
เคยใช้ Ratatui แล้วรู้สึกขี้เกียจเลยเลิกใช้ไป แต่นี่จับจุดด้อยได้ตรงเป๊ะเลย! ดีมากจริง ๆ 555
ว้าว! ดีมากเลย!!