結局、話をまとめると
ビルダーパターンで
foo()
 .item1(value1)
 .item3(value3)
 .item7(value7)
と書くか

名前付きオプション引数で
foo(
 item1=value1,
 item3=value3,
 item7=value7,
)
と書くか

これだけの違いだよな
どちらも変わらん慣れだけの問題
どちらも見た通りなので指定ミスや重複ミスなど起きようがない

あとはそれらを提供するライブラリ側だ
いずれも普通は初期化関数を自分で書かなければならない
Rustでderive_builderを使えば構造体に属性を付けるだけで済みシンプルかつミスも起きない
少なくとも現状でderive_builderに欠点は見つかっておらず最善な方法であるといえる