-
Пользователь
На самом деле, там большая проблема это как сделать понятную и удобную систему типов. Если кто подскажет -- буду рад
b : BYTE
b := b + 1;
Должен ли такой код работать?
А такой?
b : BYTE
w : WORD
b := 0;
w := b - 1; (* должно ли получиться 16#ffff или 16#00ff? *)
С технической точки зрения это дребедень, а не код, ведь, в BYTE и WORD являются наследниками типа ANY_BIT, а для этого типа не определены операции сложения и вычитания.
Тем не менее, подозреваю, что у всех в проектах есть сложение, вычитание, и, возможно даже умножение.
Поэтому остаётся либо запретить вообще подобные типы (ну прямо запретить сложение WORD'ов), либо ещё что-то.
Если посмотреть как сделана система типов, например, в java, то там любое сложение даёт int. Т.е. даже byte+byte складываем -- сразу получается int (это 4 байта).
Ещё есть особенный случай когда складывается long с чем-нибудь (там тоже получается long).
С одной стороны, конечно, странно всё время "добавлять приведения назад к байту", с другой, это снимает кучу головной боли.
Например, при таком подходе w окажется именно 16#ffff, а никак не 16#00ff.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума