Hey @hssn15, I’ve split this secondary question out into its own topic.
Fundamentally, both will be able to perform exactly the same and have some similar behaviors, but which is best will depend on your use case:
s1 can support many array types (e.g., sparse, bitarray, etc., etc.). s2 only supports Vector.
s2{T} allows you to more easily introspect (and dispatch on) the element types of X1, X2, X3. s1{V} would allow more simple dispatch on the array types.
To be even more concrete, the performance (and even the memory layout) of s1{Vector{Float64}, Vector{Int}} will be identical to the performance of s2{Float64}.