เปรียบเทียบภาษาการเขียนโปรแกรม
สนิม: ความปลอดภัยของหน่วยความจำโดยไม่ต้องใช้ตัวเก็บขยะ
ข้อเสนอของ Rust นั้นแม่นยำ: กำจัดกลุ่มข้อผิดพลาดที่ใช้งานได้หลังเลิกใช้งานและกลุ่มข้อผิดพลาดของข้อมูลในเวลาคอมไพล์ ในขณะเดียวกันก็รักษาประสิทธิภาพความเร็วดั้งเดิมไว้และไม่มีการหยุดตัวรวบรวมขยะ อุตสาหกรรมสังเกตเห็นตั้งแต่เคอร์เนล OS ที่ยอมรับโมดูล Rust ไปจนถึงการแก้ไขความปลอดภัยรายใหญ่ในโค้ดเบส C-heavy นี่คือบทความเฉพาะเบื้องหลังเรียงความ Why-Rust ของเราและการเปรียบเทียบแบบตัวต่อตัวกับ Go, Python และ C++
ประเด็นสำคัญ
- เครื่องมือตรวจสอบการยืมเป็นสิ่งแปลกใหม่ที่จ่าย: ความเป็นเจ้าของบวกอายุการใช้งานจะลบตระกูล CVE ที่เสียหายของหน่วยความจำทั้งหมดแบบคงที่ (แบบไม่ใช้แล้วทิ้ง, ไม่ใช้สองครั้ง, ตัววนซ้ำใช้ไม่ได้, การแข่งขันของข้อมูลระหว่างเธรด); ราคาตามหลักสรีระศาสตร์เดียวกันนี้อธิบายว่าทำไมชุมชนจึงแนะนำให้เรียนรู้ตั้งแต่เนิ่นๆ
- ไม่มีตัวรวบรวมขยะที่ไม่ได้ทำการตลาด: พฤติกรรมของหน่วยความจำที่มีความหน่วงแฝงมีความสำคัญในกรณี Edge ที่มีความต้องการมากที่สุดของอุตสาหกรรม (แบบฝัง เส้นทางเคอร์เนล เสียงแบบเรียลไทม์) ประสิทธิภาพของโค้ดเนทีฟของ Rust ที่ไม่มีการหยุด GC ชั่วคราวคือเหตุผลทั้งหมดที่ 'เขียนใหม่ใน Rust' กำหนดเป้าหมายเส้นทางลัดเฉพาะมากกว่าอย่างอื่น
- Cargo คือคูน้ำแห่งประสบการณ์: การพึ่งพา/เวอร์ชัน/การสร้างเครื่องมือ รวมถึงระบบนิเวศของ crates.io ทำให้เรื่องราวการเริ่มต้นใช้งานราบรื่นกว่ามรดกทางภาษาที่คอมไพล์แบบเดิม 'การตรวจสอบสินค้า' กับฐานข้อมูลที่ปรึกษาคือคำตอบของห่วงโซ่อุปทาน
- การทำงานร่วมกันทำให้ใช้งานได้จริง: ขอบเขตของ FFI ถึง C เป็นเรื่องราวการรวมมาตรฐาน (เรียกไลบรารี C ที่มีอยู่ รับเพจที่คล้ายกันใน Rust จากภาษาอื่น) ซึ่งเป็นเหตุผลว่าทำไม Rust จึงอาศัยอยู่ในระบบที่ใหญ่กว่า (เบราว์เซอร์ เคอร์เนล เว็บเซิร์ฟเวอร์) แทนที่จะต้องการการแยกสนามเขียว
- ค่าใช้จ่ายนั้นตรงไปตรงมา: เส้นโค้งการเรียนรู้ (รูปแบบการยืมเปลี่ยนแนวคิดเกี่ยวกับนามแฝง / ความเป็นเจ้าของข้อมูล) รวมถึงเวลาในการคอมไพล์ที่มีขนาดใหญ่ในรอบการวนซ้ำที่จำกัด ทีมที่ใช้จังหวะผลิตภัณฑ์ที่มี CRUD จำนวนมากมักจะจัดส่งได้เร็วกว่าด้วยภาษา GC (บทความเกี่ยวกับสาเหตุสนิมของเราครอบคลุมถึงส่วนประกอบใดที่จะเติบโตเป็นสนิมและส่วนประกอบใดยังคงอยู่)
- ในทางปฏิบัติจะประสบความสำเร็จในด้านใด: ส่วนประกอบโครงสร้างพื้นฐานและตัวแยกวิเคราะห์ (พร็อกซี/ตัวกรอง/สายโซ่เครื่องมือ), ระบบนิเวศของ CLI, โมดูลแบบฝังและเคอร์เนล และการเขียนซ้ำที่มีความสำคัญต่อความปลอดภัย โดยที่ข้อบกพร่องของหน่วยความจำตัวเดียวมีราคาสูงกว่าเส้นโค้งทางวิศวกรรมที่เคยทำมา
บันทึกจากหน้างาน
การเขียนใหม่ของ Rust ซึ่งทำให้ Keep เข้ามาแทนที่ตัวแยกวิเคราะห์ C ที่ผลิต CVE หนึ่งตัวต่อปี: ตัวตรวจสอบการยืมพบจุดบกพร่องที่เทียบเท่ากันสามจุดในระหว่างการเริ่มต้นใช้งานซึ่งตัวติดตาม CVE ไม่เคยปรากฏให้เห็น เส้นโค้งการเรียนรู้คือราคาของคลาสข้อบกพร่องที่ถูกลบ
คำถามที่พบบ่อย
ทีมของฉันควรเขียนทุกอย่างใหม่ด้วยภาษา Rust หรือไม่
ไม่: เขียนส่วนประกอบหลักที่ไวต่อความน่าเชื่อถือใหม่ (ตัวแยกวิเคราะห์ พร็อกซี เคสขอบของเคอร์เนล) โดยที่ความปลอดภัยมีความสำคัญ บทความ Why-Rust ของเราครอบคลุมกรอบการกำหนดเป้าหมายส่วนประกอบที่ซื่อสัตย์มากกว่าแฟชั่น
ตัวตรวจสอบการยืมสูงชันแค่ไหน?
สัปดาห์สำหรับนักพัฒนาที่เชี่ยวชาญระบบ เดือนสำหรับสถาปัตยกรรมที่เน้นความเป็นเจ้าของ ผลตอบแทนจะปรากฏขึ้นโดยที่โค้ดที่เกิดขึ้นพร้อมกันซึ่งครั้งหนึ่งเคยสร้างเงื่อนไขการแข่งขันจะคอมไพล์อย่างปลอดภัยแทน (ใครก็ตามที่เขียนมัน)
เทียบกับ Go head-to-head เป็นยังไงบ้าง?
รวบรวมเวลามากกว่าความเร็วการสร้างของ Go; โมเดลการทำงานพร้อมกันแตกต่างกัน (การเป็นเจ้าของสนิม, ช่อง Go) ระบบนิเวศ CLI-plus-reliability ทั้งเป็นมิตร บทความสนิมกับไปของเราครอบคลุมขอบเขตที่ซื่อสัตย์ต่อประเภทปริมาณงาน
ตอนนี้ Rust ทำงานในเคอร์เนล Linux หรือไม่
ใช่: รองรับเคอร์เนลแล้ว (อะแดปเตอร์ดังนั้นโมดูลอาจเขียนด้วยภาษา Rust) และไดรเวอร์/ส่วนประกอบได้รวมเข้าด้วยกันที่ระยะขอบ การยอมรับทางอุตสาหกรรมยังอยู่ในช่วงเริ่มต้น แต่มีการกำหนดทิศทาง
Kinetikatech ช่วยเรื่อง เปรียบเทียบภาษาการเขียนโปรแกรม ได้อย่างไร
คุณไม่ควรต้องกลายเป็นผู้เชี่ยวชาญเรื่อง เปรียบเทียบภาษาการเขียนโปรแกรม: ภาษาสำหรับงานระบบ การเขียนสคริปต์ และบริการ เปรียบเทียบกับสิ่งที่สำคัญจริง ๆ ในการผลิต: การรับประกันความปลอดภัย ความเร็วเบื้องต้น ใครที่คุณสามารถจ้างได้ และความเจ็บปวดของบริการที่เกิดขึ้นในการปรับใช้และแพตช์ นั่นคือหน้าที่ของ การจัดการเซิร์ฟเวอร์และการบำรุงรักษาเว็บไซต์ พอดี ตั้งค่า เสริมความปลอดภัย เฝ้าระวัง และมีคนรับโทรตลอดวันทุกวัน