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 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)
Может служить
кросс-компилятором
, перенося код между этими системами.
Генерирует код очень высокого качества для всех этих систем.
Является
свободным ПО
в соответствии с
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