ไลบรารี libghostty-vt ของ Ghostty สัญญาว่าจะแก้ไขความยุ่งเหยิงของการจำลอง Terminal ในแอปพลิเคชันต่างๆ

ทีมชุมชน BigGo
ไลบรารี libghostty-vt ของ Ghostty สัญญาว่าจะแก้ไขความยุ่งเหยิงของการจำลอง Terminal ในแอปพลิเคชันต่างๆ

Mitchell Hashimoto ผู้สร้าง HashiCorp และ terminal emulator ที่รวดเร็วอย่าง Ghostty ได้ประกาศส่วนประกอบแรกของโปรเจ็กต์ libghostty ที่ทะเยอทะยาน ไลบรารี libghostty-vt มีเป้าหมายเพื่อแก้ไขปัญหาที่แพร่หลายซึ่งนักพัฒนาส่วนใหญ่ไม่เคยตระหนักว่ามีอยู่: โลกของการจำลอง terminal ที่ยุ่งเหยิงและไม่สมบูรณ์ในแอปพลิเคชันหลายร้อยตัว

ปัญหาการจำลอง Terminal ที่ซ่อนอยู่

การจำลอง terminal ไม่ได้มีไว้สำหรับแอป terminal เฉพาะอย่าง Ghostty หรือ iTerm2 เท่านั้น มันอยู่ทุกที่ โปรแกรมแก้ไขโค้ดยอดนิยมอย่าง VS Code ใช้ Xterm.js ในขณะที่ผลิตภัณฑ์ของ JetBrains อาศัย jediterm terminal multiplexer อย่าง tmux และ zellij จริงๆ แล้วเป็น terminal emulator แบบเต็มรูปแบบ แม้แต่เว็บเซอร์วิสอย่าง GitHub Actions, Vercel และ Render ก็ใช้เวอร์ชันของตัวเองเพื่อแสดง build logs และ command output ที่มีสี

ปัญหาคือการใช้งานเหล่านี้ส่วนใหญ่เป็นโซลูชันแบบครั้งเดียวที่สร้างขึ้นตั้งแต่เริ่มต้น มักจะไม่สมบูรณ์ มีบั๊ก และช้า เพราะการจำลอง terminal ดูเรียบง่ายบนพื้นผิวแต่ซ่อนความซับซ้อนที่ไม่คาดคิด นักพัฒนาหลายคนจึงเสียเวลาไปกับการประดิษฐ์ล้อใหม่แทนที่จะมุ่งเน้นไปที่ผลิตภัณฑ์หลักของตน

แอปพลิเคชันที่ใช้ Terminal Emulation:

  • Terminal Emulators: Ghostty , Kitty , iTerm2
  • Code Editors: VS Code ( Xterm.js ), JetBrains ( jediterm ), Zed ( Alacritty )
  • Terminal Multiplexers: tmux , zellij
  • Web Services: GitHub Actions , Vercel , Render (build logs)
  • Future libghostty Components: Input handling , GPU rendering , GTK widgets , Swift frameworks

สิ่งที่ทำให้ libghostty-vt พิเศษ

ไลบรารี libghostty-vt สกัดแกนหลักที่พิสูจน์แล้วจาก parsing engine ของ terminal ใน Ghostty ในโลกแห่งความเป็นจริง สิ่งที่ทำให้มันน่าทึ่งคือการไม่มี dependencies เลย - มันไม่ต้องการแม้แต่ libc นี่ทำให้มันพกพาได้อย่างเหลือเชื่อและง่ายต่อการฝังตัวในแอปพลิเคชันหรือภาษาโปรแกรมมิ่งใดๆ

ไลบรารีนี้สืบทอดฟีเจอร์ที่ผ่านการทดสอบแล้วของ Ghostty: การ parsing ที่ปรับปรุงด้วย SIMD เพื่อความเร็ว การรองรับ Unicode ที่ยอดเยี่ยม การออกแบบที่ประหยัดหน่วยความจำ และความเข้ากันได้กับโปรโตคอลขั้นสูงอย่าง Kitty Graphics Protocol และ Tmux Control Mode ทั้งหมดนี้ได้รับการทดสอบอย่างละเอียดด้วย fuzzing และ Valgrind เพื่อให้มั่นใจในความน่าเชื่อถือ

การสนทนาในชุมชนเผยให้เห็นความตื่นเต้นเกี่ยวกับการใช้งานที่เป็นไปได้ โปรเจ็กต์ Neovim กำลังพิจารณาเปลี่ยนจาก libvterm ไปใช้ libghostty-vt เมื่อพร้อมแล้ว โดยเฉพาะสำหรับฟีเจอร์อย่าง scrollback และ text reflow on resize ที่ขาดหายไปจากโซลูชันที่มีอยู่ในปัจจุบัน

คุณสมบัติหลักของ libghostty-vt :

  • ไม่มีการพึ่งพาภายนอก (ไม่ต้องการ libc)
  • การแยกวิเคราะห์ที่ปรับให้เหมาะสมด้วย SIMD เพื่อประสิทธิภาพ
  • รองรับ Unicode ได้อย่างยอดเยี่ยม
  • ออกแบบให้ใช้หน่วยความจำอย่างมีประสิทธิภาพ
  • ผ่านการทดสอบด้วย Fuzzing และ Valgrind
  • รองรับ Kitty Graphics Protocol และ Tmux Control Mode
  • Cross-platform C API เพื่อการรวมเข้ากับภาษาต่างๆ ได้อย่างง่ายดาย

สถานะปัจจุบันและแผนอนาคต

ตอนนี้ libghostty-vt มีให้ใช้เป็น Zig module สำหรับการทดสอบเบื้องต้น แม้ว่า C API จะยังไม่พร้อมใช้งาน Hashimoto เน้นย้ำว่าแม้ API เองจะอยู่ในคุณภาพ alpha แต่ logic พื้นฐานนั้นแข็งแกร่งมากเพราะมันขับเคลื่อน Ghostty ใน production

วิสัยทัศน์ระยะยาวขยายไปไกลกว่าการ parsing เท่านั้น ส่วนประกอบ libghostty ในอนาคตจะจัดการกับการประมวลผล input, GPU rendering และแม้แต่การให้ widget ที่พร้อมใช้สำหรับเฟรมเวิร์กอย่าง GTK และ Swift แนวทาง modular หมายความว่านักพัฒนาสามารถเลือกเฉพาะสิ่งที่ต้องการโดยไม่ทำให้แอปพลิเคชันของตนพองตัว

การรองรับแพลตฟอร์มเบื้องต้นมุ่งเป้าไปที่ macOS และ Linux บนสถาปัตยกรรม x86_64 และ aarch64 ทั้งคู่ พร้อมแผนขยายไปยัง Windows, embedded devices และเว็บเบราว์เซอร์ผ่าน WebAssembly

การรองรับแพลตฟอร์มเริ่มต้น:

  • macOS (x86_64 และ aarch64)
  • Linux (x86_64 และ aarch64)
  • วางแผนไว้: Windows, อุปกรณ์ฝังตัว, WebAssembly

สถานะปัจจุบัน:

  • Zig API: พร้อมใช้งานสำหรับการทดสอบ
  • C API: เร็วๆ นี้
  • คุณภาพ: Alpha (API อาจมีการเปลี่ยนแปลง แต่ตรรกะหลักมีเสถียรภาพ)
  • เป้าหมายการเปิดตัว: ภายใน 6 เดือน

การตอบสนองของชุมชนและผลกระทบในโลกแห่งความเป็นจริง

ชุมชนนักพัฒนาตอบสนองอย่างกระตือรือร้นต่อการประกาศนี้ หลายคนตระหนักถึงศักยภาพของ libghostty ในการกำจัดประสบการณ์ terminal ที่ไม่สอดคล้องกันและมีบั๊กที่รบกวนแอปพลิเคชันหลายตัวในปัจจุบัน ผู้ใช้บางคนแบ่งปันความผิดหวังกับการใช้งานที่มีอยู่ เช่น โปรแกรมแก้ไขของ JetBrains ที่จัดการ cursor shape sequences ไม่ถูกต้องเนื่องจากบั๊กในการ parsing

พวก nerd จะทำได้ดีกว่านี้มากสำหรับตัวเราเองถ้าเราสามารถสร้าง momentum เบื้องหลังความคิดเห็นแบบนี้ได้ การค้นหาความเห็นอกเห็นใจแบบกลไก (และโปรแกรมมิ่ง) มีความสำคัญมากมาย!

Hashimoto กำลังแสวงหาข้อเสนอแนะจากผู้ใช้ที่เป็นไปได้เพื่อช่วยกำหนดรูปแบบการออกแบบ API เขาส่งเสริมให้นักพัฒนาเข้าร่วม Ghostty Discord หรือติดต่อโดยตรงเพื่อร่วมมือในชิ้นส่วนโครงสร้างพื้นฐานที่สำคัญนี้

โปรเจ็กต์ libghostty เป็นตัวแทนของมากกว่าแค่ไลบรารีอีกตัวหนึ่ง - มันเป็นความพยายามที่จะมาตรฐานและปรับปรุงการจำลอง terminal ทั่วทั้งระบบนิเวศซอฟต์แวร์ หากสำเร็จ มันอาจกำจัดชั่วโมงนับไม่ถ้วนของความพยายามที่ซ้ำซ้อนในขณะที่มอบประสบการณ์ terminal ที่สอดคล้องกันและมีคุณภาพสูงให้กับผู้ใช้ทุกที่ที่พวกเขาพบเจอ

อ้างอิง: Libghostty Is Coming