Перечитывал статью "Современное ИТ: индустрия и образование. Обзор языка Ada" С. И. Рыбин.
Там есть такой абзац: "Что такое тип данных? Вы же знаете, что это такое, попробуйте сказать это одним
предложением. (молчание) - "Область занимаемой памяти?" Отлично, варианты ещё
есть? (молчание) Вот смотрите - вы знаете, что такое тип данных. Единственная
версия - область занимаемой памяти. Я вам дам вторую версию: множество значений
при совокупности операций. Оно вам нравится как - больше, меньше? - "Ну, наверное,
надо еще знать, как оно представляется в памяти..." А вот теперь я вам скажу такую
вещь, что тип данных на самом деле есть описание содержательной роли объектов
данных, которую они играют в программе. Как вы на это смотрите? Концепция строгой
типизации, она вообще зачем нужна? Например, вы пишите некую программу -
автопилот чего-то, что летает. У этого автопилота есть понятие высоты и понятие
скорости. Они есть, если говорить про область памяти, если говорить про множество
значений при совокупности операций - то это число с плавающей точкой. Правильно? А
если говорить про содержательную роль, то это высота и скорость. Если вы
описываете разные типы данных для высоты и скорости, зачем вы это делаете? А
чтобы, упаси Бог, в первом часу ночи, когда вы в бреду горячечном, не успеваете -
если вы случайно высоте скорость присвоите, что будет? Если у вас это область
памяти - всем на это наплевать. Если у вас множество значений при совокупности
операций - всем наплевать. Если у вас разные содержательные роли, то вас должен
поймать компилятор. Именно для этого нужна концепция строгой типизации. Чтобы этой
вашей ошибке не дать дойти до работающей программы, чтобы вас отругали раньше. И
чем раньше вас обругают - тем легче вам будет жить...".
После чего я попробовал написать следующий код:
Код:
MODULE TestTypes;
TYPE
Height = REAL;
Speed = REAL;
PROCEDURE Do*;
VAR
h: Height;
s: Speed;
BEGIN
s := 1000;
h := s;
END Do;
END TestTypes.
Все нормально откомпилировалось. Компилятор меня не "поймал".
Может быть есть какая-нибудь обция компилятора, которая отлавливает присваивание одного типа другому?
(BlackBox 1.6 rc6)