5 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • สารคดีประวัติศาสตร์ C++ ตลอด 40 ปีที่สรุปตั้งแต่จุดเริ่มต้นที่ Bell Labs การยอมรับไปทั่วโลก ไปจนถึงการเติบโตในปัจจุบัน โดยมีผู้ที่มีส่วนร่วมกับประวัติศาสตร์ของ C++ การทำมาตรฐาน และระบบนิเวศของเครื่องมือมาร่วมปรากฏตัว
  • C++ เริ่มต้นจาก C with Classes ที่ Bjarne Stroustrup สร้างขึ้นที่ Bell Labs โดยผสานความสามารถในการควบคุมฮาร์ดแวร์ของ C เข้ากับการนามธรรมเชิงวัตถุของ Simula ก่อนจะเติบโตเป็นภาษาสำหรับการนามธรรมที่มีประสิทธิภาพสำหรับระบบขนาดใหญ่
  • การใช้งานระยะแรกอย่าง CFront แปลง C++ เป็นโค้ด C ทำให้ยังใช้โครงสร้างพื้นฐานและไลบรารี C เดิมได้เหมือนเดิม และหลังปี 1983 เมื่อจำนวนผู้ใช้เพิ่มขึ้น ความเข้ากันได้จึงกลายเป็นโจทย์หลัก
  • การทำมาตรฐาน ANSI/ISO ที่เริ่มจากแรงกดดันของ IBM, HP และ Sun ช่วยป้องกันการแตกแยกของการติดตั้งใช้งานโดยผู้ขายแต่ละราย และมาตรฐานปี 1997 ก็รวม namespace, exception, template และ STL
  • ช่วงต้นยุค 2000 เกิด ฤดูหนาวของ C++ จาก Java และ C#, การล่มสลายของดอทคอม และการเพิ่มขึ้นอย่างรวดเร็วของประสิทธิภาพ CPU แต่ราวปี 2004 เมื่อการสเกลความถี่หยุดลงและความขนานกลายเป็นเรื่องสำคัญ C++11 ก็สร้างยุคฟื้นฟูขึ้นมา
  • ปัจจุบัน C++ ถูกใช้งานใน CERN, เกม, การเงิน, AI และ HPC บน CUDA, ระบบฝังตัว และอีกมากมาย โดย ความปลอดภัยของหน่วยความจำ, ความซับซ้อน, ขนาดของคณะกรรมการมาตรฐาน และการขาดแคลนงบประมาณ ยังคงเป็นความท้าทายหลัก

C with Classes ที่เริ่มต้นจาก Bell Labs

  • C++ เป็นภาษาที่มีอายุมากกว่า 40 ปี และในช่วงที่ถูกสร้างขึ้นใหม่ๆ ยังไม่มีเครื่องมืออย่าง editor, syntax highlighting, code navigation, autocomplete หรือ refactoring และนักพัฒนาจำนวนมากยังใช้ BASIC หรือ assembly ที่แตกต่างกันไปตามชิปแต่ละตัว
  • ในช่วงเวลาที่เริ่มต้องการโปรแกรมที่ใหญ่และซับซ้อนขึ้น Bjarne Stroustrup พยายามสร้างระบบกระจายที่ Bell Labs และการจัดการองค์ประกอบอย่าง device driver, network interface, memory manager และ process ทำให้จำเป็นต้องใช้ภาษาระดับต่ำ
  • C สามารถควบคุมฮาร์ดแวร์ได้เต็มที่และเหมาะกับ system programming แต่เมื่อโปรแกรมใหญ่ขึ้นก็ยังไม่เพียงพอสำหรับการแสดงโครงสร้างอย่าง module, communication channel และ protocol
  • Stroustrup ชื่นชอบ type safety ที่เข้มงวด, user-defined type, class และ class hierarchy ของ Simula ที่เขาเคยใช้ที่ Cambridge แต่ก็มองว่า Simula ช้าเกินไปและใช้หน่วยความจำมากเกินไป
  • ดังนั้นเขาจึงสร้าง C with Classes ด้วยแนวทางนำความสามารถพื้นฐานของ Simula มาใส่ใน C และตลอดเกือบ 40 ปีหลังจากนั้น C++ ก็พัฒนาไปในทิศทางที่ทำให้มันทำได้ทั้งสิ่งที่ Simula และ C ทำได้

CFront, ชื่อ และการแพร่กระจายในยุคแรก

  • C with Classes ในตอนแรกถูกสร้างขึ้นในรูปแบบ C preprocessor และเมื่อคนอื่นเริ่มนำไปใช้ Stroustrup ก็เห็นว่าความแตกต่างจาก C ยังไม่มากพอ จึงทุ่มเวลา 1 ปีเพื่อพัฒนาคอมไพเลอร์และตัวภาษา
  • CFront ไม่ได้สร้าง machine code ด้วย backend แบบดั้งเดิม แต่คอมไพล์ไปเป็นโค้ด C ทำให้ผู้ใช้ C++ สามารถคงสภาพแวดล้อม C เดิมไว้ได้ โดยไม่ต้องนำโครงสร้างพื้นฐานหรือไลบรารีชุดใหม่มาใช้ทั้งหมด
  • CFront ถูกสร้างขึ้นในปี 1983 และเป็นคอมไพเลอร์จริงที่ทำ lexical analysis, parsing, type checking, การสร้าง tree representation และ tree optimization
  • ชื่อ C++ มาจากการที่ตัวดำเนินการ ++ ของ C หมายถึงการเพิ่มค่า และในเชิงความหมายจริงๆ ++C อาจจะตรงกว่า แต่เพื่อความสะดวกในการจัดทำดัชนีและการอ้างอิง จึงกลายเป็น C++
  • AT&T พยายามขายคอมไพเลอร์ C++ ระหว่างที่เข้าสู่ธุรกิจคอมพิวเตอร์และซอฟต์แวร์ แต่ฮาร์ดแวร์ขายได้ไม่มากพอ และการติดตั้งใช้งาน C++ ยุคแรกก็แทบถูกเผยแพร่ออกไปอย่างกว้างขวางได้จริงด้วยต้นทุนเทปและค่าลิขสิทธิ์เชิงพาณิชย์ที่ต่ำ
  • ช่วงหนึ่ง Stroustrup รับผิดชอบทั้งเอกสาร คอมไพเลอร์ การติดตั้งใช้งานภาษา และ help desk ด้วยตัวเอง ขณะที่การลงทุนจาก AT&T มีน้อยมาก ถึงขั้นเคยจัดสรรงบเพียง 5,000 ดอลลาร์ตลอด 3 ปีเพื่อเผยแพร่ภาษาโปรแกรมอเนกประสงค์นี้
  • ใน CFront 2.0 มีการพบบั๊กในการจัดการ multiple inheritance และเนื่องจากฟีเจอร์หลักที่สัญญาไว้แล้วอาจเสียหายในลักษณะที่แก้ทีหลังในภาคสนามไม่ได้ จึงมีการเร่งทำรุ่นแก้ไขและเผยแพร่ภายในไม่กี่วัน
  • เพราะต้องคงหมายเลขรีลีสเดิมไว้ เวอร์ชันจึงถูกแจกในชื่อ 2.0.0 แทน 2.0.1 และความเข้ากันได้ก็กลายเป็นความต้องการที่ครอบงำถึงขั้นถูกล้อว่าเป็น “C word”

การทำมาตรฐานและ STL

  • C++ เป็นเครื่องมือที่ช่วยเพิ่มประสิทธิภาพการทำงานภายใน AT&T แต่ภาษาไม่สามารถประสบความสำเร็จได้หากถูกจำกัดอยู่ในบริษัทเดียว และจำเป็นต้องมีนักพัฒนาภายนอกกับระบบนิเวศของไลบรารี
  • ก่อนยุคเว็บ กลุ่มอย่าง comp.lang.c++ บน Usenet และนิตยสารคอมพิวเตอร์อย่าง Byte คือช่องทางหลักในการเผยแพร่ข้อมูล และ Stroustrup ก็เดินสายบรรยายตามบริษัทและองค์กรต่างๆ ในช่วงปลายทศวรรษ 1980 เพื่อเผยแพร่ภาษา
  • การใช้งานเพิ่มขึ้นแม้ไม่มีแคมเปญโฆษณาหรือผู้สนับสนุนรายใหญ่ แต่เมื่อผู้ขายหลายรายอย่าง Borland, Microsoft, IBM และ Sun ต่างสร้างการติดตั้งใช้งาน C++ และการออกแบบ template ของตนเอง ความเข้ากันได้ของโค้ดก็แตกแยกอย่างรุนแรง
  • ตัวแทนจาก IBM, HP และ Sun ขอให้ Stroustrup ทำมาตรฐาน C++ ภายใต้กฎของ ANSI ซึ่งเขามองว่าเร็วเกินไป แต่สุดท้ายก็ยอมเริ่มจัดทำเอกสารพื้นฐานสำหรับการทำมาตรฐานในอีก 1 ปีต่อมา
  • Annotated Reference Manual หรือ ARM กลายเป็นเอกสารอินพุตสำหรับการทำมาตรฐาน และต่อยอดไปสู่การรวมฟีเจอร์อย่าง template, exception และ namespace
  • มาตรฐานถูกนิยามให้เป็นสัญญาระหว่างผู้เขียนโค้ด C++ กับการติดตั้งใช้งาน C++ และเป็นกลไกที่ทำให้ผู้ขายหลายรายตีความโค้ดเดียวกันด้วยความหมายเดียวกัน
  • STL ที่ Alexander Stepanov สร้างขึ้นมีแนวคิดหลักคือทำให้อัลกอริทึมทำงานได้กับทุกโครงสร้างข้อมูลที่รองรับ และทำให้โครงสร้างข้อมูลต่างๆ สามารถส่งต่อข้อมูลถึงกันได้
  • ก่อนมี STL แต่ละคนต่างมีวิธีของตัวเองสำหรับ array, list, tree, container และอัลกอริทึม แต่ STL เสนอวิธีที่ทรงพลังเพียงหนึ่งเดียวในการนิยามทั้งอัลกอริทึมและคอนเทนเนอร์
  • ข้อเสนอ STL ถูกคัดค้านว่าใหญ่เกินไปและมาช้าเกินไปสำหรับตารางเวลาการทำมาตรฐาน และแม้แต่บริษัทใหญ่ๆ อย่าง Microsoft ก็ไม่เห็นด้วย แต่หลังการนำเสนอและอภิปราย คณะกรรมการราว 80% ก็ลงคะแนนสนับสนุนจนถูกบรรจุในมาตรฐาน
  • C++ ถูกทำให้เป็นมาตรฐานในเดือนพฤศจิกายน 1997 และเพิ่ม namespace, exception, template และ Standard Template Library เป็นฟีเจอร์พื้นฐานสำคัญ
  • LLVM เริ่มต้นหลังการทำมาตรฐานนี้ จึงไม่มีภาระจากการย้ายโค้ดเก่า และสามารถใช้ฟีเจอร์ใหม่ได้ในรูปแบบที่ตั้งใจไว้แต่แรก

ฤดูหนาวและยุคฟื้นฟูของ C++11

  • ในทศวรรษ 1990 C++ กลายเป็นภาษาที่เปลี่ยนโลกการพัฒนาซอฟต์แวร์และการคำนวณด้านฟิสิกส์พลังงานสูงใน CERN จากที่เคยยึด Fortran เป็นหลัก โดยมีการพอร์ตไลบรารีและโค้ดเดิมมาเป็น C++ หรือสร้างใหม่ให้เหมาะกับ C++
  • ในการพัฒนาเกม เมื่อวิดีโอการ์ดและ API รับหน้าที่งานระดับต่ำ ก็เกิดการขยับจาก C และ assembly ขึ้นมาใช้ C++ และ C++ ก็ถูกใช้งานในระบบนิเวศของเอนจินอย่าง Unreal
  • ในการเงิน เมื่อ program trading และ high-frequency trading เกิดขึ้น เวลาแฝงระดับไมโครวินาทีก็กลายเป็นเรื่องสำคัญ และ C++ ถูกใช้เป็นภาษาที่ให้เวลาแฝงต่ำได้โดยไม่ต้อง micro-optimize ทุกบรรทัด
  • พร้อมกับการล่มสลายของดอทคอมในปี 2000 Java ก็ผงาดขึ้นภายใต้การตลาดอย่างหนักของ Sun ในฐานะ “ภาษาของอนาคต” และ “ภาษาของอินเทอร์เน็ต” โดย Java เองก็เกิดขึ้นเพื่อเป็นปฏิกิริยาต่อความซับซ้อนของ C++ อย่างชัดเจน
  • ภายใน Microsoft มีความต้องการจะผสานการพัฒนาแบบ form-based ที่ทำได้ง่ายของ Visual Basic เข้ากับประสิทธิภาพและพลังในการแสดงออกของ C++ และผลลัพธ์ก็คือการกำเนิดของ C#
  • ช่วงปี 2000~2005 ไม่ใช่แค่ความนิ่ง แต่เป็นช่วงถดถอยของ C++ และเพราะเป็นยุคที่ความถี่ CPU ยังเพิ่มขึ้นต่อเนื่อง นักออกแบบภาษาและนักพัฒนาจำนวนมากจึงให้ความสำคัญกับประสิทธิภาพน้อยลง
  • ราวปี 2004 การสเกลความถี่ของโปรเซสเซอร์สิ้นสุดลง และเมื่อถึงขีดจำกัดด้านประสิทธิภาพและพลังงานของ single core รวมถึงผลตอบแทนที่ลดลงของ instruction-level parallelism ยุคที่ฮาร์ดแวร์ช่วยทำให้โปรแกรมเร็วขึ้นโดยอัตโนมัติก็จบลง
  • แม้ multi-core และความขนานจะสำคัญขึ้น แต่มาตรฐาน C++ ในตอนนั้นกลับไม่มี threading อยู่เลย และอีเมลของ Herb Sutter เรื่อง “C++ multi-threading: is the standardization committee listening” ก็ทำให้ปัญหานี้เด่นชัดขึ้น
  • C++0X เริ่มในปี 2002 และตั้งเป้าจะเสร็จช่วง 2007~2009 แต่ก็ล่าช้าออกไปเรื่อยๆ เพราะต้องการใส่ฟีเจอร์สำคัญเพิ่ม จนสุดท้ายใช้เวลาถึง 13 ปี
  • C++11 นำ move semantics, concurrency, auto, range-based for loop, smart pointer, lambda และ constexpr เข้ามา และกลายเป็นมาตรฐานแรกในตระกูลภาษา C ที่จัดการ threading อย่างเป็นทางการ
  • C++11 กลายเป็นยุคฟื้นฟู เพราะความต้องการฟีเจอร์ภาษาที่ใช้ง่ายและปลอดภัยขึ้นมาบรรจบกับความจำเป็นในการดึงประสิทธิภาพฮาร์ดแวร์ออกมาใช้ให้มากที่สุด
  • หลังจากนั้นมีการนำ train model สำหรับการออกมาตรฐานตามกำหนดเวลามาใช้ และคณะกรรมการเลือกจังหวะ 3 ปีแทน 2 ปี
  • C++14 เป็นรีลีสขนาดเล็กที่รวมสิ่งที่ใส่ไม่ทันใน C++11 และการแก้บั๊ก ส่วน C++17 และ C++23 ก็เพิ่มฟีเจอร์ของภาษาและไลบรารีมาตรฐานเข้ามาอีกมาก

ขนาดในปัจจุบันและความท้าทาย

  • C++ มีความซับซ้อนเพิ่มขึ้นอย่างต่อเนื่อง และถูกวิจารณ์ทั้งเรื่องวิธีการกำหนดค่าเริ่มต้นตัวแปรที่มีหลายแบบ และคำประเมินเชิงลบว่าเป็น “ความซับซ้อนที่เข้าใจได้ยาก”
  • คณะกรรมการมาตรฐานเองก็ขยายใหญ่ขึ้นเป็น 527 คน และมีความกังวลว่าทุกวันนี้มีจำนวนคณะอนุกรรมการและประธานมากพอๆ กับจำนวนสมาชิกทั้งหมดในช่วงเริ่มต้น
  • ในการออกแบบภาษา การเพิ่มสิ่งใหม่ทำได้ แต่การเอาออกแทบเป็นไปไม่ได้ ดังนั้นปัญหาสำคัญจึงไม่ใช่ว่าจะใส่อะไร แต่คือควรปฏิเสธเมื่อไร
  • C++ ถูกใช้ในโรงไฟฟ้า กังหันลม หม้อหุงข้าว ลานโบว์ลิ่ง ภาพยนตร์ฮอลลีวูด รถยนต์ การเงิน กล้อง และอีกมากมาย จนมีคำกล่าวว่าอยู่ “แทบทุกที่”
  • โค้ดเบส C++ ของ HRT มีมากกว่า 1 ล้านบรรทัด ครอบคลุม 15,000 ไฟล์ และในปี 2025 เพียงปีเดียว นักพัฒนาราว 800 คนได้สร้างคอมมิต 84,000 รายการ
  • ในวงการเกม Unity ใช้ C# ขณะที่ Unreal ใช้ C++ และเกมที่ต้องการเฟรมเรตสูงกับกราฟิกที่รวดเร็วอย่าง Call of Duty ก็ใช้ C++ เพราะเรื่องความเร็ว
  • C++ ยังสำคัญต่อ Nvidia และการประมวลผลแบบเร่งความเร็วด้วย แม้บนผิวหน้าจะใช้ Python แต่ภาระการคำนวณจริงกลับอยู่ที่ไลบรารี CUDA ที่ได้รับการปรับแต่งอย่างหนัก
  • มีการยกให้ Rust และ C++ เป็นภาษาที่เติบโตเร็ว และมีตัวเลขว่าจำนวนนักพัฒนา C++ เพิ่มจาก 9.4 ล้านคนในปี 2022 เป็น 16.3 ล้านคนในปี 2025
  • ความต้องการภาษาที่ให้ประสิทธิภาพต่อพลังงานที่ดีจะยังคงมีต่อไป ทำให้ C++ ยังมีพื้นที่ใช้งานที่โดดเด่นและทดแทนได้ยาก
  • ขณะเดียวกันก็มีความกังวลว่าเมื่อผู้เล่นรายใหญ่ย้ายความสนใจไปที่ AI งบประมาณสำหรับ C++ อาจลดลง
  • ในช่วงการระบาดใหญ่ มีความเคลื่อนไหวจากรัฐบาลและหน่วยงานกำกับดูแลที่ต้องการลดการพึ่งพา C++ ซึ่งโดยพื้นฐานแล้วไม่ได้ให้ memory safety และ memory safety ก็ถูกชี้ว่าเป็นปัญหาสำคัญที่สุดที่ต้องแก้
  • ใน C++26 ตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นจะไม่ถือเป็น undefined behavior อีกต่อไปเพื่อเสริมความแข็งแรงของซอฟต์แวร์ และไลบรารีมาตรฐานของ C++26 จะมีตัวเลือก bounds safety สำหรับชนิดข้อมูลที่ใช้บ่อยอย่าง string, span และ vector
  • static reflection ใน C++26 คือความสามารถที่ทำให้โค้ดของโปรแกรมสามารถมองเห็นโค้ดของโปรแกรมเองได้ และถูกประเมินว่าเป็นฟีเจอร์เดี่ยวที่ทรงอิทธิพลที่สุดในบรรดาสิ่งที่ถูกทำให้เป็นมาตรฐาน
  • แม้ AI อาจส่งผลอย่างมากต่อความปลอดภัยของภาษาและวิธีการใช้ภาษาโปรแกรม แต่บทสรุปก็คือเรายังไม่อาจรู้ได้ว่าต่อจากนี้จะเกิดอะไรขึ้น

1 ความคิดเห็น

 
GN⁺ 4 시간 전
ความเห็นจาก Hacker News
  • คำวิจารณ์ของ Ken Thompson ที่ว่า C++ เป็น กองแนวคิดที่ไม่สอดคล้องกันและซับซ้อน ยังติดอยู่ในใจผมมาจนถึงตอนนี้ ครั้งสุดท้ายที่ใช้มันในงานคือ C++98 ส่วน 11/17/20 ก็แค่ลองจับๆ ดูเพราะความอยากรู้อยากเห็น
    ถ้า c++/cfront ไม่ได้อาศัยอานิสงส์จาก C ผมก็สงสัยว่ามันจะถูกใช้อย่างแพร่หลายไหม และมองว่านั่นคือทั้งอัตลักษณ์และข้อจำกัดที่ C++ ไม่เคยพยายามเปลี่ยนจริงๆ การต้องใช้เวลาใกล้เคียงกันไปกับการชำระล้าง implementation ด้วยเครื่องมืออย่าง Coverity/Valgrind สำหรับเรื่องที่คอมไพเลอร์น่าจะจัดการได้ เป็นอะไรที่น่าหงุดหงิดมาก
    ในยุค C++98 ยังพอเข้าใจได้ค่อนข้างดีว่าเกิดอะไรขึ้นจากหนังสือโครงสร้างภายในของ Bjarne แต่หลังจากนั้น หนังสือแนว “effective, more effective, proficient, performant C++” กลับงอกเป็นดอกเห็ดจนแทบกลายเป็นอุตสาหกรรม และก่อนที่ LLM จะมาถึง ผมก็เลิกหวังไปแล้วว่าจะเข้าใจโค้ดเก่าที่คนอื่นเขียนได้ สู้เอาเวลาไปเรียนรู้โดเมนของปัญหายังน่าพอใจกว่า
    ถึงอย่างนั้นก็ยังคิดว่าจะดูสารคดีนี้ เพราะมีคนที่ผมชอบอย่าง Kernighan กับ Stepanov ออกมาด้วย

    • เรื่องที่คนไม่ค่อยรู้คือ ตอนที่กำลังคิดว่าจะขยาย Zortech C ไปเป็น C++ ดีไหม ผมกังวลเรื่อง ทรัพย์สินทางปัญญา ของ AT&T เลยติดต่อ Ryan Williams ทนาย IP ของ AT&T
      ผมถามว่าถ้าจะทำคอมไพเลอร์ C++ ต้องมีไลเซนส์ไหม และควรเรียกมันว่าอย่างอื่นแทน C++ หรือเปล่า เขาหัวเราะแล้วบอกว่าทำตามสบายได้เลย และยังขอบคุณด้วยเพราะผมเป็นคนทำคอมไพเลอร์คนเดียวที่มาถามอนุญาต หลายปีก่อนผมเห็นข่าวมรณกรรมของเขา เขาเป็นคนดีคนหนึ่ง
    • จุดตั้งต้นความสำเร็จของ C++ คือ Zortech C++ ตอนนั้นการเขียนโปรแกรม 90% เกิดขึ้นบน MS-DOS และ cfront แทบใช้งานบน DOS ไม่ได้เลย
      คอมไพล์ช้าจนน่าทรมาน และยังไม่รองรับ near/far pointer ที่จำเป็นสำหรับแอปที่ไม่เล็กน้อย Zortech C++ แก้ปัญหาเหล่านั้นได้ และขายดีเป็นเทน้ำเทท่าจนสร้างมวลวิกฤตที่ C++ ต้องมีเพื่อจะประสบความสำเร็จ
      ทราฟฟิกใน comp.lang.c++ พุ่งขึ้นอย่างรวดเร็ว และ Borland ก็เห็นยอดขายของเราแล้วเลิกทำผลิตภัณฑ์ภาษาเชิงวัตถุของตัวเอง ก่อนจะหันมาสร้าง Turbo C++ ส่วน Microsoft ก็เห็นความสำเร็จของ Borland แล้วจึงทำ C++ ของตัวเอง
      เราขายคอมไพเลอร์ Zortech C++ ให้ Microsoft ไปเยอะมาก และพวกเขาก็ใช้มันพัฒนา COM ผมยังได้ยินข่าวลือว่า Microsoft กำลังสร้างภาษาเชิงวัตถุบน C ของตัวเองชื่อ C* แต่ไม่เคยยืนยันได้
    • สิ่งที่หลายคนมองข้ามคือ มีความเป็นไปได้สูงที่ C ยังอยู่รอดเพราะ C++ มีอยู่ ถ้าไม่มี C++ ก็คงมีแรงกดดันมหาศาลให้ใส่ฟีเจอร์เพิ่มเข้าไปใน C เอง
      เหตุผลหนึ่งที่คณะกรรมการ C สามารถยืนหยัดไม่เพิ่มหลายอย่างเข้าไปได้นาน ก็เพราะชี้ไปที่ C++ แล้วบอกว่า “นั่นเป็นเรื่องของฝั่งนั้น ไม่ใช่ของเรา” ถ้าไม่มี C++ ก็ไม่รู้ว่า C จะกลายเป็นภาษาที่มีคลาส เทมเพลต และแลมบ์ดาไปแล้วหรือเปล่า
    • C++98 ก็ต่างจาก C++11 มากพอสมควร หนังสือ C++11 ของ Bjarne ให้ความรู้สึกต่างจากฉบับ 98 ไปอย่างสิ้นเชิง
    • ผมเคารพ Ken Thompson และผู้คนยุค UNIX รุ่นเก่ามาก แต่คิดว่าพวกเขาเองก็คงยอมรับได้ว่าโลกความจริงมันสกปรก และคำตอบที่ดีที่สุดแบบโดดเดี่ยวก็ไม่ได้ชนะเสมอไป
      ทั้ง C และ UNIX ที่พวกเขาสร้างก็เอาชนะระบบ LISP และ Smalltalk ที่ก้าวหน้ากว่าได้ เพราะ implement ได้ง่ายกว่า แม้แต่ระบบปฏิบัติการบนฐาน Plan 9 ที่ก้าวหน้ากว่าของพวกเขาเอง ก็ยังโค่นระบบตระกูลยูนิกซ์ที่แพร่หลายกว่าไม่ได้
      สุดท้ายแล้ว พลังในการกระจาย และความเป็น “ดีพอ” ดูจะชนะเสมอ ภาษาแบบไดนามิกอย่าง Perl, Python, Ruby, JavaScript, PHP รวมถึง Java ที่ถูกทำการตลาดอย่างหนัก ต่างก็มีฟีเจอร์ระดับสูงที่ดีพอ จนคนไม่จำเป็นต้องไปใช้ Lisp หรือ Smalltalk
      ถ้ามองจากมุมนี้ C++ อาจเป็นกลไกที่เอาฟีเจอร์ระดับสูงไปวางบนภาษาประสิทธิภาพสูงระดับล่างที่มีการใช้งานแพร่หลาย ทำให้มันกลายเป็นเทคโนโลยีที่ดีพอสำหรับการยอมรับในวงกว้าง
  • ช่วงนี้ผมทำงานกับ C++ เยอะมาก เลยตัดสินใจเปิดวิดีโอดูระหว่างรอ build เสร็จ ความยาวมันพอดีเป๊ะ และโชคดีที่ตัววิดีโอก็ดีมากด้วย

    • ผมพยายามอ่านทุกอย่างเท่าที่หาได้เกี่ยวกับประวัติของ C++ และก็คาดหวังกับวิดีโอนี้มาก รู้สึกว่ากระบวนการที่ C++ วิวัฒนาการมาเรื่อยๆ น่าสนใจจริงๆ
    • สงสัยว่านี่เป็นแค่มุกหรือว่า build ใช้เวลาประมาณชั่วโมงจริงๆ ถ้าอย่างนั้นก็บ้าบอเกินไปจริงๆ
  • สำหรับผม C++ เป็น ภาษาที่สง่างามที่สุด ในบรรดาภาษาที่ใช้มาราว 15 ปี ถ้าคุณเป็นคนประเภท “ชอบจัดระบบ” และอยากมีแบบจำลองทางความคิดที่แม่นยำสุดๆ ต่อสิ่งที่ตัวเองเขียนลงไปจนถึงบิตสุดท้าย ก็แทบไม่มีอะไรเทียบ C++ ได้
    ผมยอมรับว่ามันมีข้อจำกัดและความไม่แน่นอนที่มาจากคอมไพเลอร์และเรื่องอื่นๆ แต่ถึงอย่างนั้นก็ยังคิดแบบนั้น

    • พอจะยกตัวอย่างได้ไหมว่าหมายถึงแบบจำลองทางความคิดที่แม่นยำต่ออะไร
    • ผมคิดว่าคำพูดแบบเดียวกันนี้ใช้กับ Rust ได้เหมือนกัน
    • ภาษาที่สง่างามคือภาษาที่ทำสิ่งต่างๆ ได้มากด้วยองค์ประกอบที่น้อยมาก Forth กับ Scheme คือภาษาที่สง่างาม
      คุณมีเสรีภาพเต็มที่ที่จะชอบทำงานด้วย C++ และก็จริงที่ทำอะไรได้เยอะมากด้วยมัน แต่คงไม่ค่อยมีใครเถียงนักว่ามันทำสิ่งเหล่านั้นได้ด้วย “ของที่น้อยมาก”
  • ดีใจที่สารคดีนี้มี Andrei Alexandrescu อยู่ด้วย หนังสือ Modern C++ Design ของเขาตอนที่ผมอ่านครั้งแรกเปิดโลกความคิดผมมาก และคิดว่าตอนนี้ก็น่าจะยังเป็นแบบนั้นอยู่ มีใครเคยอ่านไหม?

    • งานบรรยายของเขาเป็นบางส่วนในบรรดางานบรรยายที่ผมชอบที่สุด เขาเป็นวิทยากรที่ยอดเยี่ยม น่าติดตาม และมีอารมณ์ขันดีมาก แถมใช้มันได้อย่างมีประสิทธิภาพ
    • มันยังสนุกอยู่ แต่หนังสือของ Andrei ก็เป็น หมัดสุดท้าย ที่ทำให้ผมค่อยๆ ถอยห่างจาก C++ ไปหลายปี มันเป็นหนังสือที่ดีมาก และในขณะเดียวกันก็ทำให้ผมยิ่งแน่ใจว่าอยากย้ายไปภาษาอื่น ตอนนั้นคือ Go
    • เห็นด้วย Modern C++ Design น่าจะเป็นหนังสือโปรแกรมมิงที่ผมได้ประโยชน์มากที่สุดในอาชีพ
    • ผมก็รู้สึกเหมือนกัน เคยเจอ Andrei ครั้งหนึ่งที่ Meetup ในมิวนิก แล้วบอกเขาไปว่าเขาสอนให้ผมรู้จักวิธีคิด ซึ่งทำให้บทสนทนาดูเก้ๆ กังๆ ไปนิดหน่อย แต่ก็ยังเป็นช่วงเวลาที่ดี
    • เพิ่งอ่านไปเมื่อไม่นานนี้ บางบทดีมาก โดยเฉพาะเรื่อง policy class ที่น่าสนใจว่ามันช่วยแก้ปัญหาบางอย่างของการออกแบบเชิงวัตถุได้อย่างไร
      แนะนำให้เอาแต่ละบทไปสรุปกับ AI chatbot แล้วถามว่าของที่สมัยใหม่เทียบกันได้คืออะไร บางสำนวนการใช้งานก็ถูกปรับปรุงไปแล้ว และดูเหมือนว่ามีอยู่ทั้งหนึ่งส่วนที่ถูกแทนที่ด้วยการใช้ std::variant และ std::visit
  • C++ ควรหายไปได้แล้ว เข้าใจว่ามีคนลงทุนไปเยอะและมีโค้ดมหาศาลที่เขียนด้วย C++ เมื่อก่อนผมก็เป็นแฟนและตอนนี้ก็ยังเป็นภาษาหลักในการทำงานอยู่ แต่ในปี 2026 ที่ LLM จะหาช่องโหว่ได้หมดและจำนวนผู้โจมตีก็เพิ่มขึ้น เราต้องการภาษาที่มี ความปลอดภัยเป็นค่าเริ่มต้น
    C++ เป็นภาษาที่ถ้าจะให้ปลอดภัยต้องเปิดใช้แบบเลือกเองและต้องระวังอย่างถึงที่สุด ซึ่งมันใช้ไม่ได้ผล และประสบการณ์หลายสิบปีก็พิสูจน์เรื่องนั้นแล้ว

    • แล้วควรแทนที่ด้วยอะไร?
    • ถ้า LLM หาช่องโหว่ทั้งหมดได้แม้ไม่มีซอร์สโค้ด งั้นถ้ามีโค้ดอยู่แล้วมันก็น่าจะหาได้ง่ายกว่านี้ไม่ใช่หรือ?
    • C++ เป็นภาษาที่ยอดเยี่ยมมากในยุคของมัน ตอนนั้นไม่มีภาษาไหนที่เร็วกว่าโดยยังให้ abstraction ที่ทรงพลังขนาดนี้ และการที่ C++11 เพิ่มสิ่งอย่าง shared_ptr เข้ามาก็แสดงให้เห็นด้วยว่าภาษาหนึ่งจะเปลี่ยนแปลงครั้งใหญ่ได้แค่ไหน
      มันรับเอาแทบทุกไอเดียเข้ามา และเราได้เรียนรู้จากสนามจริงว่าอะไรใช้ได้และอะไรใช้ไม่ได้ RAII, การแยก move กับ copy, smart pointer, placement-new, generic ยังควรเก็บไว้
      ในทางกลับกัน auto_ptr, การ copy แบบค่าเริ่มต้น, วิธีทำ exception บางแบบ, multiple virtual inheritance, template ที่แทนโค้ดทั้งก้อนทิ้งได้เลยควรถูกทิ้งไป ในความเห็นผม การต่อสู้จบแล้ว และ Rust คือผลลัพธ์ที่สรุปสิ่งที่ใช้ได้ผลออกมาได้ดีที่สุด แถมยังรับเวลา compile มาด้วยเป็นของแถม
  • น่าแปลกใจที่กระแสการพัฒนา C++ ยังเดินต่อไป ถ้าเกมหรือโปรแกรมถูกทำด้วย C++ ก็มักรู้สึกดีเพราะประสิทธิภาพโดยรวมมักการันตีได้ แต่ถ้าให้ผมเขียน C++ เองคงอยากร้องไห้
    มีเรื่องให้ต้องจำมากเกินไปและมาตรฐานก็หลากหลายมาก ถ้าต้องเข้าไปดูแลโปรเจ็กต์ที่เป็น C++ กำลังใจก็ตกทันที มันยากเกินไปจริง ๆ ถ้าคนอื่นเขียนให้ก็ดีอยู่ แต่ไม่ใช่ภาษาที่อยากเขียนเอง

    • ส่วนตัวผมไม่ได้รู้สึกว่าการเขียน C++ ยากขนาดนั้น ข้อเสียคือมันต้อง วอร์มสมอง ก่อน และต้องทำใหม่ทุกโปรเจ็กต์ แต่พอ flywheel เริ่มหมุนแล้วก็แทบจะเขียนโค้ดได้แบบไม่ต้องออกแรงมาก
      ไม่ว่าจะใช้ภาษาไหนก็ต้องมีการวอร์มคล้าย ๆ กันอยู่แล้ว สำหรับผมจึงไม่ได้ต่างจากการใช้ Python, Go หรือ Java มากนัก
    • ในวงการเกม C++ กลายเป็นภาษาที่ง่ายกว่ามาก เพราะโค้ดเบสของเกมมักจะไม่ใช้ไลบรารีมาตรฐานของ C++ เป็นส่วนใหญ่ และก็มีเหตุผลที่ดีด้วย ดูตัวอย่าง [0]
      ถ้าไม่นับ standard library แล้ว C++ ก็ถือว่าโอเคพอสมควร
      ปัญหาหลักของ ecosystem C++ คือทุกคนต่างก็แกะสลัก subset ของภาษาในแบบของตัวเองขึ้นมาใช้ จึงไม่ได้มี ecosystem เดียว แต่กลายเป็นหลาย ecosystem ที่มีสไตล์และ subset ของภาษา/standard library ซึ่งขัดกันเอง ส่งผลให้การนำโค้ดกลับมาใช้ซ้ำผ่านไลบรารีทำได้ยากเกินความจำเป็น
      [0] https://hftuniversity.com/post/the-c-standard-library-has-be...
    • จริงอยู่ว่า C++ มีฟีเจอร์เยอะ แต่เหมือนที่พูดไว้ที่อื่น โปรเจ็กต์ส่วนใหญ่จะกำหนดกฎของตัวเองและเลือกใช้เพียง subset ของฟีเจอร์
      ข้อดีอย่างมากของชุดฟีเจอร์ที่ใหญ่คือ C++ เปิดให้ใช้ abstraction ที่ดีได้ตั้งแต่ระดับต่ำมากไปจนถึงระดับสูงมาก คุณทำงานระดับต่ำอย่าง inline assembly, bit operation, การจัดการหน่วยความจำโดยตรงก็ได้ และจะใช้แบบระดับสูงแทบเหมือนภาษา scripting ก็ยังได้ ไม่ว่าโจทย์ของปัญหาจะต้องการอะไร C++ ก็รับมือได้
    • แค่รู้ภาษาสัก 70% ก็ใช้งานได้ค่อนข้างมีประสิทธิผลแล้ว การบอกว่า C++ เหมาะแค่กับงานอย่าง game engine เป็นความเข้าใจผิดที่พบบ่อย และในงานแอปพลิเคชันมันก็ใช้ได้ดีพอสมควรเหมือนกัน
      อีกอย่าง จากข้อมูลในโปรไฟล์ ถ้าคุณไม่ได้อยู่ในเกาหลีเหนือ ก็ควรเพิ่มเรตราคาไปอีกหนึ่งหลัก 0 แบบนั้นจะได้ลูกค้าที่คุณภาพดีกว่าและระยะยาวกว่า
    • งานอดิเรกอย่างหนึ่งของผมคือเดินคุ้ยร้านของมือสอง ชื่นชมของเชย ๆ จากยุคที่ผ่านมา คัดของจุกจิกสมัยใหม่ที่ทำมาไม่ดีทิ้งไป และดีใจเมื่อได้เจอเครื่องมือที่เรียบง่ายและทนทาน
      การใช้ชีวิตเป็น โปรแกรมเมอร์ C++ ก็ให้ความรู้สึกแบบนั้นพอดี
  • ทุกครั้งที่สอนนักพัฒนาเว็บ ผมจะบอกว่าภาษาของอินเทอร์เน็ตไม่ใช่ JavaScript แต่คือ C++ นักพัฒนาเว็บเป็นแค่ผู้ใช้ที่เข้าไปเล่นอยู่ในโปรแกรมที่นักพัฒนา C++ สร้างขึ้นเท่านั้น

    • ถ้าจะต่ออุปมาแบบนั้น นักพัฒนาเบราว์เซอร์ก็เป็นแค่ผู้ใช้ที่เข้าไปเล่นอยู่ในโปรแกรม C/ระบบปฏิบัติการ/เคอร์เนลอีกที
    • ผมมองว่าเว็บกับอินเทอร์เน็ตเป็นคนละอย่างกัน ถ้าจะบอกว่าภาษาของเว็บคืออะไร ผมคงเลือก HTML
      แต่ถ้าถามว่าภาษาของอินเทอร์เน็ตคืออะไร คำตอบจะไม่ชัดเจนกว่ามาก
  • สารคดีฟรีเกี่ยวกับหัวข้อที่ผมหลงใหลนี่ดีจริง ๆ ขอบคุณมาก
    แต่ผมอาจจะแปลกนิดหน่อย เพราะผมดูสารคดีที่สร้างจากการเอาคนมาพูดประโยคสั้น ๆ ต่อกันไปเรื่อย ๆ ไม่ค่อยได้ ผมเข้าใจเจตนาว่าอยาก “ปล่อยให้พวกเขาเป็นคนเล่าเรื่อง” แต่เพราะมันชวนให้เสียสมาธิ ผมเลยต้องการ ผู้บรรยาย ที่คอยบอกว่าควรคิดอะไรอยู่
    ถึงอย่างนั้นก็ยังส่งความรักให้ทีมผู้สร้าง

  • ผมตามกระแสช่วงนี้ไม่ทัน แต่เมื่อเร็ว ๆ นี้ก็มีสารคดี Python, Clojure และน่าจะมีของภาษาอื่นด้วย พวกเดียวกันกำลังทำซีรีส์ที่ครอบคลุมหลายภาษาหรือเปล่า? เป็นเรื่องบังเอิญ? หรือเดี๋ยวนี้ทุกภาษาโปรแกรมมิ่งกำลังฮิตทำสารคดีวิดีโอของตัวเองกันหมดแล้ว?

    • ใช่ เป็นคนกลุ่มเดียวกันทำ: https://www.cultrepo.com/
      ดูเหมือนว่าจะทำสารคดีเกี่ยวกับซอฟต์แวร์โอเพนซอร์ส
  • Chandler Carruth มีมุมมองที่น่าสนใจเกี่ยวกับหัวข้อนี้: https://hachyderm.io/@chandlerc/116694268329657881

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