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

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

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

ПрограммированиеИнформатикаЯзыки программирования
Вадим Романский
  · 2,8 K
Программист, преподаватель программирования, интересуюсь формальными и естественными...  · 21 нояб 2021
Для начала, язык C++ позволяет реализовать библиотечную поддержку размерностей. Вроде, они есть в библиотеке boost, среди других ответов была ссылка на библиотеку с единицами Си
В стандарте C++ из размерностей есть только размерности для времени (всякие секунды-наносекунды), они используются для всевозможных таймеров. Поддержка физических размерностей есть пока только в сторонних библиотеках.
В среде для математических расчётов Mathcad есть проверка размерностей и она интегрирована в систему типов среды (а типы там выводятся по алгоритму Хинлди-Милнера — это очень круто для тех, кто в теме). Доступны все единицы системы Си, можно добавлять свои единицы. Язык программирования там довольно необычный — вводится не как текст ASCII, а как математические формулы в старых версиях MS Word, но это тоже полноценный язык программирования с функциями высшего порядка.
На Хабре можно найти статью разработчика компилятора языка программирования PL/1 Дмитрия Караваева, который добавил в свой язык проверку физических размерностей:
В комментариях к этой статье дали ещё несколько ссылок на библиотеки для C++, Python и Julia:
На сколько мне известно, компилятор PL/1, разрабатываемый Дмитрием Караваемым, используется только в том отделе, где он работает.
Вывод в том, что языков со встроенной поддержкой не так много, но они есть (Mathcad, компилятор PL/1, используемый только в одном отделе одного НИИ). В ряд языков можно добавить поддержку размерностей на уровне библиотеки. Но по факту поддержка физических на уровне языка программирования не так уж и нужна, чтобы её реализовывать.
Веб-разработчик, геймер, специалист по этике  · 15 окт 2021
Отличный вопрос, и ответ на него, насколько мне известно, "нет". Традиционно на уровне языка среди атомарных типов определяются просто "числа", а конкретный смысл этих чисел остаётся за разработчиком. Термин, который вам нужно искать, называется strong typedef. Вы можете начать вот с этого вопроса на stackoverflow: https://stackoverflow.com/questions/376452/enforce-stro... Читать далее
Увлекаюсь естественными науками и математикой. Разбираюсь в производстве корпусной...  · 15 окт 2021
Во всех серьёзных математических пакетах предусмотрены и встроенные средства программирования, и возможность работы с размерностями через подгрузку тех или иных библиотек. В Mathematica для работы с размерностями требуется использовать подпакет PhysicalConstants из "Разного", для Matlab есть Simulink, в Maple можно подгружать любые системы измерений. Что касается языков... Читать далее
про математику не знал, спасибо. Но мне интересны обычные языки. Составные типы это хорошо, но это ж сколько... Читать дальше
Погромист на C#  · 19 окт 2021
Если под размерностью имеется в виду единица измерения, то например в F# есть такое. Аналогичная функция должна быть во многих языках для научных вычислений. Также это может быть реализовано через паттерн newtype - это когда мы создаём новый тип, в котором будет только одно поле с нашим числом - так, например, часто делают в Rust, тк его компилятор достаточно умён... Читать далее
1 эксперт согласен
Спасибо, теперь буду знать.
)
Научные заметки о жизни: 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 эксперт не согласен
Автор не ответил на вопрос.
)