I am +1 on the proposal overall.
I read the pitch and the proposal and feel this is a very nice addition.
However, after reading the suggestion from @benrimmington, I believe exposing this to SPM as methods on SwiftSetting
would be a better choice.
To me it feels fairly heavyweight to add these parameters to the initializer of Target, even if they are optional.
First, the flags only apply to Swift targets, so the parameters never have use or meaning for C or Cxx targets. Something scoped to Swift targets, such as SwiftSetting seems more appropriate.
Second, enabling future and experimental features is undoubtedly useful, but both seem less fundamental and more esoteric than the other init parameters for a Target.
Since SwiftSetting is the existing SPM mechanism in place for specifying flags to be passed to the Swift compiler, adding the functionality there seems to be the better choice.
Although more verbose, I also think having the method name in SwiftSetting match the setting passed on the command line (with differences only in case style) also makes the mapping extremely clear. Being able to use the existing BuildSettingCondition for SwiftSettings is also a benefit.