配列のfirstやlastは、配列要素の追加や削除を行うルーブの中で使用したり、配列からFILOのスタック構造とか、FIFOのキューなんかを設計する場合にすごく便利な
プロパティ(/メソソッド)だけど、firstやlastのセッターの利用が想定される一般的な場面なんてない
それはもうソフトウェア設計者としての根本的なセンスの問題
分かる人はすぐピンとくるし、分からん奴は何で?と思うぐらいの感覚なんだろう

リードオンリーなクラス(/構造体)属性に無闇にセッターはつけるのは全体的なアクセシビリティーのポリシーに関する問題もあるが、もちろん、コンパイル時のコスト、
バイナリーサイズへの影響なども考慮する必要がある。OSが提供する広く使われるライブラリであれば尚のこと極力無駄は省かなければならない

抽象化とはそういうことの積み重ねであって、例えば設計者がベースクラスに付与した属性の微妙なずれが、継承先のクラスや、それに委譲するクラスの全体的なポリシー
に多大な影響を与えることになる。
例えばSwiftの構造体は値型だけどパフォーマンスを考慮してCopy on writeの設計にしてあり、一つのセッターの存在がバイナリー全体に影響を与える

どうせだしついでにセッターもつけとくか的な発想でつけるようなものではない