http://mr-aleph.livejournal.com/ ([identity profile] mr-aleph.livejournal.com) wrote in [personal profile] thedeemon 2014-11-10 04:02 pm (UTC)

да это понятно :) ну вот допустим 0xFFFFFFFF выглядит для Си-шника как int32/uint32 - а для Dart с его интами это int33 :)

Если вдаваться в подробности, у нас пирамида внутренних представлений выглядит так smi -> mint -> bigint.

Smi = Machine Word Size - 1 bit (int31 on 32-bit, int63 on 64-bit)

Mint = boxed int64

Bigint = понятное дело "бесконечный".

Поэтому когда кто-то делает значение типа 0xFFFFFFFF в 32-bit Dart VM его таращит в Mint и информация о его пределах теряется. Вот отсюда и все проблемы.

Нужно как я в ишуе писал делать нормальный range profiling на бинарных операциях - тогда получится хороший код генерировать.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting