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

Примечания

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