New Features in Visual Prolog 7.4
64 bit programs
The main new feature in Visual Prolog 7.4 is the ability to generate 64 bit programs (Commercial Edition only), making it possible to write programs that exploit more of the computers resources.
Notice to ensure source code compatability between 32 and 64 bit programs a number of types have been changed and it is necessary to update the programs, see Visual Prolog 7.4 Upgrade Notes.
See also 64 bit Windows
Support for exceptions handling improvement (programPoint type and attribute, implicit programPoint argument). See also programPoint.
Syntax & Warnings
- Better handling of comma (,) before then, elseif, else, end if, do and end foreach
- Error c550 for inlining a field from a null pointer
- Warning c647 if bound/1 is applied to a variable which is always free
- Warning if scope is only opened but is not actually used (unused open for class core is ignored). Removing such excessive open-directives makes the Optimal Includes more effective. This warning is switched off by the default (option /w:231 turns it on).
PFC have been updated to be 64 bit compatible. A few packages have not been updated, but have instead been deprecated and replaced by new packages.
- vpiEditor is deprecated (replaced by sciLexer editor)
- regExp is deprecated (replaced by regEx)
- sciLexer New editor control based on the Scintilla editor with lexers (including Visual Prolog lexer).
- webBrowser New control control comprehensive wrapping of the Internet Explorer WebBrowserControl
- Improved clipboard handling (with HTML support)
- ribbonControl and command system and controlSerialization; with a run-time visual designer that simplifies the process of making ribbons
- toolboxControl New control
- headerControl New control
- rebar + statusBar New packages
- shellNotificationIcon for handing notifications in the shells notification area + Demo
- toolTip New package and toolTip functionality on standard controls + Demo
- splitControl New control for multi-split management; with a run-time visual designer that simplifies the process of making splits
- splitterControl New control for the split in windows
- dragNdrop New class for (in-program) drag and drop functionality + Demo
- Object oriented GDI support
- Object oriented GDI+ support for
- gui_native::createDialogIndirectParam Update for font handling
- window::listenUntilDestroy New predicate for listening to an event, but detach the listening when the window is destroyed
- messageLoop for SDI applications
- regEx package based on [www.boost.org/libs/regex boost regular expression library]
- mapM_hash & setM_hash New classes for hash table implementations of maps and sets
- arrayM uses pointer to memory instead of binary: makes it possible to interpret non-binaries as arrays and is more efficient
- arrayM_inline New class for interpretation of C/C++ struct arrays
- arrayM_boolean New class for compact boolean arrays (1 bit per boolean).
- array2M New class for 2 dimensional arrays
- socket New class for object oriented WinSock2 support
- event0 - event7 New classes for general/generic event handling (notify+listener)
- iStream_stream class for mapping a Visual Prolog stream as an IStream com object (CE-only)
- improved ISAPI support
- json (pfc/web/json) and jsonRpc New packages for JSON and JSON RPC 2.0 support (CE-only)
- memory allocate functions with argument for atomic/non-atomic
- ODBC auto parameter binding get the size from the database by means of SQLDescribeParam
- shell_api::sHCreateStreamOnFileEx new predicate for creating an IStream com object from a file
- xhtmlWriter class for writing xhtml/xhtml5 using an xmlWriter
- xmlReader & xmlWriter based on the xmlLite API (CE-only) + Demo
- internetExplorer class for automating an out-of-process Internet Explorer
- New simplified settings dialog
- Add "No To All" button to the dialog for removing file from a project
- Create empty clause if there is compiler error for absent clause for a predicate
- Global unreachability support
- History of Run Arguments
- Improved Browse View
- Improved the manifest handling
- Load browse info in a separate thread (performance optimization)
- SDI applications support
- Tools entries in project-tree popup menu
- Soft/hard breakpoints
- Add current class facts into the variable window
- Show class facts in the Variable Window for a class predicate
- Give names to objects
- Show gmtTimeValue and localTimeValue as dates and times.
- Show the error description for hResult values.
- Watch Window improvement
- Copying the entire debug tree to the clipboard
- Improve memory view for 64bit and break points handling
- win32.lib + win32.x64.lib updated to Windows Software Development Kit (SDK) for Windows 8
- PFC, VPI, IDE: Help button in the title bar
- SolutionManager. A utility for better handling of a collection of projects
- VipBuilder: Add /platform option for target machine
- VPI: Support DDE in SDI application
- PFC: Wrong handling of NULL fields in 64 bit ODBC (gives string right truncation error).
- IDE: PIE exception in IDE when debugging 64 bit programs
Important bug fixes:
- Compiler. Incorrect handling of some special floating-point constants leads to unexpected compile time errors (see Real value 1.#INF is out of the range).
- Compiler. Missing warning for unreachable codes (see Unused Variable).
- Compiler. Ambiguity in webBrowserControl.
- Compiler. Codes generation bug for string comparisson (it can lead to access violation exception at runtime in some cases).
- Compiler. Nested if-then-else expressions can raise unexpected error messages related to the wrong flow patterns.
- Compiler. Unexpected error message for supported interface and inherited class conflict for a generic scope.
- Compiler. No error if constructor is absent for an object class with noDefaultConstructor attribute.
- Compiler. Incorrect warning c231 (scope is opened but not used) in some cases.
- Compiler. Code generation bug for nested finally statements with cuts in the try part (this could could lead to exceptions at runtime in some cases).
- Compiler. Code generation bug for read-only property implemented by a clause with several heads.
- Compiler. Anonymous predicates in both xxx as function and xxx as predicate give declaration conflict.
- Compiler. Incorrect object file if number of fixups exceeds the limit of 0xFFFF (this could lead to the incorrect state of some statically initialized data, like class facts, etc.).
- Compiler. Several bugs in 64bit codes generation.
- Runtime: Bug in symbol comparison.
- IDE: Browse search shows the same predicate many times.
- Debugger: Several bugs related to the Variables view.
- Debugger: Some problems in single step in if-then-else expression.
- PFC: Bug in arrayM_boolean.
- PFC: Some keywords coloring (see Cosmetic detail : guard).
- PFC: Some problems with handling of enter/leave mouse event.
- VPI: Incorrect behavior of predicate getText/1->.
- Vip Linker: It does not accept utf-8 .def files (see Dll - error in file MyDll.def).
The following new feature has been implemented:
- if-the-else expressions
- Condition in if-statement/expression can be nondeterm/multi
- thiscall calling convention
Important bug fixes:
- ChainDB, 64bit: Problems when storing terms in a chain if "in_memory" is used
See External Databases in V7.4 in 64bits
- PFC: Problem with console::setLocation in vip 7.4
- VPI: Incorrect behavior of getText/1->
- Header prints in chinese!?!
+ Some minor bug fixes