Node:News, Next:FAQ, Previous:Highlights, Up:Top

## New Features of GNU Pascal.

GPC's new or changed features since the last (non alpha/beta) GPC release are listed here. Items without further description refer to new routines, variables or options.

Features implemented for compatibility to other compilers are marked with, e.g., `(B)` for BP compatibility.

A few old and obsolete features have been dropped or replaced by cleaner, more flexible or otherwise more useful ones. This might lead to minor problems with old code, but we suppose they're rare and easy to overcome. They are marked with `(@)`.

- trimming string relations as functions (`EQPad` etc.) (fjf873.pas)
- new options `-W[no-]interface-file-name`
- `SeekEOF` and `SeekEOLn` use `Input` implicitly when no file is given (fjf871.pas) (B)
- tagging for `with` statements (Sun Pascal) (tom6.pas)
- new option `--sun-pascal`
- field names and array indices in initalizers are recognized (waldek5*.pas) (options `-W[no-]field-name-problem` removed, @)
- object directives `published`, `public` (both equivalent), `protected` (scope limited to object type and derived object types), `private` (scope limited to current unit/module) (fjf864*.pas) (options `-W[no-]object-directives` removed, @)
- the operator precedence and associativity of `+` and `-` is now as defined in EP by default (and as in BP with `--borland-pascal`) <Pine.LNX.4.44.0210251249500.6181-100000@duch.mimuw.edu.pl> (fjf863*.pas) (@)
- `Integer (16)` etc. changed to `Integer attribute (Size = 16)` (works for integer and Boolean types) (fjf861.pas) (@)
- types can have attributes (note: no preceding `;`) (fjf860*.pas)
- dynamic object methods (fjf859.pas) (B)
- in `--borland-pascal` mode, `Assign` unconditionally (re-)initializes its file parameter (fjf858.pas)
- GPC doesn't use `gpm` files anymore (instead, each module has an implicit `modulename-all.gpi` interface which is a regular `gpi` file)
- make the program/module/unit finalizers non-public (`static` in C sense), omit them if easily possible
- new options `-W[no-]parentheses` (fjf848*.pas)
- non-`interface` modules with empty implementation part (pmod1.pas, fjf843.pas)
- `maximum-field-alignment` and `[no-]field-widths` work as local compiler directives now (fjf842.pas)
- dropped `{$debug-statement}` (should not be necessary anymore, now that debug info mostly works)
- new options `--[no-]longjmp-all-nonlocal-labels`
- object methods can have attributes (fjf826*.pas)
- new attributes `iocritical` (fjf824*.pas), `ignorable` (fjf839*.pas) for routines
- dropped computed `goto` (never worked for nonlocal `goto` into the main program, implementing it would be quite difficult, probably not worth it) (@)
- new type `AnyFile` for parameters and pointer targets (fjf821*.pas)
- `TimeStamp` is now a packed record (E)
- Mac Pascal specific features are supported according to the dialect options (M)
- `--interface-only` does not require `-S` or `-c` anymore (and does not create an object file)
- `initialization`, `finalization` (D)
- `TimeZone` in `TimeStamp` counts seconds east of UTC now (not west, as before) (datetimedemo.pas) (@)
- `export Foo = all (...)` (fjf811*.pas)
- new options `-W[no-]local-external` (implied by `-Wall`)
- type-casts are BP compatible now, in particular, value type-casts between ordinal and real or complex types don't work anymore (B) (@)
- all non-ISO-7185 keywords can be used as identifiers (with two small exceptions) (fjf440.pas)
- `pack-struct` does not imply bit-level packing anymore (only explicit `packed` records and arrays do) (@)
- new options `--[no-]ignore-packed` (`--ignore-packed` is the default in BP mode) (fjf796*.pas) (B) (@)
- new option `--maximum-field-alignment=N`
- new options `{$[no-]pack-struct}` as a compiler directive
- `attribute` for routines doesn't imply `forward` anymore (so you don't have to declare routines twice in a program or implementation part when setting the linker name or some other attribute) (@)
- `static`, `volatile` and `register` for variables and `inline` for routines are no prefix-directives anymore, but `attribute`s (@)
- combining several dialect options (such as `--extended-pascal --borland-pascal`) doesn't work anymore (what should this mean, anyway? Combine the features, but also the warnings from both!?!?!?) (@)
- `external` without `name` defaults to all-lowercase now (@)
- `c`, `c_language` and `asmname` are deprecated (@)
- `external name 'foo'` (fjf780.pas), `external 'libname' name 'foo'` (where `libname` is ignored) (B)
- Mac Pascal directives `definec`, `macro`, `undefc`, `ifc`, `ifoptc`, `elsec`, `elifc`, `endc`, `errorc` (treated as equivalent to the corresponding existing ones) (M)
- units without `implementation` part (M)
- new options `--vax-pascal`, `--mac-pascal`
- attributes `const` for variables and `name` for variables, routines and modules; assembler names and module/unit file names can now be expressions (which must yield string constants) (fjf781*.pas, fjf809*.pas)
- the utilities `gpidump` and `binobj` are installed with GPC (B)
- new options `-W[no-]identifier-case`, `-W[no-]identifier-case-local` (fjf751*.pas)
- new compiler directive `$R foo`, equivalent to `$L foo.resource` (B)
- dropped `--[no-]borland-char-constants` (now simply coupled to dialect options) (@)
- test suite: support progress messages (`TEST_RUN_FLAGS=-p` from the Makefile; `-p` in testgpc); see http://fjf.gnu.de/misc/progress-messages.tar.gz
- `=` and `<>` comparisons of structures (arrays, records, ...) except strings and sets are forbidden now (@) (E)
- irrelevant operands and arguments (e.g.: `foo in []`; `bar * []`; `Im (baz)` if `baz` is of real type) are not necessarily evaluated anymore (which is allowed by the standard); instead, a warning is given if they have side-effects (@)
- accept only one program, unit, module interface or implementation or a module interface and the implementation of the same module in one file; new options `--[no-]ignore-garbage-after-dot` (fjf735*.pas) (@)
- new options `-W[no-]implicit-io` (fjf734*.pas)
- new options `--enable-keyword`, `--disable-keyword` (fjf733*.pas)
- `CBoolean` (fjf727.pas)
- dropped the usage of `GetMem` as a function with one parameter (only the BP compatible usage as a procedure with two parameters remains) (@)
- accessing the variable `FileMode` now requires using the `GPC` (or, for BP compatibility, the `System`) unit (@)
- `DupHandle`
- dropped the predefined dialect symbols `__CLASSIC_PASCAL__`, `__STANDARD_PASCAL__`, `__EXTENDED_PASCAL__`, `__OBJECT_PASCAL__`, `__UCSD_PASCAL__`, `__BORLAND_PASCAL__`, `__DELPHI__`, `__PASCAL_SC__` and `__GNU_PASCAL__` (one can use `{$ifopt borland-pascal}` etc. instead) (@)
- `Succ`, `Pred`, `Inc`, `Dec` for real numbers (fjf714*.pas)
- use environment variables `GPC_UNIT_PATH`, `GPC_OBJECT_PATH`
- new options `-W[no-]float-equal`
- new option `--ucsd-pascal`
- dropped the syntax `type foo = procedure (Integer, Real)` (i.e., without parameter names) (@)
- CRT: new argument `On` to `CRTSavePreviousScreen`
- `SetUserID`, `SetGroupID`
- `HeapChecking`
- new built-in procedure `Assert`; new switches `--[no]-assert` (also `{$C+}`, `{$C-}` for Delphi compatibility) (fjf665*.pas) (D)
- `ProcessGroup`
- StringUtils: `QuoteEnum`
- `CurrentFunctionName` (fjf752.pas)
- TFDD: new unit
- gpc-run: new options `-e FILE` and `-E FILE` (redirect/append standard error)

Have fun,

The GNU Pascal Development Team