[swift-server-dev] Convert HTTPVersion to struct

Chris Bailey BAILEYC at uk.ibm.com
Wed Jun 14 04:14:40 CDT 2017


One factor is whether you consider the version to be discrete values or a 
structured format for data - I'd argue that we have a structured format 
due to the expectation that future versions of the HTTP spec could arrive.

Adding conformance to Hashable/Equatable and CustomStringConvertible 
provides the operations, and whilst it may look strange we could also 
provide convenience constants if it makes sense, ie:
    public static let http1_0 = HTTPVersion(major: 1, minor: 0)
    public static let http1_1 = HTTPVersion(major: 1, minor: 1)
    public static let http2_0 = HTTPVersion(major: 2, minor: 0)

Having said that, there is slight additional storage overhead for structs 
vs. enums, as a slight additional compare cost.

Chris

Michael Chiu <hatsuneyuji at icloud.com> wrote on 14/06/2017 08:12:35:

> From: Michael Chiu <hatsuneyuji at icloud.com>
> To: Rien <Rien at Balancingrock.nl>
> Cc: Chris Bailey <BAILEYC at uk.ibm.com>, swift-server-dev at swift.org
> Date: 14/06/2017 08:12
> Subject: Re: [swift-server-dev] Convert HTTPVersion to struct
> 
> I think currently the http version is come from the http_parser 
> which has parsed the version string to number anyway. hence the 
> performance should be similar.
> 
> I do see some advantage to use struct tho, for example comparing 
> only major version.
> 
> Michael
> 
> > On Jun 13, 2017, at 11:41 PM, Rien via swift-server-dev <swift-
> server-dev at swift.org> wrote:
> > 
> > The choices seem to be:
> > 
> > 1) String
> > 2) Enum
> > 3) Tuple
> > 4) Struct
> > 5) Class
> > 
> > 1) String
> > Advantage: it is in fact an utf-8 string. No conversions needed.
> > Disadvantage: It is mostly thought of as a number, thus the 
> abstraction does not match the type, very minor performance penalty 
> in comparing. Illogical to add HTTP-version extensions to the type.
> > 
> > 2) Enum
> > Advantage: shortest possible representation (?), fastest compare 
> (?), easy to use.
> > Disadvantage: Needs converting to and from.
> > 
> > 3) Tuple
> > Advantage: Matches fairly wel with the abstraction.
> > Disadvantage: Fairly complex conversion, adding members/operations
> is non-intuitive, not very easy to use.
> > 
> > 4) Struct
> > Advantage: Matches fairly wel with the abstraction.
> > Disadvantage: Fairly complex conversion. Not very easy to use 
> without adding members/operations.
> > 
> > 5) This was for completeness only, I would be very surprised if 
> anybody would actually propose this… ;-)
> > 
> > 
> > To me that leaves option 2 and 4.
> > Advantage of 2 over 4:
> > 
> > - I find the abstraction a better match. The difference between 1,
> 1.1 and 2 is such that it makes little sense to be to differentiate 
> based on the numerical values. It makes much more sense to 
> differentiate based on the “whole number”. AFAIIC they could just as
> easily have named the versions A, B, C etc. The numbers do not 
> convey any information as such.
> > - Switch is easier and more intuitive to use.
> > - Enums can have additional properties and operations similar to 
struct.
> > 
> > Advantage of 4 over 2:
> > I don’t see any.
> > 
> > Regards,
> > Rien
> > 
> > Site: http://balancingrock.nl
> > Blog: http://swiftrien.blogspot.com
> > Github: http://github.com/Balancingrock
> > Project: http://swiftfire.nl - An HTTP(S) web server framework in 
Swift
> > 
> > 
> > 
> >> On 13 Jun 2017, at 22:44, Chris Bailey via swift-server-dev 
> <swift-server-dev at swift.org> wrote:
> >> 
> >> Based on our discussed approach of reviewing each of the types in
> the HTTP project, I've raised the following PR to convert 
> HTTPVersion from (Int, Int) to a struct based on Paulo's proposal: 
> >>       https://github.com/swift-server/http/pull/6 
> >> 
> >> I've not yet added Hashable, Equatable and 
> CustomStringConvertible protocols - we can do that if we're happy 
> with the change. 
> >> 
> >> Chris
> >> Unless stated otherwise above:
> >> IBM United Kingdom Limited - Registered in England and Wales with
> number 741598. 
> >> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire 
PO6 3AU
> >> _______________________________________________
> >> swift-server-dev mailing list
> >> swift-server-dev at swift.org
> >> https://lists.swift.org/mailman/listinfo/swift-server-dev
> > 
> > _______________________________________________
> > swift-server-dev mailing list
> > swift-server-dev at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-server-dev
> 

Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-server-dev/attachments/20170614/e918c854/attachment.html>


More information about the swift-server-dev mailing list