Shorty:より簡潔なラムダ構文を提供する新しいC++ライブラリが開発者コミュニティを二分

BigGo Editorial Team
Shorty:より簡潔なラムダ構文を提供する新しいC++ライブラリが開発者コミュニティを二分

新しいC++ライブラリ「 Shorty 」が登場し、より簡潔な構文でラムダ式を単純化することを約束しています。このライブラリは開発者の間で大きな議論を巻き起こし、反応は熱狂的なものから、すでに複雑な言語にさらに複雑さを加えるものとして恐れるものまで様々です。

Shorty は、C++の標準ラムダ構文に代わるより簡潔な選択肢を提供することを目指し、$lhs$rhs$it などのドル記号プレフィックスを使用して関数の引数にアクセスします。このアプローチにより、開発者はソート、フィルタリング、変換などの一般的な操作に対してより読みやすいコードを書くことができます。

ドル記号の論争

Shorty について最も議論されている側面の一つは、識別子にドル記号($)を使用していることで、これはC++の標準ではないとコメンターの何人かが指摘しています。ドル記号はCの初期の頃から多くのコンパイラで拡張機能として受け入れられてきましたが、公式の言語標準の一部ではありません。

「これは一般的な拡張機能ですが、標準ではありません。C23とC++23の両方とも、識別子はUnicodeのXID_START文字で始まる必要があり、$は除外されています。」

ライブラリの開発者はこの制限を明確に認識しており、彼らのプロジェクトにはこの非標準の使用に関する警告を抑制するためのコンパイラオプションが含まれています。一部のコメンターはこの拡張機能をVMSシステムにまで遡り、これが GCC が元々ドル記号のサポートを含めた理由かもしれないと示唆しています。

式テンプレートと先駆者

コメントの中で何人かの開発者は、Shorty が全く新しい概念を導入しているわけではなく、C++で確立された技術の上に構築されていることを認識しています。このライブラリは、長年様々な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 に対するコミュニティの反応は、C++のメタプログラミングと言語拡張に関する意見の分かれる視点を明らかにしています。一部の開発者はライブラリの可能性に興奮を表明し、あるコメンターは最初は構文が嫌いだったが次第に好きになってきたと認めています。他の人々は、Boost::Lambda2のアプローチと同様に、使用する前にドル記号をアンダースコアに置き換えることを提案しています。

反対側では、一部の開発者はこのライブラリを恐ろしいまたは呪われていると表現し、C++にさらに複雑さの層を追加することへの懸念を表明しています。あるコメンターは特に、さらに理解不能なエラーメッセージの可能性について言及しました—これはC++開発における悪名高い痛点であり、かつてはソースコードの59億倍の大きさのエラーメッセージを生成したエントリが優勝したコンテストにインスピレーションを与えたほどです。

これらの批判にもかかわらず、いくつかの技術的なコメンターは、他のテンプレートメタプログラミングライブラリと比較して、実装が驚くほど読みやすく構造が整っていると感じており、構文の選択が議論の的となっていても、概念自体には価値があるかもしれないと示唆しています。

C++がC++23のような新しい標準で進化し続ける中、Shorty のようなライブラリは、言語の純粋性と実用的な表現力の間の継続的な緊張関係を示しています。これは数十年にわたってC++開発を特徴付けてきたものです。Shorty が広く採用されるか、興味深い実験にとどまるかはまだ分かりませんが、確かにC++構文の将来の方向性について思慮深い議論を引き起こしています。

参考:terser (shorter) lambda == SHORTY