Kevin, you know that people do manage with mutable values as if they
were immutable pretty often.  I actually only found out that
java.util.Date was mutable recently (or I forgot at some point) and
have been treating it as immutable all these years.

Perhaps there's someone maintaining some code I wrote who is cursing
me now for relying on Date being immutable, I don't know.

Even without that ignorance, not changing values you don't 'own' can
work, just as in C you free() only values you 'own'.  Defensive
copying isn't actually necessary.  All that said, I prefer the
guarantees immutability can give you, but without immutability I
wouldn't automatically start copying everything around, making method
calls O(n) unnecessarily.

On Thu, Nov 24, 2011 at 5:01 PM, Kevin Wright <kev.lee.wri...@gmail.com> wrote:
> I guess the elephant in the room is mutability.  Whereas the Scala code I
> quoted will take an immutable map and result in an immutable map, your
> fantom equivalent is obviously relying on externally visible mutability to
> provide equivalent behaviour.  I certainly wouldn't feel comfortable passing
> this on to multiple other threads.
> Does Fantom have some form of map builder available, or a way of pinning
> down this map once constructed without incurring the cost of copying it to a
> dedicated immutable collection?  For some of the larger data sets I need to
> work on, the performance cost of cloning to ensure thread-safety would be a
> deal breaking concern.
>
>
> 2011/11/24 Cédric Beust ♔ <ced...@beust.com>
>>
>>
>> On Thu, Nov 24, 2011 at 1:28 AM, Kevin Wright <kev.lee.wri...@gmail.com>
>> wrote:
>>>
>>> This is all 100% safe and statically typed, and is made possible by the
>>> "scary" CanBuildFrom implicit parameter that Stephen mention in his article.
>>> I don't believe that Fantom can do this
>>
>> It depends on what you mean by "this", but the answer is that Fantom
>> certainly can (as can all these other languages I'm sure). I'm providing the
>> code below and not here since I don't want to turn this into a Scala vs/
>> Fantom debate, which is not the point I'm trying to make here. In this
>> particular example, you're just morphing one map into another, which is
>> really trivial. Admittedly, Fantom requires to declare a new map and then
>> adding the new content to that map, but you will probably do that in Scala
>> as well if you want to reuse that result (which I bet you would in a real
>> program and not a code golf).
>>
>>>
>>> , not least because it doesn't have highly-optimised collection types
>>> such as BitSet
>>
>> Maybe, maybe not. Optimized libraries are a separate topic from language
>> comparisons.
>> The bottom line here, again, is that implicit CanBuildFroms and other
>> subtleties are a very specific implementation detail in Scala that are not
>> necessary for languages that followed a different path to build their type
>> system.
>> By the way, I don't think the Liskov Substitution Principle is applicable
>> here since a function taking a Map[Int,String] will certainly not be happy
>> if you pass it a Map[String,String].
>>
>>>
>>> , it doesn't consider Maps to subclass collections of pairs
>>
>> True, but this seems is a collection design choice, not a language feature
>> (I like it, personally).
>>
>>>
>>> , and it doesn't support creation of your own paramaterised collection
>>> types.  So far as I'm aware, Scala is the only language in existence that
>>> directly supports such a scheme (though I imagine it would be totally
>>> possible to duplicate using something like Lisp macros)
>>
>> I don't think so but if I misunderstood your point, feel free to clarify.
>> Finally, the code to morph the map:
>>     aMap := [1:"x", 2:"y", 3:"z"]
>>     // Create an empty map
>>     map2 := [:]
>>     // Create the map ["1":"x", "2":"y", "3":"y"]
>>     aMap.each |v,k| { map2[k.toStr] = v }
>>     // map2 is now a [Str:Str]
>>     echo(map2)
>> --
>> Cédric
>
> --
> You received this message because you are subscribed to the Google Groups
> "The Java Posse" group.
> To post to this group, send email to javaposse@googlegroups.com.
> To unsubscribe from this group, send email to
> javaposse+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/javaposse?hl=en.
>

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

Reply via email to