ยังมีคนที่พูดดูแคลนทั้งที่ไม่รู้ด้วยซ้ำว่า Mark Russinovich คือใคร... เขาเป็นผู้เขียนชุดเครื่องมือ sysinternals tool suite และหนังสือ Windows Internals... เป็นคนที่ทำเครื่องมือจากการรีเวิร์สเอนจิเนียริง Windows จนได้เป็น Microsoft Fellow...
ถ้าวัดจากจำนวนคอมเมนต์ก็เหมือนจะใช่ แต่ว่า.....
ดูเหมือนว่าสถานการณ์ที่ถูกต้องคือ... มีคอมเมนต์จำนวนมากที่เขียนโดยคนคนหนึ่งซึ่งมีความเห็นแบบ All or nothing
55 ความคิดเห็น
แม้แต่คนที่คอยยกย่องและใช้งาน Rust มาตลอด พอเจอ
asyncเข้า ก็ถึงกับสติหลุดกันบ้าง แล้วยังมีเสียงบ่นออกมาด้วยว่า งั้นนี่คือไม่ควรสร้างไลบรารีด้วย Rust เลยหรือเปล่า (มันซับซ้อน จุกจิก และยากเกินไป)ยังมีคนที่พูดดูแคลนทั้งที่ไม่รู้ด้วยซ้ำว่า Mark Russinovich คือใคร... เขาเป็นผู้เขียนชุดเครื่องมือ sysinternals tool suite และหนังสือ Windows Internals... เป็นคนที่ทำเครื่องมือจากการรีเวิร์สเอนจิเนียริง Windows จนได้เป็น Microsoft Fellow...
บทความที่เสียดสีปัญหาของบรรดาแฟนพันธุ์แท้ Rust ด้วยวิดีโอสั้นๆ
https://twitter.com/cmuratori/status/1367627549816152064?lang=en
Rust ยังไม่มีแม้แต่สเปกอย่างเป็นทางการเลยด้วยซ้ำ ....
C++ มีสเปกอย่างเป็นทางการ "มีอยู่จริง" ก็จริง แต่ทุก implementation (gcc, clang, ...) ก็ยังไม่สมบูรณ์กันทั้งนั้น
นี่เป็นตรรกะที่พบได้บ่อยครับ แต่ในฐานะคนที่เคยอ่านสเปกมามากและเคยลงมือทำอิมพลีเมนเทชันหลายครั้ง ผมไม่ค่อยเข้าใจนักว่าการมีหรือไม่มีสเปกนั้นมีความหมายในตัวเองอย่างไร
"สเปก" มีได้หลายแนวทาง มีทั้งวิธีอธิบายโดยยึดพฤติกรรมที่มองเห็นภายนอกเป็นหลัก และวิธีอธิบายการทำงานภายใน อีกทั้งยังแบ่งได้ว่าใช้ภาษาธรรมชาติ หรือใช้วิธีที่เครื่องอ่านได้ เช่น pseudocode หรือคำนิยามทางคณิตศาสตร์ เอกสารอ้างอิงของภาษาอย่าง Python หรือ Rust ก็เป็นสเปกที่อธิบายพฤติกรรมภายนอกด้วยภาษาธรรมชาติ ส่วนแนวทางที่มักพบในมาตรฐาน ISO เป็นต้น คือสเปกที่อธิบายการทำงานภายในด้วยภาษาธรรมชาติ แต่ก็ไม่ได้รับประกันว่าการทำงานภายในนั้นจะสอดคล้องกับแนวทางของอิมพลีเมนเทชันจริงเสมอไป แทนที่จะเป็นเช่นนั้น มันจะนิยามในทำนองว่า หากอิมพลีเมนเทชันสมมุติที่สร้างจากการทำงานภายในนั้น และอิมพลีเมนเทชันจริง แสดงพฤติกรรมภายนอกเหมือนกันหรือ observationally equivalent ต่อกัน ก็ถือว่าสอดคล้องกับมาตรฐาน ECMAScript แม้จะเขียนอธิบายด้วยภาษาธรรมชาติ แต่โครงสร้างจริงก็แทบจะเป็น pseudocode ที่เขียนด้วยภาษาธรรมชาติ และก็มีกรณีอย่าง WebAssembly ที่ให้ทั้งสเปกภาษาธรรมชาติของการทำงานภายในและคำนิยามทางคณิตศาสตร์ควบคู่กันไป
ในมุมของการอิมพลีเมนต์ สเปกภาษาธรรมชาติก็ไม่ได้ต่างกันมากนัก เพราะสเปกภาษาธรรมชาติต้องถูกสร้างขึ้นแยกจากอิมพลีเมนเทชันจริง จึงเป็นธรรมดาที่บางครั้งทั้งสองอย่างจะค่อย ๆ ห่างกันออกไป และความผิดพลาดก็เกิดขึ้นได้บ่อยด้วย ว่าพฤติกรรมภายนอกจะอิมพลีเมนต์ง่ายกว่า หรือการทำงานภายในจะอิมพลีเมนต์ง่ายกว่า ก็ขึ้นอยู่กับสถานการณ์ และในมุมของภาษาโปรแกรมก็ไม่ได้มีเหตุผลจำเป็นชัดเจนว่าต้องเลือกอย่างใดอย่างหนึ่ง ในแง่นั้น Rust ก็มีสเปกอยู่แล้ว และสเปกนั้นก็ให้ข้อมูลเพียงพอจริงจนสามารถมีอิมพลีเมนเทชันทดแทนอื่น ๆ เกิดขึ้นได้
ถ้าคุณอยากตัดสินความสมบูรณ์ของมาตรฐานจากแค่ว่ามันได้เป็นมาตรฐาน ISO หรือไม่ ผมก็ขอแจ้งข่าวว่า ผมพบบั๊กประมาณ 100 จุดในมาตรฐาน ISO/IEC 18181-1 JPEG XL (และเพราะเรื่องนั้นเอง 2nd amendment จึงกำลังล่าช้าอยู่)...
บน Hacker News ก็มีคอมเมนต์เกิน 800 รายการแล้วเหมือนกัน.. ที่นี่ก็ดุเดือดเช่นกัน... https://news.ycombinator.com/item?id=32905885
ขอบคุณสำหรับความเหน็ดเหนื่อยครับ
อีกด้านหนึ่ง.. ผมเคยเห็นบทความที่บอกว่า เวลาพยายามตีความปฏิกิริยาของใครบางคนตอนที่สิ่งที่เขาชอบถูกโจมตี เราควรระวังอย่าโยนไปว่าเป็นเพราะนิสัยของคนนั้น ซึ่งผมคิดว่าเป็นคำพูดที่ดี เพราะเหตุผลก็คงเป็นเพราะในสถานการณ์จริง การมีใจแบบนั้นเป็นเรื่องยาก
มีคอมเมนต์ในทวีตอันหนึ่งที่น่าประทับใจนะ
People end up writing Rust code the "unsafe way". - ละไว้ - Rust was never meant to replace those.
ถึงตรงนี้ ขอลองแปะลิงก์สำหรับคนที่อยากรู้ว่า Mark Russinovich คือใคร
https://en.m.wikipedia.org/wiki/Mark_Russinovich
ขอพูดอีกอย่างนะ คนที่ใช้ C++ แล้วทำเออเรอร์อยู่เรื่อย ๆ สร้างบั๊กอยู่ตลอด พอถึงจุดหนึ่งก็จะบอกว่า เฮ้ อันนี้ใช้ไม่ไหวแล้ว ไปลอง Rust ที่กำลังดังช่วงนี้ดีกว่า.. เห็นว่าถ้าใช้แล้วไม่ต้องกังวลเรื่อง memory error นี่นา.. คนแบบนี้ก็เหมือนเดิมแหละ ถึงใช้ Rust ก็จะสร้างบั๊กคล้าย ๆ กันออกมาอีก ... แล้วก็จะไปคิดกันต่อว่า งั้นจะไปเรียนภาษาอะไรตัวถัดไปมาลองดี คนแบบนี้มีเยอะครับ พวกที่ยังย้อน dereference pointer ใน C++ ยังไม่เคยทำให้ถูกต้องด้วยซ้ำ แต่กลับอวย Rust กันใหญ่
คนประเภทนั้นน่ะ เวลาคอมไพล์แล้วเจอว่าเรื่อง ownership, reference, borrowing ที่ Rust ชูเป็นจุดแข็งมันขึ้น error และชวนปวดหัว ก็จะเมินมันทั้งหมดแล้วผสม
unsafeเข้าไป ใช้แบบมั่ว ๆ ให้เหมือนเป็น C++ อยู่ดียังไงก็ต้องตายอยู่แล้ว แล้วจะมีชีวิตไปทำไม?
ตรรกะแทบจะอยู่ในระดับเดียวกับประโยคนี้เลย
ให้ความรู้สึกเหมือนกำลังเห็นคำอ้างว่า ต่อให้คนที่จะก่อเรื่องก็ไม่คาดเข็มขัดนิรภัยและยังไม่สนใจสัญญาณไฟจราจรอยู่ดี ดังนั้นเข็มขัดนิรภัยกับสัญญาณไฟจราจรก็แทบไม่มีความหมายอะไร
จะอ้างได้ก็จริงว่าคนเก่งจะทำอะไรก็เก่ง และคนที่ไม่เก่งจะทำอะไรก็ไม่เก่ง แต่ถ้าใช้ตรรกะแบบนั้น การถกเถียงเรื่องประโยชน์ของเครื่องมือก็ย่อมตั้งต้นไม่ได้เลย
ปัญหาก็คือภาษานี้ใช้งานยากเกินไป แต่ก็เป็นคำพูดที่ถูกต้องนะ
ถ้ามี visual rust ออกมาเมื่อไรค่อยยอมรับ อืม... ฮ่าๆ
ดูเหมือนว่า C/C++ กำลังมุ่งหน้าไปอยู่ในสถานะเดียวกับภาษาละตินจริง ๆ นะครับ ถ้าเพื่อการศึกษาแล้วใคร ๆ ก็ควรเรียน แต่จะให้เชี่ยวชาญถึงขั้นแตกฉานนั้นแทบเป็นไปไม่ได้ และเพราะเป็นระบบเก่า เมื่อมองจากปัจจุบันก็มีหลายส่วนที่ไม่สมเหตุสมผลอยู่มาก...
น่าสนใจดีนะที่ใช้ภาษาที่ทุกอย่างเป็น
unsafeกันได้ แต่กลับบอกว่าใช้ภาษาที่สามารถใช้unsafeได้อย่างจำกัดนั้นไม่ได้เด็ดขาดผมมองว่านี่เป็นอาการชนิดหนึ่งของ Stockholm syndrome
จิตวิญญาณของ C
ส่วนตัวผมคิดว่าข้อ 1 ก็ดูผิดตั้งแต่แรกแล้วนะ ฮ่าๆ เพราะมนุษย์นั้นโดยธรรมชาติแล้วก็ error-prone อยู่แล้ว..
แม้แต่ C++ เอง ถ้าใช้ smart pointer กับ memory pool อย่างจริงจังก็พอแล้ว...
ผมมองว่าในความเป็นจริงแล้ว มีเรื่องที่ต้องไปจัดการ pointer โดยตรงน้อยกว่าที่คิดมาก
ผมคิดว่าโค้ดที่เป็น thread-safe สุดท้ายแล้วก็ขึ้นอยู่กับความสามารถของโปรแกรมเมอร์เอง
ไม่ว่าจะใช้ภาษาไหน ถ้าฝีมือยังไม่ดีพอ
ก็มักจะลงเอยเป็นโค้ดที่ปลอดภัยแต่ประสิทธิภาพต่ำ หรือไม่ก็โค้ดที่อันตรายอยู่ดี
มันน่ากลัวเกินไปที่จะฝากเรื่องแบบการขับรถหรือการบังคับเครื่องบินไว้กับความสามารถของโปรแกรมเมอร์....
โค้ดที่ thread-safe สุดท้ายแล้วก็ขึ้นอยู่กับความสามารถของโปรแกรมเมอร์เอง <- ผมมองว่าความคิดนี้อันตราย เพราะ memory / thread safety ไม่ได้อยู่แค่ระดับที่โปรแกรมล่มหรือช้าลงเท่านั้น แต่ยังลุกลามไปเป็นช่องโหว่ด้านความปลอดภัยได้ด้วย ดังนั้นผมจึงคิดว่าไม่ควรฝากเรื่องนี้ไว้กับความสามารถของคนคนเดียว
มีการวิจัยวิธีการต่าง ๆ มากมายเพื่อป้องกันสิ่งนี้ล่วงหน้า และเมื่อสิ่งเหล่านั้นพัฒนาจนสุกงอมก็ได้กลายมาเป็นภาษาอย่าง rust หรือเครื่องมืออื่น ๆ ดังนั้นการไม่ใช้สิ่งเหล่านี้แล้วโยนความผิดให้ตัวบุคคลจึงไม่เหมาะสม เพราะผมมองว่าซอฟต์แวร์ได้กลายเป็นสิ่งที่มีอิทธิพลต่อชีวิตประจำวันมากเกินไปแล้ว
มนุษย์ยังไงก็เป็นมนุษย์ จึงหลีกเลี่ยงความผิดพลาดไม่ได้ และไม่ว่าโปรแกรมเมอร์จะเก่งแค่ไหนก็ย่อมพลาดกันได้อยู่ดีครับ บั๊กด้านหน่วยความจำเองก็สุดท้ายแล้วเกิดจากความผิดพลาดเหมือนกัน...
ช่วงนี้เลยก็อดคิดไม่ได้ว่า แทนที่จะหวังให้คนทำได้ดีด้วยตัวเอง การสร้างสภาพแวดล้อมที่ทำให้พลาดได้ยากตั้งแต่แรก อาจเป็นแนวทางที่ดีกว่าก็ได้
ถ้าจะให้ใช้ Rust ในบริษัทของเรา ก็ต้องห้ามใช้
unsafeแบบเด็ดขาด ต้องมีกฎแบบนี้ถึงจะพอเชื่อถือความปลอดภัยที่ตัวภาษาสนับสนุนมาให้ได้บ้าง แต่แบบนี้มันจะสมเหตุสมผลจริงหรือ?แน่นอนว่าในบริษัทที่ใช้ Rust ก็คงมีข้อตกลงร่วมกันว่าไม่ควรใช้
unsafeหากไม่จำเป็นจริง ๆ แต่ผม/ฉันอยากแนะนำให้ลองเขียนด้วย Rust ด้วยตัวเองมากกว่าครับ/ค่ะ... ว่าจริง ๆ แล้วจะมีเรื่องที่ต้องใช้unsafeมากแค่ไหน ก็คงต้องลองใช้เองถึงจะรู้ไม่ใช่หรือ?ไลบรารีที่พอรู้จักกันอย่าง tokio ก็ถม
unsafeกันเต็มไปหมดเหมือนกันดูเหมือนจะมีคอมเมนต์ค่อนข้างมากที่มองแบบ all or nothing ว่าถ้าไม่ All ก็ไม่มีคุณค่าอะไรเลย
มันมีข้อดีตรงที่สามารถแยกและกักขอบเขต
unsafe/safeได้อย่างชัดเจน และทำให้คนที่เดิมทีอาจสร้างบั๊กด้านหน่วยความจำ 100 ครั้ง เหลือ 10 ครั้งได้ แต่สุดท้ายก็ยังมีunsafeอยู่ / และบั๊กด้านหน่วยความจำก็ยังเกิดขึ้นได้ => ดังนั้นจึงมองว่าไม่ได้ดีกว่า C++ เลย ผมก็ไม่แน่ใจว่าวิธีคิดแบบนี้เป็นการตัดสินที่สมจริงหรือเปล่า 😅ถ้าวัดจากจำนวนคอมเมนต์ก็เหมือนจะใช่ แต่ว่า.....
ดูเหมือนว่าสถานการณ์ที่ถูกต้องคือ... มีคอมเมนต์จำนวนมากที่เขียนโดยคนคนหนึ่งซึ่งมีความเห็นแบบ All or nothing
ผมก็เห็นด้วยกับคอมเมนต์นี้เหมือนกัน ยิ่งมองอะไรแบบแบ่งขั้วสุดโต่ง ก็ยิ่งมีแต่ตัวเองที่เสียประโยชน์
ในการทำงานจริงก็มักจะชั่งน้ำหนักข้อดีข้อเสีย แล้วสุดท้ายก็เลือกสิ่งที่ให้ผลบวกมากที่สุดอยู่แล้ว ถ้าไม่ใช่กรณีที่ด้วยลักษณะของอุตสาหกรรมจำเป็นต้องใช้ C/C++ ในตอนนี้จริง ๆ ผมคิดว่าประโยชน์ที่ได้จากการใช้ Rust นั้นมีมาก เลยทำให้ขอบเขตการใช้งานของ Rust ค่อย ๆ กว้างขึ้นเรื่อย ๆ
คนที่ย้ายไปใช้ Rust ก็ไม่ใช่ว่าจะโง่อะไร พอลองใช้ Rust แล้วก็คงเห็นว่ามันมีอะไรที่โดยรวมดีกว่า C++ เลยยังใช้กันต่อไปนั่นแหละ 555
ไม่มีอะไร... ทุกอย่าง
ตอนนี้คงมีไม่กี่คนแล้วที่จะไม่เห็นด้วยว่า Rust คือ Next C++ ถึงขั้นที่ลินุกซ์เคอร์เนลรับไปเป็นภาษาทางการแล้ว
แต่ก็ยังน่าสงสัยอยู่ว่า Rust เป็นภาษาที่ใช้งานสะดวกจริงหรือไม่... เพราะการวิเคราะห์แบบสแตติกที่ทำเพื่อป้องกันปัญหา memory safety ล่วงหน้าทำให้เวลา compile ค่อนข้างเจ็บปวด และด้วย semantics อย่าง ownership ที่เข้าใจยาก จึงต้องอาศัยการเรียนรู้มากกว่าภาษาทั่วไปอย่าง Python หรือ Java มากทีเดียว.
เวลาในการคอมไพล์น่าจะเป็นปัญหาใหญ่ของตัว LLVM เอง Facebook ก็กำลังทุ่มเทเพื่อปรับปรุง instruction selection ของ LLVM อยู่ ดังนั้นสถานการณ์คงจะดีขึ้นครับ
พอลองค้นดูแล้วก็เป็นแบบนั้นจริง ๆ นะครับ ผมนึกว่าเขาใช้เวลาไปกับการตรวจเช็กชนิดข้อมูลที่เกี่ยวกับ ownership เยอะมาก แต่ดูเหมือนว่า llvm backend จะเป็นส่วนใหญ่..
ตอนที่
rustออกมาใหม่ ๆ ผมสนใจมากและลองศึกษาอยู่พักหนึ่ง... แต่พอเห็นเรื่องunsafeก็เลิกทันทีเลย ผมหาเหตุผลที่สมเหตุสมผลมาชักจูงตัวเองไม่ได้จริง ๆ ว่าทำไมต้องเรียนแล้วเอามาใช้ เพราะยังไงโปรแกรมที่ซับซ้อนขึ้นมาหน่อยก็ต้องใช้unsafeอยู่ดี แล้วถ้าเป็นแบบนั้น ความปลอดภัยที่rustชอบเอามาอวดก็คงหายไป แบบนี้จะใช้มันไปทำไม?ใน Rust
unsafeจำเป็นก็ต่อเมื่อต้องเขียนโค้ดระดับล่างเท่านั้น สำหรับการเขียนแอปพลิเคชันทั่วไปแทบจะถือได้ว่าไม่มีโอกาสต้องใช้เลยและถึงแม้จะเกิดปัญหาด้านหน่วยความจำภายในบล็อก
unsafeก็ยังมีข้อดีตรงที่ตัวภาษารับประกันได้ว่าจุดที่เกิดปัญหาจะอยู่ภายในบล็อกunsafeทำให้ดีบักได้ง่ายขึ้นด้วยครับถ้ามี
unsafeแล้วจะถามว่า "จะใช้สิ่งนี้ไปทำไม?" ตั้งแต่แรกก็คงไม่ควรใช้ C/C++ อยู่แล้วไม่ใช่เหรอ?C++ ก็ยังพัฒนาอย่างต่อเนื่องอยู่ และถ้าจะใช้
unsafeก็สู้ใช้ C++ ไปเลยดีกว่า จึงไม่ค่อยรู้สึกถึงความจำเป็นที่จะต้องเรียน Rust แล้วนำมาใช้ไม่ใช่ว่าการเขียนโปรแกรมด้วย Rust ทุกอย่างจะต้องใช้
unsafeเสมอไปนะครับการจัดการหน่วยความจำอย่างละเอียดอ่อนถึงขั้นต้องใช้
unsafeโดยปกติมักแยกไปอยู่ฝั่งพัฒนาไลบรารีเสียมากกว่า ดังนั้นในฝั่งพัฒนาแอปพลิเคชันซึ่งน่าจะมีความต้องการมากที่สุด ผมมองว่าแทบจะไม่มีเรื่องให้ต้องใช้unsafeเลยC++ เองก็จริงที่ยังพัฒนาต่อเนื่องอยู่ แต่ภาระจาก legacy เพื่อรักษาความเข้ากันได้ย้อนหลังนั้นเจ็บปวดมากจริง ๆ ถ้าคุณไม่พอใจเพียงเพราะ
unsafeตัวเดียว ผมว่าคงไม่พอใจกับฟีเจอร์ทั้งหมดของ C++ เหมือนกันแหละครับ 555ดังนั้น
unsafeจึงไม่ใช่สิ่งที่แนะนำถ้าใช้
safeก็ปลอดภัยกว่า C/C++ ที่ทุกอย่างแทบไม่ต่างจากunsafeอยู่แล้วhttps://people.mpi-sws.org/~dreyer/papers/rustbelt/paper.pdf
ถ้าไม่มี
unsafeซึ่งเป็นกลไกที่กำกวมคลุมเครือ Rust ก็อาจจะกลายเป็นทางเลือกแท้จริงของ C++ ได้เหมือนกันผมก็คิดเหมือนกันนะว่าถ้า FFI เป็นมิตรกว่านี้อีกสักหน่อยก็คงดี.. ผมเคยพยายามส่งรับ composite struct กับไลบรารีภายนอกผ่าน FFI แล้วจำได้เลยว่าทรมานมาก
แม้แต่ rust to rust เองก็ยังไม่ง่ายเลย..
https://github.com/rodrimati1992/abi_stable_crates
เมื่อมองว่าเป็นส่วนต่อเนื่องของสถานการณ์ที่ MS สนับสนุน Rust อย่างจริงจัง ก็ถือว่าเป็นคำกล่าวที่ดูเป็นธรรมชาติมาก
แม้แต่ Torvalds ที่ดื้อดึงคนนั้นก็ยังรับ Rust มาใช้แล้ว ผมเลยไม่รู้สึกว่าจำเป็นต้องฝืนใช้ภาษาที่คนเรียนก็น้อยลงต่อไปอีก
บั๊กที่เกี่ยวกับหน่วยความจำไม่ได้หายไปอย่างแน่นอนเพียงแค่ใช้ Rust หรอก คนที่สร้างบั๊ก ต่อให้ยื่นภาษาอะไรให้ก็ยังผลิตบั๊กออกมาได้อยู่ดี ตอนนี้ก็ใช้ C++ ได้อย่างมีประสิทธิภาพดีโดยไม่มีปัญหาอะไร จะมาบอกให้เลิกอะไรกัน คำพูดแรงแบบนี้นี่แทบจะเป็นคำพูดโยนระเบิดตอนเกิดสงครามเลย พูดส่งเดชเกินไปแล้ว
จะบอกว่าใช้ C/C++ ได้อย่างมีประสิทธิภาพดีโดยไม่มีปัญหาอะไรเลยก็คงไม่ได้ เพราะในเชิงประวัติศาสตร์มีบั๊กที่เกี่ยวข้องกับหน่วยความจำจำนวนมากเกิดขึ้นจาก C/C++ มาแล้ว และตอนนี้ก็น่าจะยังเกิดอยู่ที่ไหนสักแห่ง (แม้จะทำให้นักวิจัยสาย PL/SE จำนวนมากมีงานทำก็เถอะ)
ตามที่ Microsoft ประกาศ บั๊กด้านความปลอดภัย 70% เป็นบั๊กที่เกี่ยวข้องกับหน่วยความจำ (https://zdnet.com/article/…)
ผลการสำรวจจากโครงการ Chromium ก็ออกมาคล้ายกัน (https://www.chromium.org/Home/chromium-security/memory-safety/) โดยเกือบ 70% ก็เป็นบั๊กที่เกี่ยวข้องกับหน่วยความจำเช่นกัน
บั๊กของเคอร์เนล Windows ส่วนใหญ่เป็นข้อผิดพลาดที่เกี่ยวกับหน่วยความจำ
และผมเคยเห็นบทความก่อนหน้านี้ที่บอกว่าสำหรับส่วนที่พัฒนาด้วย Rust ข้อผิดพลาดประเภทนี้ลดลงอย่างมาก..
ด้วยการออกแบบของภาษาตั้งแต่ต้นที่สนับสนุน
readonlyอย่างจริงจัง จึงคงปฏิเสธได้ยากว่าเป็นการออกแบบทางภาษาที่ปลอดภัยกว่า C++ อย่างไรก็ตาม เพราะเหตุนี้เองจึงมีแนวคิดเรื่อง ownership ที่ไม่เคยได้ยินได้ฟังมาก่อนโผล่เข้ามา ทำให้การเขียนโปรแกรมยากขึ้นและยังมีข้อได้เปรียบด้านประสิทธิภาพด้วย คือโค้ด Rust ที่ทำแบบพอๆ ไปยังรันได้เร็วกว่าโค้ด C++ ที่ออกแบบมาอย่างดีมากในเชิงสถิติ
ดูเหมือนจะพูดอะไรที่เสี่ยงโดนถล่มพอสมควรเลยนะครับ 555
ส่วนตัวผมมองว่า C++ เก่าเกินไปจนถูกข้อจำกัดจากความเข้ากันได้ย้อนหลังฉุดไว้ ทำให้พัฒนาไปในทางที่โมเดิร์นได้ช้า
แล้วพอพยายามใส่สิ่งที่โมเดิร์นเข้าไปพร้อมกับรักษาความเข้ากันได้ย้อนหลังอย่างเคร่งครัด วิธีทำงานเดียวกันก็เลยมีหลายแบบเกินไป จนผมคิดว่านี่กลับกลายเป็นอุปสรรคในการเริ่มต้นสำหรับมือใหม่มากกว่า
ตอนนี้ผมเองก็มองว่า Rust ดีกว่า C++ แล้ว ยุคที่ต้องตาแดงนั่งไล่หาบั๊กเกี่ยวกับการจัดการหน่วยความจำคงถึงเวลาจบเสียที
ใช่ครับ.. ถ้าเป็นโปรเจ็กต์พัฒนาที่เริ่มจากศูนย์ ก็ไม่มีเหตุผลอะไรเป็นพิเศษที่จะต้องเลือก c++ เลย..
เห็นด้วยสุดๆ
ถึงอยากใช้ Rust ก็ได้แค่ใช้เสริม ๆ แต่ในงานจริงยังไม่มีโอกาสได้ใช้เลยครับ
ก็เลยไม่ค่อยได้คุ้นมือ แถมถ้าวางมือไปแป๊บหนึ่งก็ลืมอีก...
ชัดเจนว่าเป็นของที่อยากใช้เพราะชอบจริง ๆ ... ฮ่า
พวกที่ไม่เคยเขียน memory pool สักครั้งเพื่อเพิ่มประสิทธิภาพการใช้งาน heap ยังมาพร่ำเรื่อง RUST กันใหญ่เลย 555
แน่นอนว่า Azure CTO ไม่ได้เป็นความเห็นที่มีน้ำหนักถึงขั้นเป็นตัวแทนมาตรฐานของทั้งอุตสาหกรรม และต่อให้จำกัดแค่ใน Microsoft เอง ก็ไม่ใช่ความเห็นที่เป็นตัวแทนจุดยืนของบริษัทอย่างเด็ดขาด เป็นแค่การที่จู่ ๆ นึกอะไรขึ้นมาได้แล้วพร่ำบ่นความเห็นส่วนตัวของตัวเองเท่านั้นแหละ... พวกที่ทำ C++ ไม่เป็นให้ถูกต้อง จะทำ Rust ได้ดีจริงเหรอ? สรุปแล้วก็มีแต่พวกดีแต่พูดเต็มไปหมด
จากสำนวนพูดของคุณก็เผยให้เห็นความหยาบคายได้อย่างชัดเจนเลยนะครับ สู้ ๆ ครับ