Часть 1. Об определениях
Прежде всего, какой язык и реализацию вы называете "паскаль"? Если вы говорите о ISO Pascal , чем он мертв много лет назад. Если вы говорите о каком-либо другом языке или реализации, пожалуйста, предоставьте больше информации.
Во-вторых (как уже упоминалось, Теун Д) нет определения для строгой типизации . Взгляните на статью в Википедии о строгом наборе .
Тем не менее, эти термины получили такое широкое разнообразие значений за короткую историю вычислений, что зачастую трудно понять вне контекста, что означает отдельный автор при их использовании.
Предположим, что мы следуем определению из статьи Лука Карделли «Типовое программирование», описанной ниже на странице Википедии:
Статья Лука Карделли «Типовое программирование» описывает строгую типизацию просто как отсутствие непроверенных ошибок типов во время выполнения. Другими словами, отсутствие непроверенных ошибок времени выполнения называется безопасностью или безопасностью типов; В ранних работах Тони Хоара эта собственность называется охранной.
В любом случае описанное поведение не может быть классифицировано как статическая (или безопасная) дисциплина набора текста. Мне лично очень не нравится этот хммм ... Ну, это не особенность, это ошибка. =) * * Тысяча двадцать пять
Часть 2. Ответ
Я думаю, что проблема не в этой слабой типизации, а в большом разнообразии целочисленных типов, доступных в некоторых языках.
Существуют ли другие языки, которые применяют этот синтаксис, кроме знаменитых C и C ++?
Я думаю, что почти каждый статически типизированный язык с множеством целочисленных типов имеет такое поведение. Было хорошей идеей иметь эти SHORTINTs и весь этот джаз в первые годы для сохранения памяти. Но теперь, когда почти каждый ПК имеет около 1 ГБ и более ОЗУ ... Предположим, у нас есть 1 миллион 4-байтовых INTEGER вместо 2-байтовых SHORTINT. Это всего около 4 МБ ОЗУ вместо 2 МБ. Я думаю, что это разумная цена за то, что ты не описал все это странное поведение, которое ты описал.
Посмотрите на Wirth's Oberon-07 ( Language Report, PDF ). Существует только один целочисленный тип - 32-битный INTEGER.
Также можно упомянуть Python (или какой-то другой современный динамически типизированный язык) с типом int, который представляет числа в неограниченном диапазоне при условии наличия только доступной (виртуальной) памяти.
Итак, вы можете увидеть тенденцию - разнообразие целых чисел - это выживание 70-х годов. =) * * Тысячу сорок-пять
Какие плюсы у этого синтаксиса?
Плюсы - это (вероятно) сокращение многословия. Эти статически типизированные языки уже настолько многословны, что, если мы решим добавить некоторое явное преобразование целочисленных типов, как это сделал Вирт в Oberon-2 (взгляните на функции SHORT () и LONG ()), они станут еще более многословными. В качестве компромисса можно разрешить неявное преобразование. Также во многих языках фактический размер переменных целочисленных типов не фиксирован и отличается от одной реализации к другой. Единственная доступная информация - это размер (сокращение) <= размер (int). В случае равенства явное преобразование выглядит довольно странно. </p>
Часть 3. Дифирамб Оберон-2 =)
Кстати, не слишком настороженно относитесь к Паскалю. Он мертв, но в Оберон-2 Никлаус Вирт исправил свою ошибку.
В главе 6 Language Report вы можете найти информацию о типах. Для нашего обсуждения важное утверждение:
Типы с 3 по 5 являются целочисленными типами, типы 6 и 7 являются действительными типами, и вместе они называются числовыми типами. Они образуют иерархию; больший тип включает в себя (значения) меньший тип:
LONGREAL> = REAL> = LONGINT> = INTEGER> = SHORTINT
В главе 9 мы можем прочитать о назначениях:
Выражение должно быть совместимым с присвоением с переменной
Наконец, в Приложении A:
Назначение совместимо
Выражение e типа Te совместимо по присваиванию с переменной v типа Tv, если выполняется одно из следующих условий:
Те и ТВ одного типа;
Te и Tv - числовые типы, а Tv включает Te ;
...
Итак, мы здесь. Вы не можете назначить выражение INTEGER переменной SHORTINT. Если вам интересно, вы также можете взглянуть на Component Pascal , минорный вариант и доработку Оберона-2. BlackBox Component Builder - это IDE для Windows.
В ответ на комментарий Джастина Смита.
Я удивлен, что он сказал, что больший тип включает в себя (значения) меньший тип: LONGREAL> = REAL> = LONGINT> = INTEGER> = SHORTINT, учитывая, что существуют LONGINTS, которые нельзя выразить как "REAL".
Я немного озадачен вашим заявлением
существуют ДЛИННЫЕ, которые не могут быть выражены как "РЕАЛЬНЫЕ" с
На самом деле на моей машине упомянутая выше IDE имеет
MAX (LONGINT) = 9223372036854775807
MAX (REAL) = 1,779693134862316E + 308
Таким образом, вы можете представлять каждый LONGINT как РЕАЛЬНОЕ число. Но представление может быть не точным. Я думаю, что вы на самом деле говорили об этом, но мы говорим здесь о преобразовании различных целочисленных типов. И преобразование между РЕАЛЬНЫМИ и ИНТЕГРИАМИ - другая история. История плохих и запутанных имен. РЕАЛЬНЫЕ числа на самом деле не действительные числа с математической точки зрения. Они являются приблизительным представлением. Можно использовать рациональные числа приближение (сохраняя числитель и знаменатель в виде целых чисел), но наиболее распространенным способом является использование приближения с плавающей запятой. Стандарт IEEE для арифметики с плавающей точкой (также известный как IEEE 754) является наиболее широко используемым стандартом для вычислений с плавающей точкой.
Каждый должен знать, что РЕАЛЬНЫЕ числа не являются реальными, но числа указаны в стандарте IEEE 754. И каждый должен прочитать «Что должен знать каждый учёный-компьютерщик об арифметике с плавающей точкой» , чтобы прояснить некоторые моменты.
Но это другая история ... =)