In de zomer van 1965 heeft een groep studenten van de University of Waterloo in Canada een FORTRAN-compiler, met de naam WATFOR, ontwikkeld die draaide op een IBM 7040-systeem. Deze compiler was geschreven in WSL en werd ook geschikt gemaakt voor andere systemen zoals de IBM 360 en de DEC PDP-11. Na vele ontwikkelingen, die op deze pagina na te lezen zijn, is het uiteindelijk doorgegroeid tot Open Watcom. Deze opensource compiler kan broncode in C, C++ en Fortran omzetten naar een uitvoerbaar bestand op het DOS-, OS/2- en Windows-platform. De ontwikkelaars hebben afgelopen week versie 1.7a uitgebracht met de volgende aankondiging op de mailinglijst:
Open Watcom v1.7a was released last week. This release fixes two regressions in 1.7 relative to 1.6. These regressions affected only the 16 bit code generator. No new features or bug fixes are in 1.7a compared to 1.7. Note that Open Watcom v1.7 was released in August. I apologize for the late announcement. The 1.7 release notes are listed below.
The latest version of Open Watcom can be downloaded from here. Please post questions or problems on the Open Watcom newsgroups (information for accessing the groups is on the main Open Watcom page).
Open Watcom v1.7 RELEASE NOTES:
- Functions using the __cdecl calling convention now return floating-point values in FPU registers in 32-bit code. This is the correct behaviour compatible with other compilers.
- The C and C++ compilers now support an include_alias pragma which can be used, among other things, to map long include filenames onto 8.3 names.
In addition, the compilers now support a -na switch to disable the automatic inclusion of _ialias.h (which contains new include_alias pragmas for certain standard headers).
- The C compiler now emits warnings on operations which mix multi-level pointer types such as void** and int**. Previously a warning was only emitted in ANSI mode. Note that while void** is not assignment compatible with int**, void* is. The new stricter behaviour is in line with most other C compilers and helps users write cleaner and more portable code.
- The C compiler now warns (W400) when an expression of plain char type is used as array index. Because the sign of plain char changes depending on compiler choice and settings, using plain char as array index is inherently non-portable and likely to cause problems.
- The C compiler now folds constant expression before checking for range overflows etc. This enables the compiler to diagnose constant out of range issues in more cases.
- The C compiler now allows benign variable redefinitions where __near or __far modifiers aren't always explicitly specified but match when current data model is taken into account (eg. 'extern int __near x;' and 'extern int x;' in small data models). The new behaviour is compatible with the C++ compiler as well as with other vendors' compilers.
- The default stack size for 32-bit DOS extended executables has been increased from 4K to 64K. Note that the linker can still set greater or smaller stack size.
- The code generator now produces better 16-bit code for 64-bit math operations
- The code generator no longer incorrectly optimizes out conditionals. The problem only occurred in very rare situations and probably only when doubles were being compared.
- A long-standing problem with use of certain 64-bit constants as results of ternary operators has been fixed.
- The C++ compilers now has a workaround for bugzilla bug #63. The compiler now generates an error message referring to the bug entry rather than crashing.
- The LIBC and CLIB thin netware libraries have been added to the distribution as experimental.
- 32-bit DOS executables now correctly pass environment to child processes started through the spawn family of functions. Previous incorrect behaviour was introduced in version 1.6.
- In the NetWare libraries, __get_stdout with __get_std_stream was causing an infinite recursion. This has been fixed.
- Fixed 8087 emulator/mathlib 80-bit real multiplication if one operator is zero and second is a power of two.
- The _outgtext() function in graph.lib no longer fails on 32-bit targets.
- The Win32 stat() function now returns correct results when it tries to access a file with given name and the directory containing that file also contained a subdirectory with the same name.
- The debugger now supports a "No Source" toggle (right mouse click menu) in the assembly code window to switch on/off associated source code.
- The debugger no longer crashes when tracing F77 programs that use variable-size arrays. This only applies to DWARF debugging information (which is used by default).
- The debugger now correctly displays multi-dimensional Fortran arrays when DWARF debug information format is used (which is used by default).
- The debugger can now display [partial] strings in Fortran code when the string length exceeds the debugger's internal limit. The internal limit has also been increased from 512 to 1024 characters.
- The resource compiler now properly copies non-resident name table when processing LX executables.
- The console version of vi for Win32 no longer quits after Ctrl+Left is pressed followed by any other key.
- WCL now correctly takes options from the environment when there is more then one file to compile.
- The linker now supports a MIXED1632 option to allow mixing of 16- and 32-bit logical segments into a single physical segment in OS/2 LX/LE executables.
- The linker now supports a NOSTUB option for Windows and OS/2 executable formats. This option causes no DOS stub executable to be written to the output image.
- The installer now allows you to disable creating program groups or modifying the startup environment using the /np and /ns switches.