Visual Prolog 8 New Features
Presenters is a new feature in Visual Prolog that is used for creating "nice" presentation of data. It can be used when writing data, but more importantly it is used by the debugger to provide a much more programmer friendly presentation of complex data structures.
- A new Presenters facility for improved debugging experience and runtime presentation of data.
- A new Functor Domain Versioning facility with attributes [default] and [retiredFunctor].
- Late initialization of fact variables and new attribute [immediate] for enforcing immediate fact variable initialization.
- A new otherwise operator.
- New attribute [classInitializer] for initializing classes.
- New attribute [compiletimeSetting] specifuing that a constant is used as a compile time setting.
- New built-in predicate fact_address/1.
- New built-in reflection predicates typeLibraryOf/1 and typeDescriptorOf/1.
- The type system now allows structural subtyping.
Notice that some PFC changes only apply to the Commercial Edition, because the relevant part of the software is not present in the Personal Edition.
- Several data structures (notably set and map structures) have presenters attached
- Asynchronous programming support with future and promise classes (pfc\asynchronous\future)
- Asynchronous socket support (pfc\asynchronous\asyncSocket & pfc\asynchronous\asyncSocketListener)
- The low level ioCompletionPort has been superceded by the the higher level threadpool
- http server fuctionality has been moved from the ioCompletionPort to the threadpool
- http server have extended with asynchronous webSocket support
- Library support for logging with several different loggers and an XML based configuration system
- Support for accessing and manipulating Windows Active Directory (pfc\windowsApi\activeDS_api)
- Windows compression API support
- Binding to Microsoft Message Queue (pfc\windowsApi\msmq_api)
- Support for hashing data (pfc\hash)
- Segmented memory has been added to avoid huge memory alloctions (pfc\memory\segmented)
- String and binary streams has been updated to use segmented memory internally to avoid huge memory allocations
- New multi thread synchronization support (pfc\multithread\atomic & pfc\multithread\compareAndSwap)
- Non-blocking (compare and swap) synchronized sets and maps (setM_redBlack_cas & mapM_redBlack_cas).
- Blocking synchronized sets and maps (setM_redBlack_block & mapM_redBlack_block)
Vip is a directory (Commercial Edition only) that provides access to certain internal tools and structures
- Most of the LALR Parser Generator is moved to the vip directory, so the vipLalrGen demo project in itself contains very little code.
The IDE supports automatic formatting of source code. The feature can be applied manually on the active editor using Edit -> Format File Ctrl+Alt+T, but it can also be switched on as a project setting on Project -> Settings... Alt+F7 -> Build Options.
When creating a new project the option is initially switched on for that project.
- Presenters are used to provide programmer friendly view of program data.
- The LALR Parser Generator is updated to automatically generate a lexer from the grammar specification.
- PIE: Support for integer64
- vipPP demo for pretty printing Visual Prolog source code (used for formatting in the IDE)
- Demo project for the logging tool
- webService demo project that partly replaces the webRPC demo; it has a better structure and contains webSocket demonstration, but does not exist as an isApi version, since webSockets are not supported for isApi.
Build 801 mainly contains bug fixes as listed below.
- Problem with scopeLinker
- Problem with incompatible types
- Internal error in normalization
- Compilation order bug
- Tailcall optimization: register destroyed
- Incorrect static initialization of the fact (fact variable) crypt::blockLenght/0 with not statically initialized fact (fact variable) crypt::hashHandle_fact/0
- Access violation exception in Vip 8 (TCO kind is overidden by mistake)
- Bug in variables reduction (because of constants values)
- Fail warning w654 for a constant referenced from [used] constant
- Wrong This in property (64-bit)
- Automatic Code formatting enhanced