- Dennis > On Apr 18, 2016, at 9:55 PM, Brent Royal-Gordon via swift-evolution > <[email protected]> wrote: > >> I would like to see format strings go away and be replace with safer inline >> annotations. > > The main problem is doing localized strings with printf-style formats well, > but I actually have a pretty sweet solution for that: > https://gist.github.com/brentdax/79fa038c0af0cafb52dd > >> -- E, somewhat agnostic on variadics > > Variadics are eventually important as a generic function feature; you really > want to be able to write a version of zip() which can take any number of > sequences, for instance, and the only reasonable way to do that is to pass a > variable number of parameters and return a sequence with a matchingly > variable number of type parameters. > Which brings us to dependent types :)
> Today, they are important in that they bootstrap ArrayLiteralConvertible and > DictionaryLiteralConvertible by (at least theoretically) acting as a > pass-N-items mechanism that doesn't depend on one of the standard library > types defined in terms of it. (If we convert them to show up as tuples once > we have tuple subscripting syntax, that will even become true.) Less > esoterically, they're used in several places where an Array would be > inconvenient or break traditions: > > * The `print` function's list of items to print is variadic. An array > equivalent would look like `print([one, two, three])`. > * The `min` and `max` functions are more convenient than explicitly > constructing an array and calling their `min()` and `max()` methods. > * And, yes, `String.init(format:_:)`, which we will probably never be quite > rid of for compatibility reasons. > All those points are also perfectly solved by dependent types (which is definitely not in the time frame of Swift 3 or even Swift 4). But I think in the long term we should get rid of varargs and Swift 3 (as far as I remember) is the last version of Swift to remove functionality from the language (is that actually correct?). Short-term solutions: I very very rarely use the print function with multiple parameters. Most of the time I build a single string and use string interpolation to insert values. If there really is a need for multiple arguments to print, like others said, overloads could be generated. min and max: I think most the time they are used to compare 2 values. If there are more than 2 values (or let’s say 3) I think an array is better suited. String.init(format:_:) … I think if all C APIs would get imported by converting varargs to arrays we could get rid of it. > -- > Brent Royal-Gordon > Architechies > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
