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).

1. Підтримувані платформи

  • 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

2. Підтримка операційних систем

  • 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 і т. п.


3. Підтримка мовних конструкцій

  • З стандартного 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 - видає час за певними правилами