GNU Pascal – свободно распространяемый компилятор языка Pascal для 32/64-битных платформ, входящий в семейство компиляторов GNU. Реализован в виде фронтенда к GCC (GNU Compiler Collection), но не является его частью.
Поддерживаемые платформы GNU Pascal
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 и выше (Microsoft Windows95/98, Microsoft Windows NT)
mingw32 (Microsoft Windows95/98, Microsoft Windows NT)
MSYS (Microsoft 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 Pascal
GNU Hurd;
Linux on Intel, Alpha, S390, и все другие поддерживаемые типы оборудования;
Семейство BSD: FreeBSD, NetBSD, OpenBSD;
DOS в 32 битном режиме, используя DJGPP или EMX;
Microsoft 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 и т. п..
Поддерживаемые языковые конструкции GNU Pascal
- Поддержка массивов в качестве параметров процедуры и функции в виде Arr: array[a..b] of Integer – где a и b показывают начало и конец массива Arr
- Возможность передачи локальных процедур в качестве параметров с полным доступом ко всем переменным родительской процедуры
- Автоматические file, расширяющие возможность процедур Put и Get
- Восемь булевых элементов, упакованных в массив или структуру, занимают ровно один байт
- Поддержка временных файлов: вам не нужно думать об имени файла и его удалении потом
- Глобальное goto: Вы можете переходить когда угодно и куда угодно, не ограничиваясь текущей процедурой
- Автоматическая настройка параметров и вариантов записей в New
- Set без ограничений на размер
- Строки неограниченной длины;
- 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);
- Поддержка units, objects и т. п.. Даже трюки в стиле absolute сделаны портируемыми.
- Поддержка полного набора стандартных units
- Поддержка сетевого CRT: программа может выполняться на одном компьютере, а результат её работы быть виден на другом, здесь есть также поддержка перекрывающихся окон
- Процедура Random производит даже такую же последовательность случайных чисел, как и BP Random()
- Поддержка процедурных переменных в стиле BP
- Поддержка массивов и процедур, позволяющих вести доступ к I/O портам процессора
- Распространяется с binobj программой, работающей как на BP
- Абстрактные типы и методы
- Комментарии в стиле //
- Пустой список параметров: ()
- Поддержка утверждений (assertions)
- Initialize и Finalize для управления переменными на низком уровне
- Секции Initialize и Finalize для модулей
- Определяемые пользователем операторы. Например, сложение векторов простым оператором «+».
- 64-битные знаковые и беззнаковые целочисленные типы
- Поддержка выполнения кода других языков программирования
- Вставка Pascal-кода в другие языки программирования
- Поддержка процедур BitSizeOf(), ConvertFromBigEndian() и т. п. для повышения портируемости программ на другие платформы
- Поддержка DirSeparator, PathSeparator, GetTempDirectory сделают программу более портабельной
- PExecute – портабельный запуск программ для многозадачных систем
- Функции FSplit, FSearch, FExpand – знают об особенностях операционной системы
- FormatTime – выдаёт время по определённым правилам
Ссылки