GNU Pascal

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
GNU Pascal
Тип компилятор
Разработчик GNU Project
Операционная система кроссплатформенный
Аппаратная платформа кроссплатформенный
Лицензия GPL
Сайт gnu-pascal.de

GNU Pascal — свободно распространяемый компилятор языка Pascal для 32/64-битных платформ, входящий в семейство компиляторов GNU. Реализован в виде фронтенда к GCC (Gnu Compiler Collection), но не является его частью.

Преимущества:

  • Совмещение чистоты Pascal с приёмами реального программирования
  • Поддержка стандартного и расширенного набора Pascal в соответствии с ISO, ANSI и IEEE (ISO 7185:1990, ISO/IEC 10206:1991, ANSI/IEEE 770X3.160—1989).
  • Поддержка других стандартов Pascal (UCSD Pascal, Borland Pascal, частей Borland Delphi, Mac Pascal и Pascal-SC) учитывая принцип разумности и элегантности.
  • Может распространяться по лицензии GNU.
  • Генерирует код и работает на любом компьютере, на котором есть GNU C (а это практически любая 32- и более битная платформа под практически любой ОС: от DOS до HURD).

Поддерживаемые платформы

  • ix86-gnu (GNU Hurd)
  • ix86-linux (Linux 2.x, ELF)
  • i486-linuxaout
  • i486-linuxoldld
  • i386-freebsd1.2.0
  • AIX 4.2.1
  • AIX 4.3
  • DJGPP V2 (Dos)
  • EMX 0.9B (OS/2, Dos)
  • Cygwin32 beta20 и выше (MS-Windows95/98, MS-Windows NT)
  • mingw32 (MS-Windows95/98, MS-Windows NT)
  • MSYS (MS-Windows)
  • mips-sgi-irix5.3
  • mips-sgi-irix6.5
  • sun-sparc-sunos4.1.4
  • sparc-sun-solaris2.x
  • sun-sparc-solaris 2.5.1
  • sun-sparc-solaris 2.6
  • sun-sparc-solaris 7
  • sun-sparc-solaris 8
  • alpha-unknown-linux
  • alpha-dec-osf4.0b
  • s390-ibm-linux-gnu

Поддержка операционных систем

  • GNU Hurd,
  • Linux on Intel, Alpha, S390, и все другие поддерживаемые типы оборудования,
  • Семейство BSD: FreeBSD, NetBSD, OpenBSD,
  • DOS в 32 битном режиме, используя DJGPP или EMX,
  • MS-Windows 9x/NT, используя Cygwin или MinGW или MSYS,
  • OS/2, используя EMX,
  • Mac OS X,
  • MIPS-SGI-IRIX,
  • Alpha-DEC-OSF,
  • Sparc-Sun-Solaris,
  • HP/UX,

Может служить кросс-компилятором, перенося код между этими системами. Генерирует код очень высокого качества для всех этих систем. Является свободным ПО в соответствии с GNU. Совместим с другими средствами отладки и разработки, такими как GNU C, gdb и т. п.

Поддержка языковых конструкций

  • Из стандартного Pascal: Многие компиляторы расширяют синтаксис стандартного Pascal, реализуя, правда, исходный не полностью, упуская очень важные моменты:
    • Поддержка массивов в качестве параметров процедуры/функции в виде
      Arr: array[a..b] of Integer;
      где a и b показывают начало и конец массива Arr.
    • Возможность передачи локальных процедур в качестве параметров с полным доступом ко всем переменным родительской процедуры.
    • Автоматические file, расширяющие возможность процедур Put и Get.
    • Восемь булевых элементов, упакованных в массив или структуру, занимают ровно 1 байт.
    • Поддержка временных файлов: вам не нужно думать об имени файла и его удалении потом.
    • Глобальное goto: Вы можете переходить когда угодно и куда угодно, не ограничиваясь текущей процедурой.
    • Автоматическая настройка параметров и вариантов записей в New.
    • Set без ограничений на размер.
  • Из Extended Pascal:
    • Строки неограниченной длины.
    • ReadStr, WriteStr — запись и чтение в строку, как WriteLn, ReadLn.
    • Системонезависимые time/date-подпрограммы.
    • Итерации по множеству:
      for Ch in ['A' .. 'Z', 'a' .. 'z'] do …
    • Расширенная поддержка множеств.
    • Создание Succ и Pred-функций: Foo := Succ (Bar, 5);
    • Комплексные числа
    • Операторы для возведения в степень с поддержкой комплексных чисел
    • Начальная инициализация переменных
    • Функции могут возвращать массивы и структуры
    • Поддержка модулей
    • Поддержка не-десятичных чисел в стиле: основание#число
    • MinReal, MaxReal, EpsReal, MaxChar — константы
    • Поддержка динамических массивов без грязных трюков
    • Локальные параметры могут иметь задаваемый только при входе в процедуру размер (динамический размер)
    • Доступ лишь к части массива в левой части присваивания
      Arr1(3..5) := Arr(4..6);
  • Из Borland Pascal:
    • Поддержка units, objects и т. п. Даже трюки в стиле absolute сделаны портируемыми.
    • Поддержка полного набора стандартных units
    • Поддержка сетевого CRT: программа может выполняться на одном компьютере, а результат её работы быть виден на другом, здесь есть также поддержка перекрывающихся окон
    • Процедура Random производит даже такую же последовательность случайных чисел, как и BP Random()
    • Поддержка процедурных переменных в стиле BP
    • Поддержка массивов и процедур, позволяющих вести доступ к I/O портам процессора
    • Распространяется с binobj программой, работающей как на BP
  • Из Delphi
    • Абстрактные типы и методы
    • Комментарии в стиле //
    • Пустой список параметров: ()
    • Поддержка утверждений (assertions)
    • Initialize и Finalize для управления переменными на низком уровне
    • Секции Initialize и Finalize для модулей
  • Из Pascal-SC
    • Определяемые пользователем операторы. Например, сложение векторов простым оператором «+».
  • GNU расширения:
    • 64-битные знаковые и беззнаковые целочисленные типы
    • Поддержка выполнения кода других языков программирования
    • Вставка Pascal-кода в другие языки программирования
    • Поддержка процедур BitSizeOf(), ConvertFromBigEndian() и т. п. для повышения портируемости программ на другие платформы
    • Поддержка DirSeparator, PathSeparator, GetTempDirectory сделают программу более переносимой
    • PExecute — переносимый запуск программ для многозадачных систем
    • Функции FSplit, FSearch, FExpand — знают об особенностях ОС
    • FormatTime — выдаёт время по определённым правилам

См. также

Ссылки

  • Сайт GNU Pascal
  • Standard Pascal — Сопутствующие материалы и история исходного, стандартного языка Pascal
  • Pascal User’s Group Newsletters — Ресурс, посвящённый ранней истории языка, содержащий много писем Вирта и других разработчиков, касающихся языка Pascal
  • Pascal and its Successors — Статья Никлауса Вирта о разработке языков Pascal, Modula-2 и Oberon