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 — выдаёт время по определённым правилам