Почему компилятор не набирайте продвигать все оценки выражений в правой части выражения присваивания, по меньшей мере, на левом уровень типа Правых?
Очень хороший вопрос. Собственно, давайте предположим, что компилятор делает это автоматически. Теперь, принимая ваш пример: -
double x = 88.0 - 32 * 5/9
Теперь RHS часть этого задания может быть преобразована в два раз полностью для всех лексем (лексемы) в нескольких направлениях. Я добавляю некоторые из них: -
- 88,0 - 32 * (двойной) (5/9)
- 88,0 - 32 * 5/9 // по умолчанию правило
- 88,0 - (двойной) (32 * 5)/9
- Индивидуально лить тип, чтобы удвоить каждый токен, который, кажется, не является двойным объектом.
- Несколько других способов.
Это превращается в комбинаторную проблему типа «В каком количестве способов данное выражение может быть сведено к двойному (независимо от типа)?»
Но дизайнеры-компиляторы не будут испытывать такую боль в своих ***, чтобы преобразовать каждый токен в желаемый наивысший тип (здесь двойной), учитывая исчерпывающее использование памяти. Кроме того, это выглядит как неестественное объяснение тому, что он делает это без причины, потому что пользователи могут лучше выполнять операцию, вручную давая некоторые подсказки компилятору, которые он должен делать, используя метод, закодированный пользователем.
Будучи все автоматическое преобразование не будет давать вам результат всегда, а иногда и то, что пользователь хочет не может быть достигнуто с такого рода обоснование автоматического продвижения типа, НО, то наоборот типа -продвижение будет работать гораздо лучше, как это делают компиляторы сегодня. Текущее правило для литья типов верно обслуживает все цели, но с некоторыми дополнительными усилиями, но, FLAWLESSLY.
Речь идет не о конструкции компилятора - речь идет о языке. Компилятор должен делать то, что говорит спецификация языка. Теперь вы не указали, на каком языке вы говорите, что делает этот путь слишком широким - вполне возможно, что есть * языки, которые имеют такое поведение. –
Почему бы не разработать язык, чтобы продвигать выражения правой стороны до уровня? Я не хочу обсуждения на конкретном языке. Существует много языков, которые демонстрируют поведение, описанное выше.Мне любопытно, почему так дизайн? – wurzja
У каждого из разработчиков языка, вероятно, были свои причины, поэтому запрос «в общем», как это, слишком широк, ИМО. (Существует множество способов, при которых все выражения (или, по крайней мере, почти все выражения) имеют тип, не зависящий от контекста, в котором они используются, облегчают работу.) –