Интервальный тип


#1

Почему на Паскале АВС не срабатывает свой интервальный тип, хотя в учебниках он указан, как действующий?


#2

Можно конкретный пример? Не забывайте программный код окаймлять строками, состоящими из трех обратных апострофов (символ, расположенный на клавише ~ и Ё). И второе: это ветка форума по PascalАВС.NЕТ, как Вы можете видеть. Устаревший проект Pascal ABC закрыт в 2008 году (12 лет назад) и более не поддерживается. И третье, учебник по Pascal ABC был только один. Он издавался, если правильно помню, в 2012 году в Белоруссии, поэтому писать во множественном числе (“в учебниках”) некорректно.


#3
var a: 2..5;

begin
  a := 5;
end.

Такой код работает


#4

Если бы он не работал, было бы невозможно описать статический массив. Подозреваю, что это был некорректно сформулированный вопрос школьника. У школьников (да и у студентов тоже, чего греха таить) зачастую “не работает” на самом деле означает “не работает так, как на мой взгляд должен работать”.


#5

Конкретный пример program p1; type p=2…5; var a: p; i:boolean; begin readln(a); i:=a<3; writeln(o) end. По идее, если вводить число, не входящее в интервал типа, то программа должна выдавать ошибку, чего она, в свою очередь, не делает


#6

Понятно, Ксения. Да, такая проверка не делается. Слишком высоки затраты на этапе исполнения. Не делается она и в других паскалях


#7

Прямое подтверждение слов @Admin из Free Pascal:

program Project1;
{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
  T = 2..5;

var
  a: T;

begin
  ReadLn(a);
  ReadLn;
end.       

#8

Нет, Ксения, это Ваша идея.

Компилятор должен не только переводить программу в исполняемый код, он еще обязан делать это по возможности эффективно. Когда Н.Вирт создавал язык, названный им Паскаль, он ввел ограниченный тип, который так и описал:

Тип можно определить, накладывая на другой тип ограничения. Ограничение определяется диапазоном допустимых значений… (цитируется по книге К.Йенсен, Н.Вирт, “Паскаль. Руководство для пользователя и описание языка”, 1982 г.)

По мнению Н.Вирта, ограниченные типы делают программу более наглядной и позволяют (внимание!) “проводить во время выполнения контроль присваиваний”. Но все дело в том, что любой контроль во время выполнения программы, если он не опирается на аппаратуру процессора (т.е. не использует систему аппаратных прерываний), а является программным контролем, драматически замедляет работу откомпилированной программы. Поэтому разработчики компиляторов поначалу делали такой контроль необязательным и включаемым только по специальному запросу, а впоследствии и вовсе от него отказались.

Еще один довод в пользу ограниченных типов - экономия машинной памяти. Это имело смысл несколько десятков лет назад, когда память ЭВМ измерялась единицами мегабайт. Сейчас о какой-то экономии подобного рода говорить смешно.

Как итог, забудьте об “интервальных типах”, как о пережитке прошлого. Не сочтите за рекламу, а просто откройте эту книгу и учитесь писать программы так, как их сейчас принято писать.


#9

Если кому-то интересно, то в Free Pascal они до сих пор используются, как срезы например. Очень удобно получить срез массива, а потом его передать через тип открытого в подпрограмму.


#10

Ну это как Lazarus - “Delphi для неимущих”, так и подобные “срезы”. Вот в PascalАВС.NЕТ что можно сделать с их помощью такого, что нельзя (хуже, некрасивее, …) сделать иным путем?


#11

4 сообщения перенесены в новую тему: Рассуждения о предназначении PascalABC.NET (внимание - религиозные войны!)


#12

спасибо вам большое за ответ


#13

Пожалуйста, обращайтесь)