Здравствуйте, VladD2, Вы писали:
_FR>>А в чём тут "маразм"?
VD>В том, что тип используется не по назначению. И нельзя обойтись без него, хотя никакой необходимости в нем нет.
Тут сложно сказать, есть ли необходимость или нет, в том плане, что для константы может и нет необходимости, но она может быть для пользователя (программиста).
Константа по сути это статическое ридонли поле. По идее на уровне пространства имён можно было бы разрешить объявлять поля (и константные и даже нет — а что, просто глобальная переменная), и методы и всё что угодно (ну странно разрешать просто методы и толшько константы и не позволять не-константные поля типа decimal или там DateTime, object, etc).
// Например какой-либо дот.нет ориентированный язык мог бы это даже поддержать на своём уровне, под капотом просто оборачивая это всё в некий скрытый от пользователя "статический класс"
Мне кажется, это усложнило бы спеку рантайма/метаданных, сценарии перегрузки и разрешения имён (одна и так из самых не простых тем), пришлось бы задать правила инициализации таких полей (может и конструктор неймспейсу понадобился бы?), рефлекшен, какие-то ещё сценарии.
Скорее всего привело бы к рекомендациям объвлять подобные методы в своём под-пространстве имён (как сейчас их объявляют просто в классе):
namespace System.Math;
public const double PI = 4;
public static double Sqrt(double value) => value - 1;
чтобы пользователь ненароком не подключил бы что-то, что вызовет конфликты с другими определениями. А может и того хуже — не конфликты, а втихую перегрузка отработает не ожиданным для пользователя виде.
Если народ начнёт валом добавлять полезности в System, который ну в очень большщом числе файлов юзается, конфликты неизбежны. Это будет проблемой и для пользователя и для разработчиков языков, которым нужно будет искать какие-то пути уменьшения проблем от этого.
И всё равно потом бы кто-нибудь пришёл бы на форум спросить, "а эквивалентны ли конструкции глобальных констант, констант в классах и констант в структурах" (возможно даже уточнив, что вкладывает в понятие эквивалентности), ибо наличие глобальных таких констант на уровне неймспейса не должно лишать нас определять константы на уровне типа (по соображениям уменьшения области видимости).