Why would it be good for a Tuple to be a List?

~~ Robert.

Reinier Zwitserloot wrote:
> Even if you use a list instead of a tuple, lists don't support
> heterogenous typing; you can have a tuple of type <String, Integer>,
> but you can't have a list that is defined to contain alternating
> String/Integer. I agree that it would be great if somehow the actual
> underlying object is the same thing between a tuple and a list, and
> the only difference is that a tuple has a set size and a listed type
> for each element, whereas a list has a single type for all elements
> and can be any size. I guess you could theoretically employ a nested
> pairs structure just for the sake of the compiler, and actually do a
> relatively quick list lookup + cast at runtime, using copious amounts
> of unsafes. Without more sugar you can't make this work in the JVM
> (You'd define a tuple as a Tuple<H, T>, so how do you extract the H of
> the Tuple that is the T? Or the H of the Tuple that is the T of the
> tuple that is the T of this tuple? The generics type system has the
> info, there's just no syntax (in java 1.6) to liberate the right type.
> Scala has higher kinded types but I'm not sure it can solve this
> problem either, by the way.
> 
> I get that scala's current solution was the easiest given the
> constraints, but littering the top-level namespace with 22 instances
> of FoobarX, and having an arbitrary limit at all, can't be the right
> answer. If java is to get arbitrary-length tuples I'd prefer a less
> hacky solution.
> 
> On Feb 10, 8:40 am, Josh Suereth <[email protected]> wrote:
>> I think perhaps as Scala is academic, speed takes more of a focus for some
>> decisions.  Although what you're describing with nested pairs works
>> perfectly well, the performance of grabbing item N off the Tuple is N-1
>> lookups on Pair.   Call it what you will, but Scala tries to strike a
>> balance between elegance and speed.   As you add these higher-level
>> abstractions it can be tough to keep them fast enough for "general-purpose"
>> (or better yet, specific purpose) computing.
>>
>> Note that Scala takes the approach for sizes you outline in it's "Seq"
>> abstract Trait.   It is recommended against calling the length method for
>> performance reasons.  If you want fast length calculations, use a List.
>>
>> It seems if you'd like to support an arbitrary number of Tuples, you
>> literally should return Arrays of Objects or some form of Collection, then
>> have javac auto-cast results for you in bytecode.   The difference here
>> would be some form of bytecode flag that says: "This return value isn't a
>> list, it's actually a Tuple of these other types".  Either that, or have the
>> JVM support tuples directly
>>
>> -Josh
>>
>> On Mon, Feb 9, 2009 at 10:50 PM, Reinier Zwitserloot 
>> <[email protected]>wrote:
>>
>>
>>
>>> If you have inference, you can create TupleXes by chaining tuples.
>>> So a (String, Integer, Double) tuple would be:
>>> Pair<String, Pair<Integer, Double>>.
>>> Then you add a light sprinkling of syntax sugar to make it not look
>>> ridiculous.
>>> I don't understand why scala doesn't work this way. It would avoid
>>> littering the namespace with a tonne of these and having an arbitrary
>>> limit of 22.
>>> A 'Pair' could then support asking how big it is (it would check if
>>> it's second element is a Pair, and if so, return that pair's size +1,
>>> and if not, return 2, or better yet, have a BGGA-esque Nothing/Void/
>>> Undefined type and don't count those either).
>>> On Feb 10, 3:20 am, Josh Suereth <[email protected]> wrote:
>>>> They're actually unifying Function arguments and Tuples so you can use
>>>> them interchangeably (I believe in 2.8).  In java this looks
>>>> ridiculuous, as you don't have scala's style of type-inference.  My
>>>> guess would be that if tuple support isn't native to the language
>>>> currently, it will be in the future.
>>>> Scala sometimes gets the syntactic-sugar wrong where you have to do
>>>> things like someFunction((x,y)), but in general it "just works".
>>>> It also supports extracting tuples using pattern matching like so:
>>>> val (x,y) = someFunction()
>>>> which may look a lot uglier in java:
>>>> (String x, int y) = someFunction();
>>>> but is still rather nice for a "pair" class.
>>>> Also, as a Side note, Tony Morris's project "Functional Java" has a
>>>> Tuple class hidden in its bowels of Monads and Theory.  It's actually
>>>> called a "Product" (the classes are named PN where N is a number from
>>>> 1-8)
>>>> Here's the docshttp://
>>> functionaljava.googlecode.com/svn/artifacts/2.17/javadoc/index...
>>>> On Feb 9, 8:48 pm, Michael Neale <[email protected]> wrote:
>>>>> Thanks David !
>>>>> 22... interesting...
>>>>> How did they do the syntactic support for ( and ) to mean Tuple? Is it
>>>>> special or like anything else, just defs?
>>>>> On Feb 10, 11:51 am, David Chuhay <[email protected]> wrote:
>>>>>> Scala has tuple classes up to size 22 included in the base langauge
>>>>>> package. The (var1, var2, ...) syntax gets compiled into an
>>>>>> instantiation of the properly sized Tuple class.
>>>>>> Michael Neale wrote:
>>>>>>> So how would you do it in scala ;) ?
>>>>>>> (sorry I always find it crushing how easy everything is in scala,
>>> when
>>>>>>> I have to look at java).
>>>>>>> Of course you can just do:
>>>>>>> def foo() : (String, Int) = ("Hello", 42)
>>>>>>> never looking into what scala *actually* does with tuples, if its
>>>>>>> something nasty or not... (someone else I am sure knows if it is a
>>>>>>> good or bad thing).
> > 
> 

-- 
~~ Robert Fischer.
Grails Trainining      http://GroovyMag.com/training
Smokejumper Consulting http://SmokejumperIT.com
Enfranchised Mind Blog http://EnfranchisedMind.com/blog

Check out my book, "Grails Persistence with GORM and GSQL"!
http://www.smokejumperit.com/redirect.html

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to