ไลบรารีใหม่สำหรับภาษา 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