Удаление преобразования изменяет семантику

#go #semantics #goland

#Вперед #семантика #goland

Вопрос:

GoLand IDE от JetBrains предлагает автоматическое удаление избыточного преобразования типов. Но есть сообщение:

Удаление преобразования (изменяет семантику)

Я не могу понять, что подразумевается под семантикой изменений. Что это на самом деле меняет?

Скриншот

Дополнительная информация:

Подробная информация

Комментарии:

1. Если вы найдете соответствующее правило (щелкните правой кнопкой мыши, затем изучите варианты, чтобы найти то, которое ведет к настройкам проверки) — оно будет снабжено небольшим описанием того, что они означают.

2. @zerkms Верно, я обновил сообщение информацией об инспекции

3. Какой тип got ? Похоже, это float32 уже произошло?

4. @zerkms Да, got уже float32 есть

5. @zerkms Я не понимаю, почему семантика должна быть изменена путем удаления избыточного преобразования. Почему что-то должно измениться?

Ответ №1:

GoLand действительно показывает, возможно, избыточное преобразование типов, когда выражение имеет плавающий тип. Во всех остальных случаях сообщение является преобразованием избыточного типа. Неопределенность в предыдущем утверждении связана с тем фактом, что преобразование из float в float иногда используется для предотвращения выбора команды компилятора Fused Multiply Add (FMA) во избежание ошибок округления. Пожалуйста, обратитесь к этой проблеме для получения более подробной информации. Однако я бы согласился, что семантические изменения, возможно, слишком строги, поскольку результат преобразования зависит от многих факторов. Итак, я изменил формулировку на может измениться семантика. Я также обновил описание проверки, поэтому оно содержит эту информацию. Эти изменения появятся в GoLand 2020.3.