Node:News, Next:FAQ, Previous:Highlights, Up:Top
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 (@).
EQPad etc.) (fjf873.pas)
-W[no-]interface-file-name
SeekEOF and SeekEOLn use Input implicitly when no file is given (fjf871.pas) (B)
with statements (Sun Pascal) (tom6.pas)
--sun-pascal
-W[no-]field-name-problem removed, @)
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, @)
+ 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) (@)
;) (fjf860*.pas)
--borland-pascal mode, Assign unconditionally (re-)initializes its file parameter (fjf858.pas)
gpm files anymore (instead, each module has an implicit modulename-all.gpi interface which is a regular gpi file)
static in C sense), omit them if easily possible
-W[no-]parentheses (fjf848*.pas)
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)
{$debug-statement} (should not be necessary anymore, now that debug info mostly works)
--[no-]longjmp-all-nonlocal-labels
iocritical (fjf824*.pas), ignorable (fjf839*.pas) for routines
goto (never worked for nonlocal goto into the main program, implementing it would be quite difficult, probably not worth it) (@)
AnyFile for parameters and pointer targets (fjf821*.pas)
TimeStamp is now a packed record (E)
--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)
-W[no-]local-external (implied by -Wall)
pack-struct does not imply bit-level packing anymore (only explicit packed records and arrays do) (@)
--[no-]ignore-packed (--ignore-packed is the default in BP mode) (fjf796*.pas) (B) (@)
--maximum-field-alignment=N
{$[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 attributes (@)
--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)
definec, macro, undefc, ifc, ifoptc, elsec, elifc, endc, errorc (treated as equivalent to the corresponding existing ones) (M)
implementation part (M)
--vax-pascal, --mac-pascal
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)
gpidump and binobj are installed with GPC (B)
-W[no-]identifier-case, -W[no-]identifier-case-local (fjf751*.pas)
$R foo, equivalent to $L foo.resource (B)
--[no-]borland-char-constants (now simply coupled to dialect options) (@)
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)
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 (@)
--[no-]ignore-garbage-after-dot (fjf735*.pas) (@)
-W[no-]implicit-io (fjf734*.pas)
--enable-keyword, --disable-keyword (fjf733*.pas)
CBoolean (fjf727.pas)
GetMem as a function with one parameter (only the BP compatible usage as a procedure with two parameters remains) (@)
FileMode now requires using the GPC (or, for BP compatibility, the System) unit (@)
DupHandle
__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)
GPC_UNIT_PATH, GPC_OBJECT_PATH
-W[no-]float-equal
--ucsd-pascal
type foo = procedure (Integer, Real) (i.e., without parameter names) (@)
On to CRTSavePreviousScreen
SetUserID, SetGroupID
HeapChecking
Assert; new switches --[no]-assert (also {$C+}, {$C-} for Delphi compatibility) (fjf665*.pas) (D)
ProcessGroup
QuoteEnum
CurrentFunctionName (fjf752.pas)
-e FILE and -E FILE (redirect/append standard error)
Have fun,
The GNU Pascal Development Team