Shorty: ไลบรารี C++ ใหม่เสนอไวยากรณ์ Lambda ที่กระชับกว่า แบ่งแยกชุมชนนักพัฒนา

BigGo Editorial Team
Shorty: ไลบรารี C++ ใหม่เสนอไวยากรณ์ Lambda ที่กระชับกว่า แบ่งแยกชุมชนนักพัฒนา

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

Shorty มีเป้าหมายที่จะนำเสนอทางเลือกที่กระชับกว่าสำหรับไวยากรณ์ lambda มาตรฐานของ C++ โดยใช้เครื่องหมายดอลลาร์นำหน้าเช่น $lhs, $rhs และ $it เพื่อเข้าถึงอาร์กิวเมนต์ของฟังก์ชัน วิธีนี้ช่วยให้นักพัฒนาสามารถเขียนโค้ดที่อ่านง่ายขึ้นสำหรับการทำงานทั่วไป เช่น การเรียงลำดับ การกรอง และการแปลงข้อมูล

ความขัดแย้งเรื่องเครื่องหมายดอลลาร์

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

It's a common extension but it's not standard. Both C23 and C++23 only allow identifiers to start with a Unicode XID_START character, which excludes $.

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

Expression Templates และผู้บุกเบิก

นักพัฒนาหลายคนในความคิดเห็นตระหนักว่า Shorty ไม่ได้แนะนำแนวคิดใหม่ทั้งหมด แต่กำลังต่อยอดจากเทคนิคที่มีอยู่แล้วใน C++ ไลบรารีนี้ใช้ expression templates ซึ่งเป็นเทคนิค metaprogramming ที่ถูกนำมาใช้ในไลบรารี C++ ต่างๆ มาหลายปีแล้ว

ผู้แสดงความคิดเห็นหลายคนเปรียบเทียบ Shorty กับไลบรารีก่อนหน้านี้ที่มีเป้าหมายคล้ายกัน โดยเฉพาะอย่างยิ่ง Boost.Lambda, Boost Lambda2, Boost HOF และ Boost Hana อย่างไรก็ตาม มีการยอมรับว่า Shorty ดูเหมือนจะมีคุณสมบัติครบถ้วนมากกว่าผู้บุกเบิกบางรายเหล่านี้ โดยนำเสนอความสามารถที่หลากหลายมากขึ้นสำหรับการเข้าถึงอาร์กิวเมนต์ การเรียกใช้ฟังก์ชัน และการแปลงข้อมูล

คุณสมบัติหลักของ Shorty

  • การเข้าถึงอาร์กิวเมนต์: $0-$9, $lhs, $rhs, $it, $a-$f, $x, $y, $z
  • การสอบถามอาร์กิวเมนต์: $argc, $args
  • การจับค่า: $(v), $ref(v), $value(v), $val(v), $copy(v), $fixed, $const
  • การเรียกฟังก์ชัน: $<callable>(args...), $call(args...)
  • การแปลงประเภทข้อมูล: $<T>(expr), $cast(expr)
  • การสร้างทูเพิล: ($a, $b, $c), ($0, $1)
  • การดำเนินการกำหนดค่า: $a += 2, ฯลฯ

ไลบรารีที่คล้ายกัน

  • Boost.Lambda (ล้าสมัยแล้ว)
  • Boost Lambda2
  • Boost HOF
  • Boost Hana

การตอบรับที่หลากหลาย

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

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

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

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

อ้างอิง: terser (shorter) lambda == SHORTY