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

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

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

ПрограммированиеИнформатикаЯзыки программирования
Вадим Романский
  · 3,7 K
вероисповедание - симпатия к православному язычеству хобби: программирование/ассемблер/fas...  · 16 окт 2021
ассемблер - можно посредством макросов перегрузить имеющиеся директивы резервирования и определения данных или создать подобие собственных директив так чтоб к ним добавилась переменная времени компиляции(точнее переменная этапа ассемблирования), такая переменная не пойдет в выходной файл, но она может участвовать в вычислениях на этапе ассемблирования.
Далее нужно за счет макросов перегрузить все мнемоники, так чтоб они проверяли наличе этих переменных у операндов.
В виду того что мнемоник операций много (даже тех что можно задействовать под вычисления), а над операндами придется производить сложный разбор (операнды могут быть как регистрами, так и непосредственными значениями, так и ячейками в памяти заключеными в квадратные скобки, и еще перед ними может стоять модификатор переопределения размера, а может и нет), но это лишь шатаный парсинг когда надо добавить в мнемонику какое нибудь эдакое поведение, а туда еще надо добавить проверку переменных времени выполнения. Еще придется учесть что в обработку типов надо будет добавить типы ссылки на типы которые вы хотите добавить, и типы ссылки на ссылки, если и в них есть необходимость.
Все вышеперечисленное просто похоронит препроцессор под нагрузкой на вышеописанные макросы. Данное решение превратится в игрушку - сможете наслаждаться всей красотой задумки на программах с максимум 40 строчками кода, и временем компиляции в минуте на строчку (когда нормально доли секунды ).
Поэтому под ассемблером конечно можно реализовать все - любой синтаксис, любое поведение, но вопрос в цене - сколько ресурсов препроцессора заьерет то или иное удобство.
Кстати, в ассемблере fasmg все инструкции и так реализованы через макросы (а вернее даже через макросоподобные CALM-инструкции, они много быстрее макросов), поэтому разбор операндов каждой инструкции там уже есть, остается дополнить его еще и работой с размерностями.
То что не могут языки высокого уровня всегда могут ассемблеры.
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 эксперт согласен
Спасибо, теперь буду знать.
)
Программист, преподаватель программирования, интересуюсь формальными и естественными...  · 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#, где эта функция уже реализована.
)