Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Существуют ли языки программирования, позволяющие присваивать численным переменным не только значение, но и размерность?

ПрограммированиеИнформатика+1
Вадим Романский
  ·   · 3,5 K
Веб-разработчик, геймер, специалист по этике  · 15 окт 2021
Отличный вопрос, и ответ на него, насколько мне известно, "нет". Традиционно на уровне языка среди атомарных типов определяются просто "числа", а конкретный смысл этих чисел остаётся за разработчиком.
Термин, который вам нужно искать, называется strong typedef. Вы можете начать вот с этого вопроса на stackoverflow: https://stackoverflow.com/questions/376452/enforce-strong-type-checking-in-c-type-strictness-for-typedefs
Для решения вашей конкретной задачи, чтобы можно было объявить разные типы у двух числовых переменных и компилятор ловил места, где мы смешиваем использование этих переменных, используется чаще всего боксинг в том или ином виде. Для большинства мейнстримных языков вы можете найти библиотеку для этого, и не одну. Но использовать такие значения будет, конечно, не так удобно, как нативные атомарные типы данных.
Боксинг выглядит так. Объявляется класс, членом этого класса объявляется число. Идентификатором размерности будет являться либо само название класса (например, мы объявляем `class MetersInSecond { int value; }`), либо второй член этого класса (например, мы объявляем `class Speed { int value; Dimension dimension; }` и при создании объектов этого класса указываем размерность: `Speed speedInMps{0.05,  Dimension.SPEED_IN_METERS_IN_SECOND}`). Конечно же, вам придётся все математические операции объявить для этих новых классов самому.
В Haskell вы можете объявить новый тип, и добавить его инстансы к тем же классам типов, что и другие числа: Ord, Num, и все соответствующие операторы переопределить. Проверка типов будет работать так же хорошо, как и на встроенных Integer и Rational, использовать такие значения будет так же просто. Но это всё равно довольно много работы вручную.
Увлекаюсь естественными науками и математикой...  · 15 окт 2021
Во всех серьёзных математических пакетах предусмотрены и встроенные средства программирования, и возможность работы с размерностями через подгрузку тех или иных библиотек. В Mathematica для работы с размерностями требуется... Читать далее
про математику не знал, спасибо. Но мне интересны обычные языки. Составные типы это хорошо, но это ж сколько... Читать дальше
Погромист на C#  · 19 окт 2021
Если под размерностью имеется в виду единица измерения, то например в F# есть такое. Аналогичная функция должна быть во многих языках для научных вычислений. Также это может быть реализовано через паттерн newtype - это когда мы... Читать далее
1 эксперт согласен
Спасибо, теперь буду знать.
)
Программист, преподаватель программирования...  · 21 нояб 2021
Для начала, язык C++ позволяет реализовать библиотечную поддержку размерностей. Вроде, они есть в библиотеке boost, среди других ответов была ссылка на библиотеку с единицами Си https://github.com/bernedom/SI В стандарте C++ и... Читать далее
Научные заметки о жизни: zen.yandex.ru/id/5c434983...  · 16 окт 2021
Такой механизм был предусмотрен еще в Алголе-68. Увы, международный комитет по созданию языка себя не оправдал. Туда было натолкано еще много разного и реализация оказалась слишком сложной. В современных языках можно воспользова... Читать далее
2 эксперта согласны
достоверно сказано и об объектах и производительности
Разработчик встроенных систем, немного радиолюбите...  · 19 окт 2021  · vladimir-coslow.narod.ru/index.html
1. Размерность переменных в смысле количества измерений массива существует в любом высокоуровневом языке программирования, кроме может быть Бейсика. Поэтому думаю, что вопрос был в другом смысле. 2. Размерность переменных в... Читать далее
Чтобы ни дня в жизни не работать, на практике совмещаю работу с хобби.Перейти на vladimir-coslow.narod.ru/index.html
Наука, критическое мышление. Инженер Вселенной.  · 15 окт 2021  · lytkins.ru
В смысле? Переменная в любом языке это указатель на ячейку оперативной памяти, и только. В языке C (Си) много интересного по работе с указателями.
2 эксперта согласны
а в каком-нибудь высокоуровневом языке она может обладать еще миллионом дополнительных свойств. Например как... Читать дальше
Программист. Интересна физика  · 15 окт 2021
Я только недавно узнал это слово "размерность". Насколько я понимаю, размерности это метры, граммы, секунды и т.д. Если так, то получается что вам нужно чтобы одной переменной соответствовало не одно число, а число и текст... Читать далее
2 эксперта согласны
я хочу чтобы компилятор ругался если я буду складывать метры с килограммами. Так что просто введение дополнительных... Читать дальше
IT, телеком, телефония, базы данных, интеграционны...  · 22 окт 2021
Нет. Языки не развиваются в этом направлении. В решительном большинстве языков программирования есть арифметические типы и есть нативная реализация операций над ними. Эти типы часто опираются на архитектуру процессора и у... Читать далее
1 эксперт не согласен
Существует язык программирования F#, где эта функция уже реализована.
)
вероисповедание - симпатия к православному язычест...  · 16 окт 2021
ассемблер - можно посредством макросов перегрузить имеющиеся директивы резервирования и определения данных или создать подобие собственных директив так чтоб к ним добавилась переменная времени компиляции(точнее переменная этапа... Читать далее
1 эксперт не согласен
Автор не ответил на вопрос.
)