[ 
https://issues.apache.org/jira/browse/THRIFT-428?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

David Reiss updated THRIFT-428:
-------------------------------

    Description: 
For the sake of better interoperability, particularly with PHP, it would be a 
good idea to restrict map keys to be only of integer and string type. Handling 
of structures and containers as key types is a pretty mixed bag across the main 
supported languages.  The current state of affairs is:

C++: Containers with containers as keys (with no structs involved) are fine.  
If a struct (or container of structs, or container of containers of structs, 
etc.) is to be used as a map key, it must have a comparison (less than) 
operator defined.

Java: Containers and structs can be used as map keys or set elements.  It is 
not entirely safe, but this is the Java convention (trust the application 
developer).  structs cannot be used in sorted containers.  Using structs as map 
keys without an optional dependency (apache commons lang) is very inefficient 
because structures all have a hashCode of 0 without it.  (Can binaries be used 
as keys?)

Python: Using mutable containers as map keys is impossible.  Using mutable 
structures as map keys is possible, but unsafe and goes against a very strong 
Python convention.  We are pretty close to having implementations of immutable 
containers and structures, but the code will probably end up being pretty bulky 
or pretty skeevy.

Ruby: (Maybe someone can fill in more details?) Structures as map keys are very 
inefficient because all structures have a hash code of zero.

PHP: Using structures or containers as map keys (or set elements) in PHP is 
currently impossible, and might be impossible to implement.  Only strings and 
numbers can be associative array keys in PHP.

Erlang: Any struct or container can be a map key or set element.  There are no 
safety or performance issues.  Erlang is pretty cool like that.


I'd like us to consider doing this for 0.1 so it's in there for the first 
official Apache release.

  was:
For the sake of better interoperability, particularly with PHP, it would be a 
good idea to restrict map keys to be only of integer and string type. Handling 
of structures and containers as key types is a pretty mixed bag across the main 
supported languages (David Reiss will elaborate on this).

I'd like us to consider doing this for 0.1 so it's in there for the first 
official Apache release.


> Restrict map keys to integers and strings only
> ----------------------------------------------
>
>                 Key: THRIFT-428
>                 URL: https://issues.apache.org/jira/browse/THRIFT-428
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Compiler (General)
>    Affects Versions: 0.1
>            Reporter: Chad Walters
>             Fix For: 0.1
>
>
> For the sake of better interoperability, particularly with PHP, it would be a 
> good idea to restrict map keys to be only of integer and string type. 
> Handling of structures and containers as key types is a pretty mixed bag 
> across the main supported languages.  The current state of affairs is:
> C++: Containers with containers as keys (with no structs involved) are fine.  
> If a struct (or container of structs, or container of containers of structs, 
> etc.) is to be used as a map key, it must have a comparison (less than) 
> operator defined.
> Java: Containers and structs can be used as map keys or set elements.  It is 
> not entirely safe, but this is the Java convention (trust the application 
> developer).  structs cannot be used in sorted containers.  Using structs as 
> map keys without an optional dependency (apache commons lang) is very 
> inefficient because structures all have a hashCode of 0 without it.  (Can 
> binaries be used as keys?)
> Python: Using mutable containers as map keys is impossible.  Using mutable 
> structures as map keys is possible, but unsafe and goes against a very strong 
> Python convention.  We are pretty close to having implementations of 
> immutable containers and structures, but the code will probably end up being 
> pretty bulky or pretty skeevy.
> Ruby: (Maybe someone can fill in more details?) Structures as map keys are 
> very inefficient because all structures have a hash code of zero.
> PHP: Using structures or containers as map keys (or set elements) in PHP is 
> currently impossible, and might be impossible to implement.  Only strings and 
> numbers can be associative array keys in PHP.
> Erlang: Any struct or container can be a map key or set element.  There are 
> no safety or performance issues.  Erlang is pretty cool like that.
> I'd like us to consider doing this for 0.1 so it's in there for the first 
> official Apache release.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to