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

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

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

ПрограммированиеИнформатикаЯзыки программирования
Вадим Романский
  · 3,7 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 для работы с размерностями требуется использовать подпакет PhysicalConstants из "Разного", для Matlab есть Simulink, в Maple можно подгружать любые системы измерений. Что касается языков... Читать далее
про математику не знал, спасибо. Но мне интересны обычные языки. Составные типы это хорошо, но это ж сколько... Читать дальше
Погромист на C#  · 19 окт 2021
Если под размерностью имеется в виду единица измерения, то например в F# есть такое. Аналогичная функция должна быть во многих языках для научных вычислений. Также это может быть реализовано через паттерн newtype - это когда мы создаём новый тип, в котором будет только одно поле с нашим числом - так, например, часто делают в Rust, тк его компилятор достаточно умён... Читать далее
1 эксперт согласен
Спасибо, теперь буду знать.
)
Программист, преподаватель программирования, интересуюсь формальными и естественными...  · 21 нояб 2021
Для начала, язык C++ позволяет реализовать библиотечную поддержку размерностей. Вроде, они есть в библиотеке boost, среди других ответов была ссылка на библиотеку с единицами Си https://github.com/bernedom/SI В стандарте C++ из размерностей есть только размерности для времени (всякие секунды-наносекунды), они используются для всевозможных таймеров. Поддержка... Читать далее
Научные заметки о жизни: zen.yandex.ru/id/5c43498395753900ac66852d  · 16 окт 2021
Такой механизм был предусмотрен еще в Алголе-68. Увы, международный комитет по созданию языка себя не оправдал. Туда было натолкано еще много разного и реализация оказалась слишком сложной. В современных языках можно воспользоваться механизмом объектов. Это резко снизит производительность некоторых вычислительных алгоритмов, но действительно позволит контролировать... Читать далее
2 эксперта согласны
достоверно сказано и об объектах и производительности
Разработчик встроенных систем, немного радиолюбитель.   · 19 окт 2021  · vladimir-coslow.narod.ru/index.html
1. Размерность переменных в смысле количества измерений массива существует в любом высокоуровневом языке программирования, кроме может быть Бейсика. Поэтому думаю, что вопрос был в другом смысле. 2. Размерность переменных в смысле длины мантиссы и порядка можно было присваивать в языке PL-1, когда еще компьютеры были большими. Не уверен, что такая возможность сегодня... Читать далее
Чтобы ни дня в жизни не работать, на практике совмещаю работу с хобби.Перейти на vladimir-coslow.narod.ru/index.html
Наука, критическое мышление. Инженер Вселенной.  · 15 окт 2021  · lytkins.ru
В смысле? Переменная в любом языке это указатель на ячейку оперативной памяти, и только. В языке C (Си) много интересного по работе с указателями.
2 эксперта согласны
а в каком-нибудь высокоуровневом языке она может обладать еще миллионом дополнительных свойств. Например как... Читать дальше
Программист. Интересна физика  · 15 окт 2021
Я только недавно узнал это слово "размерность". Насколько я понимаю, размерности это метры, граммы, секунды и т.д. Если так, то получается что вам нужно чтобы одной переменной соответствовало не одно число, а число и текст. Допустим, число 10 и текст "метры". Во всех языках программирования есть массивы и объекты. С их помощью можно создать связь между двумя... Читать далее
2 эксперта согласны
я хочу чтобы компилятор ругался если я буду складывать метры с килограммами. Так что просто введение дополнительных... Читать дальше
IT, телеком, телефония, базы данных, интеграционные решения, естествознание, образование  · 22 окт 2021
Нет. Языки не развиваются в этом направлении. В решительном большинстве языков программирования есть арифметические типы и есть нативная реализация операций над ними. Эти типы часто опираются на архитектуру процессора и у каждого типа есть диапазон возможных значений. Например, 1 байт (0…255), 1 байт со знаком (в прямом дополнительном коде −128…127). Т.е. высокоуровневые... Читать далее
1 эксперт не согласен
Существует язык программирования F#, где эта функция уже реализована.
)
вероисповедание - симпатия к православному язычеству хобби: программирование/ассемблер/fas...  · 16 окт 2021
ассемблер - можно посредством макросов перегрузить имеющиеся директивы резервирования и определения данных или создать подобие собственных директив так чтоб к ним добавилась переменная времени компиляции(точнее переменная этапа ассемблирования), такая переменная не пойдет в выходной файл, но она может участвовать в вычислениях на этапе ассемблирования. Далее нужно за... Читать далее
1 эксперт не согласен
Автор не ответил на вопрос.
)