Hacktical C: คู่มือปฏิบัติจุดประกายการถกเถียงเกี่ยวกับบทบาทของ C ในการเขียนโปรแกรมยุคใหม่

BigGo Editorial Team
Hacktical C: คู่มือปฏิบัติจุดประกายการถกเถียงเกี่ยวกับบทบาทของ C ในการเขียนโปรแกรมยุคใหม่

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

C ในฐานะ Portable Assembly - ความจริงหรือเพียงตำนาน?

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

When your computer is a PDP-11, otherwise it is a high level systems language like any other.

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

ความปลอดภัยของหน่วยความจำและการถกเถียงเรื่องเสรีภาพพร้อมความรับผิดชอบ

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

ผู้วิจารณ์โต้แย้งว่าปัญหาความปลอดภัยของหน่วยความจำไม่ใช่เพียงเรื่องของทักษะของโปรแกรมเมอร์ แต่เป็นช่องโหว่อย่างเป็นระบบที่ยังคงสร้างการโจมตีด้านความปลอดภัยโดยไม่คำนึงถึงความเชี่ยวชาญของนักพัฒนา พวกเขาชี้ให้เห็นว่าไม่มีความเชี่ยวชาญในการเขียนโปรแกรมของแต่ละบุคคลที่สามารถลดอัตราของ CVE ที่เกิดจากข้อบกพร่องด้านความปลอดภัยของหน่วยความจำในโปรแกรม C ได้อย่างมีความหมาย การถกเถียงขยายไปถึงว่าความยืดหยุ่นที่ C มอบให้นั้นคุ้มค่ากับต้นทุนด้านความปลอดภัยและการบำรุงรักษาหรือไม่ โดยเฉพาะอย่างยิ่งเมื่อภาษาสมัยใหม่ที่มีช่องทางหลบหลีกที่ไม่ปลอดภัย (เช่น Rust) สามารถให้ทั้งความปลอดภัยและประสิทธิภาพ

เทคนิค C ในทางปฏิบัติ: การแฮ็กอย่างชาญฉลาดหรือรูปแบบที่อันตราย?

ตัวหนังสือเองแสดงเทคนิคการเขียนโปรแกรม C ต่างๆ ซึ่งบางเทคนิคได้สร้างทั้งความชื่นชมและความกังวล ตัวอย่างหนึ่งที่ได้รับความสนใจเป็นพิเศษคือการใช้ coroutine โดยใช้มาโคร __LINE__ ในวิธีที่สร้างสรรค์:

หัวข้อสำคัญใน Hacktical C

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

การรองรับภาษา C โดยคอมไพเลอร์

| คอมไพเลอร์ | C17 | C11 | VLAs | C23 |
|----------|-----|-----|------|-----|
| GCC      | ใช่ | ใช่ | ใช่  | ใช่ (ค่าเริ่มต้น) |
| Clang    | ใช่ | ใช่ | ใช่  | บางส่วน |
| MSVC     | ใช่ (ตั้งแต่ปี 2020) | ใช่ | ไม่ (ไม่มีแผนที่จะรองรับ) | แผนการไม่ชัดเจน |

#define hc_task_yield(task)   
  do {     
    task->state = __LINE__;   
    return;     
    case __LINE__:;           
  } while (0)

ในขณะที่ผู้แสดงความคิดเห็นบางคนพบว่าเทคนิคนี้มีความชั่วร้ายแต่ชาญฉลาด คนอื่นๆ ชี้ไปที่การใช้งานทางเลือกและอภิปรายถึงข้อดีของการใช้ส่วนขยาย GNU เทียบกับ C มาตรฐาน สิ่งนี้เน้นให้เห็นถึงจุดเน้นของหนังสือเกี่ยวกับแนวทางปฏิบัติ บางครั้งก็ไม่ธรรมดาในการแก้ปัญหาใน C

ความสัมพันธ์ของ Microsoft กับ C

คำกล่าวของหนังสือที่ว่า Microsoft ได้เลือกที่จะละเลย C มาเป็นเวลานาน คอมไพเลอร์ของบริษัทล้าหลังกว่าคู่แข่งที่เหลือมาก ได้กระตุ้นให้เกิดการอภิปรายเกี่ยวกับสถานะปัจจุบันของการสนับสนุน C ของ Microsoft ผู้แสดงความคิดเห็นได้อธิบายว่าในขณะที่ Microsoft ให้ความสำคัญกับ C++ มากกว่า C ในอดีต แต่ก็มีการปรับปรุงในช่วงไม่กี่ปีที่ผ่านมา ในปี 2020 Microsoft ได้เพิ่มการสนับสนุนมาตรฐาน C11 และ C17 แม้ว่าคุณสมบัติบางอย่างเช่น Variable Length Arrays (VLAs) ยังคงไม่ได้รับการสนับสนุนโดยไม่มีแผนการสำหรับการนำไปใช้ ชุมชนยังคงไม่แน่ใจเกี่ยวกับแผนงานของ Microsoft สำหรับการสนับสนุน C23 โดยเฉพาะอย่างยิ่งเมื่อบริษัทให้ความสำคัญกับภาษาที่ปลอดภัยด้านหน่วยความจำมากขึ้นในฐานะส่วนหนึ่งของความคิดริเริ่มด้านความปลอดภัย

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

อ้างอิง: Hacktical C