[erlang-questions] [erlang-patches] ei patch to handle NEW_FLOAT_EXT

Serge Aleynikov <>
Fri Jul 11 13:01:52 CEST 2008


Another thought that crossed my mind on the ei's low-level old style 
decoding compatibility of doubles was to control it via introducing 
ei_init() with some global flags controlling fine-grain behavior as 
opposed to introducing more functions of ei_encode_double family.

Serge

Björn-Egil Dahlberg wrote:
> Hi Serge,
> 
> Thank you for sending a patch and underlining this problem.
> 
> Compatibility is a problem, and I am not sure yet if this is the solution.
> 
> I will look into the matter. *adding it to my todo list*
> 
> Regards,
> Björn-Egil
> Erlang/OTP
> 
> Serge Aleynikov wrote:
>> Ever since the emulator support of the compact IEEE 754 double 
>> encoding in external binary format was introduced I've been patiently 
>> waiting for ei to support this feature.  Finally I gave up and 
>> implemented this myself as I recently needed to marshal lots of 
>> doubles between Erlang and C++ and size of the binary stream did matter.
>>
>> Attached is a patch for R12B-2 that implements this feature.  The only 
>> thing I wasn't sure about was whether backward compatibility of 
>> ei_{encode,decode}_double() is truly required.  It exists in the 
>> emulator, where the new functionality is controlled by 
>> term_to_binary(Term, [{minor_version, 1}]), and is essential indeed, 
>> but is it really needed for ei?  In order to be properly backward 
>> compatible, it would likely require to introduce yet another pair of 
>> functions, such as:
>>
>>     int ei_encode_double_new(char *buf, int *index, double p)
>>     int ei_x_encode_double_new(ei_x_buff* x, const void *p, long len)
>>
>> which gets a little messy as there are already a fair amount of ei 
>> functions.
>>
>> Since the internals of the external binary format are hidden behind 
>> the facade of:
>>
>>     int ei_encode_double(char *buf, int *index, double p)
>>     int ei_decode_double(const char *buf, int *index, double *p)
>>
>> Perhaps retaining the compatibility of lower-level implementation is 
>> not that crucial?  In the patch the old functionality is controlled by 
>> setting USE_OLD_FLOAT_ENCODER macro, but this is left discretionary to 
>> the OTP team.
>>
>> Regards,
>>
>> Serge
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> erlang-patches mailing list
>> 
>> http://www.erlang.org/mailman/listinfo/erlang-patches
> 
> 




More information about the erlang-questions mailing list