GNU Pascal

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

См. также 
 Free Pascal
 GCC

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

Компиляторы Паскаля
Свободные компиляторы и интерпретаторы
Кроссплатформенные реализации языков программирования