Cdecl NEWS -- history of user-visible changes.

Copyright (C) 2017  Paul J. Lucas, et al.
See the end of the file for license conditions.

Note: over its 30+ year history, cdecl has never had good version numbering.
For changes in a particular version where the version number is unknown, the
version's author is given instead.  For the full (known) list of authors along
with their complete changes, see the AUTHORS file.

-------------------------------------------------------------------------------

* Changes in Cdecl 4.4.2

** Fixed declare of function with an invalid argument
A declaration like:
    declare f as function (x as unknown_type)
now correctly reports the unknown type.


* Changes in Cdecl 4.4.1

** Fixed typedef of pointer-to-function
A typedef like:
    typedef void (*f)(int)
now works correctly.

** Added CONFIGURATION FILE section
The cdecl(1) man page now contains a CONFIGURATION FILE section.


* Changes in Cdecl 4.4

** Added C++ attribute specifier support
The C++ attrribute specifiers carries_dependency, deprecated, noreturn,
maybe_unused, and nodiscard are now supported.


* Changes in Cdecl 4.3

** Added C99 _Imaginary number support
C99 _Imaginary number declarations are now supported.

** External
The keyword "external" is now a synonym for "extern".

** More English for explain
More English synonyms are used in explanations, e.g.:
    declare x as automatic
    declare x as constant int
    declare x as enumeration E
    declare x as structure S


* Changes in Cdecl 4.2

** Added noexcept and throw() support
Function declarations may now include exception specifications.

** Fixed handling of leading whitespace in command-line argument
The unusual case of:
    cdecl ' declare x as int'
i.e., a quoted argument having leading whitespace, is now handled correctly.


* Changes in Cdecl 4.1

** New C11 standard atomic types
The following C11 atomic types are now supported via the new typedef command:
atomic_bool, atomic_char, atomic_schar, atomic_char16_t, atomic_char32_t,
atomic_wchar_t, atomic_short, atomic_int, atomic_long, atomic_llong,
atomic_uchar, atomic_ushort, atomic_uint, atomic_ulong, atomic_ullong,
atomic_ptrdiff_t, atomic_size_t, atomic_intmax_t, atomic_intptr_t,
atomic_uintptr_t, atomic_uintmax_t, atomic_int_fast8_t, atomic_int_fast16_t,
atomic_int_fast32_t, atomic_int_fast64_t, atomic_uint_fast8_t,
atomic_uint_fast16_t, atomic_uint_fast32_t, atomic_uint_fast64_t,
atomic_int_least8_t, atomic_int_least16_t, atomic_int_least32_t,
atomic_int_least64_t, atomic_uint_least8_t, atomic_uint_least16_t,
atomic_uint_least32_t, and atomic_uint_least64_t.

** Fixed typedef and define commands with storage classes
Typedef and define now prohibit storage classes, e.g.:
    typedef static int sint;
is now correctly reported as an error.


* Changes in Cdecl 4.0

** Added C++17 support
Specifically, inline variable declarations are now supported.

** New typedef and define commands
New typedef gibberish and define english commands have been added to allow new
types to be defined that can then be used in subsequent declarations and
explanations.

** New C99 standard types
The following C99 types are now supported via the new typedef command:
int8_t, int16_t, int32_t, int64_t, int_fast8_t, int_fast16_t, int_fast32_t,
int_fast64_t, int_least16_t, int_least32_t, int_least64_t, int_least8_t,
intmax_t, intptr_t, ptrdiff_t, uint8_t, uint16_t, uint32_t, uint64_t,
uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t, uint_least8_t,
uint_least16_t, uint_least32_t, uint_least64_t, uintmax_t, and uintptr_t.

** New --no-typedefs/-t command-line options
Either of these options suppresses the definition of the standard C99 types.

** Reads configuration file
Upon start-up and if it exists, reads ~/.cdeclrc (by default) for user-defined
typedef or define commands.

** New --config/-c command-line options
These options specify an alternate configuration file to read upon start-up.
As a result, the -c option in earlier versions of cdecl used to specify when to
colorize output has been renamed to -k.

** New --no-config/-C command-line options
These options suppress the reading of a configuration file, even one explicitly
specified via --config/-c.

** New show command
A new show command has been added to show the definition of either predefined
or user-defined types.

** Register warning
The use of "register" now triggers a warning in C++11 and later.


* Changes in Cdecl 3.6

** First word of first argument
The first word of the first non-option command-line argument is now also
checked to see if it's a command thus allowing fully quoted strings:
    $ cdecl 'explain int *const p'


* Changes in Cdecl 3.5

** Added ssize_t
Similar to size_t, support for ssize_t has been added.


* Changes in Cdecl 3.4.1

** Fixed new-style casts C++ version
New-style casts are now permitted as far back as C++98.


* Changes in Cdecl 3.4

** Static & type-qualified arrays
Added support for C99 static and type-qualified array function arguments, e.g.:
    void f( int a[static const 10] );

** Variable length arrays
Added support for C99 variable length array function arguments, e.g.:
    void f( int a[*] );
    void g( int a[const *] );

** Help command-line argument
Now prints the help message and exits if the first command-line argument is
"help".

** Fixed reference to array
The generated gibberish for "reference to array" has been fixed.


* Changes in Cdecl 3.3

** Help command-line option
Added the command-line options of -h or --help that prints the usage message.

** Fixed const pointers to members
Explaining const/volatile pointers to members now works.


* Changes in Cdecl 3.2

** C++ new-style casts
Added support for C++ new-style casts.

** Language-sensitive autocompletion
Autocompletion is now language-sensitive in that it will not offer completions
that are not valid in the current language.

** Context-sensitive autocompletion
Autocompletion is now slightly more context-sensitive in that it will offer
only command keywords for the first word in the input.

** Fixed command-line error printing
Command-line input is now printed when there's an error.


* Changes in Cdecl 3.1.5

** Fixed color prompt caret position
The position of the caret in error messages when using color prompts has been
fixed.


* Changes in Cdecl 3.1.4

** Fixed cv-qualifier in help
The <cv-qualifier> in the help text was missing '>'.


* Changes in Cdecl 3.1.3

** Fixed synonyms in explain
Explanations no longer wrongly allow English synonyms.


* Changes in Cdecl 3.1.2

** Fixed declarations with storage-class
Declarations like:
    declare x as static pointer to function returning int
    declare x as type pointer to function returning int
are fixed.


* Changes in Cdecl 3.1.1

** Parallel builds
Parallel builds are fixed.

** Manual page caveats
Added additional caveats: qualified C++ data members or member functions are
not supported.


* Changes in Cdecl 3.1

** Ref-qualifiers
Now supports C++11 function ref-qualifiers.

** Installs c++decl
A "make install" will now also create c++decl as a symbolic link to cdecl.


* Changes in Cdecl 3.0.1

** Renamed --disable-debug to --disable-cdecl-debug
Renamed this configure option to avoid clash with conventional --disable-debug
option.


* Changes in Cdecl 3.0

** GNU Autotools
The GNU Autotools suite is now used to build.

** GNU-style test suite and many more tests
There are now over 500 unit tests that can be run via "make check".

** More semantic checks
Many more semantic checks have been added to disallow invalid declarations.

** Long command-line options
Long (GNU-style) command-line options, e.g., --language, are now accepted.

** Multi-line input
Long commands can now be given across multiple lines by escaping the newlines
with a backslash.

** More C and C++ versions
Now distinguishes among K&R C, C89, C95, C99, C11, C++98, C++03, C++11, and
C++14.

** More types
Now supports _Atomic, bool, char16_t, char32_t, complex, noreturn, restrict,
thread_local, and wchar_t.

** Inline functions
Added inline function support.

** Function arguments
Added register and variadic function argument support (independently).

** Typedef declarations
Added typedef declarations (independently).

** C++ member functions
Added final, friend, const, override, volatile, virtual, and pure virtual C++
member function declaration support.

** C++11 features
Added C++11 auto, constexpr, enum class, mutable, rvalue references, and the
function trailing return-type syntax.

** Optional returning
In pseudo-English for functions, the "returning" clause is now optional and
equivalent to returning void.

** Number bases
Binary, octal, and hexadecimal numbers can now be used for array sizes.

** Better warning an error messages
Warning and error messages are now better, complete with location information
and color.

** Comments
C /*...*/ and C++ // comments are now ignored.

** No cdecl reserved words in C declarations
Reserved words that are part of cdecl's pseudo-English are no longer considered
such when explaining C or C++ declarations.

* Revamped manual page.
The cdecl(1) manual page has been revamped.


* Changes in Cdecl 2.5-blocks

** Blocks syntax
Added support for Apple's "blocks" syntax per N1370 "Apple’s Extensions to C"
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1370.pdf>.


* Changes in Cdecl 2.5

** GNU readline
Now using GNU readline (when available) for command-line editing.

** Prompt/Noprompt commands
New "prompt" and "noprompt" commands are available.


* Changes by Tony Hansen

** Improved grammar
More parts can be missing during explanations.

** Variadic arguments
Functions can now accept a variadic argument.


* Changes by Alexander Dupuy

** Additional K&R C checks
Now warns about use of signed or void in K&R C.

** Better C++ reference support
Better semantic checking on C++ references is now done.

** Const/volatile
Const and volatile function pointers are now supported.


* Changes by Merlyn LeRoy

** Extern, register, and static
Added extern, register, and static support.

** Alternate invocation
Cdecl can now be invoked as cast, declare, or explain from the command-line.


* Changes in Cdecl 2.0

** C++
C++ declarations are now supported.

** Create program at runtime
The "Create program" feature is now selectable at runtime.

** File input
Cdecl can now parse input from files in addition to standard input.

** Initial help message
When starting, cdecl now prints a help message.

** Prompt
Now displays a prompt when either standard input is connected to a TTY or when
in interactive mode.

** More command-line options
Cdecl now has the additional command-line options of -a, -r, -p, -c, -d, -D,
-V, -i, and -+.

** Set options
A new "set options" command is available.

** Exit/Quit command
New "exit" and "quit" commands are available.

** Synonyms
Now supports synonyms for some pseudo-English words.


* Changes by David Wolverton

** Typedef declarations
Added typedef declarations.

** Noalias removal
Support for noalias has been removed.


* Changes by <unknown author>

** Hints
For some errors, a hint about a possible fix is now printer.

** Function arguments
Now accepts function arguments.

** Explain casts
Added ability to explain casts.

** Create program
Added #ifdef to emit either a semicolon (for variables) or braces (for
functions) afterwards.


* Changes in Cdecl 1.0

** Initial version

-------------------------------------------------------------------------------
The file is part of Cdecl.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
