การพัฒนาล่าสุดของ brush (Bo(u)rn(e) RUsty SHell) ซึ่งเป็นเชลล์ที่เข้ากันได้กับ POSIX และ bash ที่พัฒนาด้วยภาษา Rust ได้จุดประกายการสนทนาในวงกว้างภายในชุมชนนักพัฒนาเกี่ยวกับทิศทางในอนาคตของเชลล์แบบคอมมานด์ไลน์ ในขณะที่ brush เองเป็นเพียงหนึ่งในเครื่องมือระบบที่พัฒนาด้วย Rust ที่มีจำนวนเพิ่มมากขึ้น การสนทนาที่เกิดขึ้นได้เปิดเผยคำถามที่ลึกซึ้งกว่าเกี่ยวกับการสร้างสมดุลระหว่างความเข้ากันได้กับระบบเก่าและนวัตกรรมสมัยใหม่
การถกเถียงเรื่องความเข้ากันได้กับ POSIX
หนึ่งในประเด็นสำคัญที่เกิดขึ้นจากการประกาศเปิดตัว brush คือการพิจารณาว่าเชลล์ใหม่ควรรักษาความเข้ากันได้กับ POSIX หรือควรแยกตัวออกจากมาตรฐานที่มีอายุหลายทศวรรษนี้ นักพัฒนาหลายคนตั้งคำถามว่าการยึดมั่นกับ POSIX ยังคงมีคุณค่าในสภาพแวดล้อมการคำนวณในปัจจุบันหรือไม่
ถึงเวลาแล้วที่เราควรก้าวข้ามการปฏิบัติตามมาตรฐาน Posix สำหรับเชลล์ อย่าเข้าใจผิด มันเป็นสิ่งที่ยอดเยี่ยมในช่วงทศวรรษ 1980 และ 1990 ในช่วงสงคราม Unix แต่ด้วยความเป็นจริงที่น่าขบขัน Linux ได้ชนะสงคราม Unix และทุกวันนี้การปฏิบัติตามมาตรฐาน Posix ในส่วนที่เกี่ยวกับเชลล์ ส่วนใหญ่กลับเป็นการขัดขวางนวัตกรรมหรือการทำให้ทันสมัย โดยการตรึงแนวคิดของเทอร์มินัลไว้กับสิ่งที่มีมาตั้งแต่ปี 1988
ความคิดเห็นนี้ได้รับการตอบรับจากผู้แสดงความคิดเห็นหลายคนที่ชี้ให้เห็นถึงการตัดสินใจของ Fish shell ที่จะละทิ้งความเข้ากันได้กับ POSIX เพื่อการออกแบบที่เน้นการใช้งานที่สะดวกมากขึ้น Fish ซึ่งเพิ่งผ่านการเปลี่ยนผ่านไปสู่ Rust ได้รับคำชมเชยสำหรับการให้ความสำคัญกับประสบการณ์ผู้ใช้มากกว่าการยึดมั่นอย่างเคร่งครัดกับมาตรฐานเก่า การสนทนานี้ชี้ให้เห็นถึงความแตกแยกที่เพิ่มขึ้นระหว่างผู้ที่ให้คุณค่ากับความเข้ากันได้ย้อนหลังและผู้ที่เชื่อว่าเทคโนโลยีเชลล์ต้องการการวิวัฒนาการที่รุนแรงมากขึ้น
สองเส้นทางสู่อนาคต: Supersets กับ Clean Breaks
การสนทนาในชุมชนเผยให้เห็นแนวทางหลักสองประการในการพัฒนาเชลล์ แนวทางแรกเกี่ยวข้องกับการสร้าง supersets ของมาตรฐาน POSIX ดังที่เห็นใน Bash, Zsh และโครงการ Oils (พร้อมองค์ประกอบ OSH และ YSH) เชลล์เหล่านี้รักษาความเข้ากันได้ย้อนหลังในขณะที่เพิ่มคุณสมบัติสมัยใหม่ แนวทางที่สอง ซึ่งมีตัวอย่างจาก Fish และ PowerShell เกี่ยวข้องกับการตัดขาดจาก POSIX เพื่อเปิดทางให้มีการออกแบบใหม่ที่มีพื้นฐานมากขึ้น
นักพัฒนาหลายคนสังเกตว่าแนวทางเหล่านี้ไม่จำเป็นต้องแยกออกจากกัน เวิร์กโฟลว์ทั่วไปที่กล่าวถึงโดยผู้แสดงความคิดเห็นหลายคนเกี่ยวข้องกับการใช้เชลล์ที่ทันสมัยกว่าและไม่เข้ากันกับ POSIX อย่าง Fish สำหรับการใช้งานแบบโต้ตอบ ในขณะที่ยังคงใช้เชลล์ที่เข้ากันได้กับ POSIX สำหรับการเขียนสคริปต์ แนวทางแบบผสมผสานนี้ช่วยให้นักพัฒนาสามารถเพลิดเพลินกับการยศาสตร์ที่ดีขึ้นในการใช้งานประจำวันโดยไม่ต้องเสียสละความเข้ากันได้สำหรับสคริปต์ที่อาจต้องทำงานบนระบบต่าง ๆ
ข้อมูลแบบโครงสร้าง: พรมแดนใหม่ของเชลล์
ประเด็นที่เกิดขึ้นซ้ำในการสนทนาคือคุณค่าของการจัดการข้อมูลแบบโครงสร้างในเชลล์สมัยใหม่ ผู้แสดงความคิดเห็นหลายคนชี้ให้เห็นถึง Nushell และ PowerShell เป็นตัวอย่างของเชลล์ที่ก้าวข้ามการป้อนข้อมูล/ส่งออกแบบข้อความเพื่อให้ความสามารถในการจัดการข้อมูลที่สมบูรณ์ยิ่งขึ้น
ผู้สนับสนุนข้อมูลแบบโครงสร้างในเชลล์เน้นย้ำว่าการมีข้อมูลแบบมีโครงสร้างและมีประเภทให้ข้อได้เปรียบที่สำคัญสำหรับงานจัดการข้อมูลที่ซับซ้อน ความสามารถในการทำงานโดยตรงกับ JSON, CSV และรูปแบบอื่น ๆ โดยไม่ต้องแยกวิเคราะห์ข้อความอยู่ตลอดเวลาถูกอธิบายว่าเป็น พลังพิเศษที่น่าทึ่ง โดยผู้หนึ่งที่ชื่นชอบ คนอื่น ๆ ชี้ไปที่องค์ประกอบ YSH ของโครงการ Oils ว่าเป็นอีกแนวทางหนึ่งในการรวมการจัดการข้อมูลแบบโครงสร้างในขณะที่รักษาเส้นทางการย้ายจาก bash แบบดั้งเดิม
การเปรียบเทียบเชลล์ต่างๆ
เชลล์ | การพัฒนา | รองรับ POSIX | ข้อมูลแบบโครงสร้าง | หมายเหตุ |
---|---|---|---|---|
brush | Rust | ใช่ | ไม่ | โครงการใหม่ มุ่งเน้นความเข้ากันได้กับ bash |
OSH/YSH (Oils) | Python → C++ | ใช่ | ใช่ (ใน YSH) | มุ่งเน้นเส้นทางการย้ายจาก bash |
Fish | Rust (เมื่อไม่นานมานี้) | ไม่ | จำกัด | ให้ความสำคัญกับประสบการณ์ผู้ใช้ |
Nushell | Rust | ไม่ | ใช่ | สร้างขึ้นรอบข้อมูลแบบโครงสร้าง |
PowerShell | .NET | ไม่ | ใช่ | แนวทางแบบบันทึกข้อมูล |
ข้อพิจารณาด้านประสิทธิภาพและขนาด
มีการยกประเด็นทางเทคนิคบางประการเกี่ยวกับผลกระทบของการใช้ Rust ในการพัฒนาเครื่องมือระบบ ผู้แสดงความคิดเห็นคนหนึ่งสังเกตเห็นความแตกต่างของขนาดที่สำคัญระหว่างไบนารี bash แบบดั้งเดิม (1.1MB) และการใช้งาน brush (6.9MB) หากไม่มีไลบรารีที่ใช้ร่วมกัน นี่เป็นการเพิ่มขึ้นของความต้องการทรัพยากรที่สำคัญซึ่งอาจเป็นปัญหาสำหรับระบบฝังตัวหรือสภาพแวดล้อมที่มีทรัพยากรจำกัดอื่น ๆ
ข้อสังเกตนี้เชื่อมโยงกับการสนทนาที่กว้างขึ้นเกี่ยวกับการแลกเปลี่ยนที่เกี่ยวข้องกับการเขียนเครื่องมือระบบใหม่ในภาษาที่มีความปลอดภัยด้านหน่วยความจำเช่น Rust ในขณะที่การใช้งานดังกล่าวให้ความปลอดภัยที่ดีขึ้นและมักจะกำจัดข้อบกพร่องทั้งหมด แต่อาจมาพร้อมกับต้นทุนด้านประสิทธิภาพหรือทรัพยากรที่ต้องพิจารณาอย่างรอบคอบ
การเกิดขึ้นของ brush และโครงการที่คล้ายคลึงกันสะท้อนถึงวิวัฒนาการอย่างต่อเนื่องของอินเทอร์เฟซแบบคอมมานด์ไลน์ในการคำนวณสมัยใหม่ ในขณะที่เชลล์อาจดูเหมือนเป็นปัญหาที่แก้ไขแล้วสำหรับผู้ใช้ทั่วไป การสนทนาเหล่านี้เปิดเผยให้เห็นระบบนิเวศที่มีชีวิตชีวาของนวัตกรรมและปรัชญาที่แข่งขันกันเกี่ยวกับวิธีที่เราควรโต้ตอบกับคอมพิวเตอร์ของเราที่คอมมานด์ไลน์ ไม่ว่าจะผ่านการวิวัฒนาการแบบค่อยเป็นค่อยไปของเชลล์ที่เข้ากันได้กับ POSIX หรือการออกแบบใหม่ที่ปฏิวัติวงการ คอมมานด์ไลน์ที่เรียบง่ายยังคงปรับตัวให้เข้ากับความต้องการที่เปลี่ยนแปลงของนักพัฒนาและผู้ดูแลระบบ
อ้างอิง: brush