Changelog
- Version 1.7 (2023/7/13)
-
Added
- Mercury-like determinism properties. Those are mapped to other existing determinism and non-failure properties as follows: multi is not_fails, semidet is is_det, det is not_fails and is_det.
- New flag param_type_args (control whether parametric type arguments use escaped values or require new type symbols).
- Improved tutorials (using active logic documents) and examples.
- Module unexpansion in warning/error messages predicate and program point assertions.
Fixed
- Avoid NaN in assertion checking summaries.
- Fixes in compile time checks (ctchecks) for false/check cost assertions.
- Automatic domain selection: avoid unavailable domains (and warn user), skip properties with no known domain.
- Fixes in printing program point info.
- Fixed type visibility in output and type simplification (see typeslib_is_visible/2).
- Fixed bug in denormalization of parametric properties (introduced when higher order application switched to natural argument)
- Minor fixes in det and nf, missing cuts, improved documentation.
- More accurate predicate import database (in p_unit).
- Fix in parametric type counter when using lib cache.
- Mark shfret as a domain that supports types.
- Fix gather_measure/7 so that it uses assertion_read/9.
- Add nativeprops when when analyzing with sharing domains, complete determinable/2 to support missing sharing domains.
Improved
- Suppress superfluous ctcheck messages about calls (verified empty calls and calls that come from entries)
- Eliminated extra newlines in assertion checking messages.
- Note message when library cache is not generated.
- Use (analysis information of) general properties "prop" (only local props whose clauses are available) for assertion checking.
- Minor fix in builtin recsolvers' simplification of sums.
Changed
- fd domain renamed to frdef
- The p_unit has been simplified, optimized, and promoted as a Ciao library. Other components has been isolated and kept in the CiaoPP source tree: p_dump (output), multiple language frontends.
- Removed flags tmp_dir and asr_dir (not used, integrated into CIAOCCACHE).
- Enable by default assertion simplification.
- Version 1.6 (2022/9/28)
-
Added
- Integrate test case generation for assertion-based random test generation (currently ciaotest bundle) fully into CiaoPP's assertion checking pipeline.
Improved
- Improvements in tutorials. Tutorials are grouped in a separate CiaoPP manual, containing:
- Interactive tutorials from exfilter
- Other tutorials (quick start and larger) from reference manual
- Added --ciaopp:lite=[yes|no] bundle config flag (which disables the inclusion of additional bundles)
- output/{1,2} instantiates unbound File arg with default if needed.
- Showing summaries of assertion checking (count check, checked, false, etc. assertions).
- Unify ctcheck assertion checking at predicate level and literal level.
- Improved documentation of normal form expressions (normal_form) (ciaopp_cost).
Fixed
- Make sure that typedefs are written to current_output.
- Call sockets initialization only if/when required.
- Fixed bug in polyhedra:project_on_dimensions/5, adding missing copies.
- Fix variable names in raw output (name counter was reset in the wrong places).
- Recover documentation figure for infercost/resources.
- Fix in res_plai handling of size types. An error in the length/semantics of lists in res_plai_aux:update_non_rec_param_args made res_plai fail when working with regtypes whose definition involves rules with some recursive calls being placed before a non-recursive call.
- Version 1.5 (2022/3/2)
-
- ADDED: CiaoPP is included now by default with the devenv bundle.
- ADDED: Output options in the output/2 predicate.
- ADDED: More examples (most of them for verifly).
- ADDED: Documentation for debugging analyses.
- ADDED: ciaoppcl can start as an active module (flycheck).
- IMPROVED: Better automatic selection of analysis domains (covering better the properties to be checked; using mode domains before type domains, etc.); dom_sel flag to decide whether to automatically select domains for verification.
- IMPROVED: Refactoring and improving ctchecks (compile-time assertion checking) code: modular ctchecking working again (i.e., after intermodular fixpoint); report assertions per module; better messages; many bug fixes.
- IMPROVED: Reducing boilerplate code in the implementation of analysis domains using the new aidomain package.
- IMPROVED: Simplified menu, unified menu for analysis and ctchecks.
- IMPROVED: Improved precision of (nf,det) analysis domains. Adding (experimental) new nfdet combined analysis domain.
- CHANGED: Change default setting for entry point selection from assertions (exported calls by default).
- CHANGED: Disabled output for ciaoppcl -V.
- CHANGED: Assertion simplification (eliminating statically proven properties from run-time checks) now enabled by default during assertion checking.
- CHANGED: trust pred assertions expanded to check calls, trust success and trust comp assertions.
- CHANGED: Abort auto_interface action early if there is a compilation error.
- CHANGED: pp_info flag (printing analysis infor at literal level) moved to the naive menu.
- FIXED: Many bug fixes and performance improvements: eliminated some dangling choicepoints; avoid printing some calls assertions twice; wrong use of denorm_goal_prop/3 changed to prop_unapply/3; missing clause to abs_exec_cond:type_of/4 to handle deftypes domain.
- FIXED: Bug in treatment of dynamic predicates.
- Version 1.4 (2020/11/18)
- General changes and new features:
- LLVM-based frontend improved and moved to its own bundle (see ciaopp_llvm bundle).
- Split typeslib as a separate bundle.
- Allow heads of entry assertions to be non-normalized.
- Adapted to new hiord.
- ADDED: Command ciaopp-dump, which performs several actions over a ciaopp analysis dump: it subsumes the old ciaopp-dump-cmp and ciaopp-dump-cmp commands. New options for: showing the contents of a dump file, a code reachability report, static, offline checks of assertions using a dump file, and general statistics for the analysis results.
- ADDED: Added -op Suffix option to ciaopp command-line (useful for flycheck).
- ADDED: Warning if no entries were found
- ADDED: Unified messages, now controlled by ciaopp_log.pl
- ADDED: ciaopp-batch command to run ciaopp on many files and with timeouts.
- ADDED: Modular (non-incremental) analysis with types (shortening).
- ADDED: Bottom-up incremental update of fixpoint (at literal level).
- ADDED: Modular (non-incremental) analysis with types (shortening).
Domains: - Implemented domains using (a special) trait package.
- Added needs/2 operation.
- Renamed abstypes_abs to auxinfo_asub.
- eterms: member/2, =/2 as native properties (for assertions).
- pdb:
- Optimize pdb_compute_lub: top if any ASub is top.
- Use fail literals.
- sharing: fixed free/1 handlers
- shfr: fixes in handlers of ==/2, =/2, '\\=='/2, '\\='/2, free/1 (native version of var/1)
Fixpoints: - Split compilation options (debug, trace, rtchecks) in common file fixpoint_options.pl
- Improved tracing of clauses
- Refactored fixpoints to make them easier to merge
Fixpoint dd: - FIXED: Reuse a complete with the same head but different vars order
- [performance] Using get_memo_table because Id+Key is unique
- FIXED: Case in which a literal is not reachable
- Improved documentation
Analysis of higher-order code: - ADDED: Flag for automatic generation of entries of meta calls.
- FIXED: call/N was not being detected as meta predicate (and flattened when possible).
- ADDED: \\+ not treated as meta, flatten calls known at compile time.
Flags and options menu: - ADDED: Flag to remove useless (unreachable) completes after fixpo.
- punit_boundary: change default value to bundle.
- Included incanal flag, changed ext_policy in menu (same as pp_flag).
- Improved options menu (added and simplified dependencies, simplified text, grouped actions, better documentation).
- Version 1.3 (2019/11/3)
- New functionality:
- Backported (and improved) incremental analysis (incanal) from CiaoPP 0.8.
- Integrated incremental and modular analysis (pp_flag incremental=on)
- Integrated modular analysis in the general analysis driver.
- Added analysis using run-time semantics of assertions to the dd fixpoint (pp_flag old_trusts=off).
- Fixes in meta-calls (work in progress).
- Modularized domains, now they use the aidomain package (work in progress).
- Added generic, non relational domain with simpler domain operations.
- New flag value: restrict modular analysis to the modules of a bundle (pp_flag punit_boundary=bundle).
Performance improvements: - Added hook to cache library assertions.
- Added flag to load modules faster by preloading ciao libraries.
- Fixed many dangling choicepoints across all modules.
- Fixed performance issues in modular analysis.
- Fixed bug of metacalls inside a recursion (dd fixpoint).
User interface and documentation: - Rearranged manual.
- Created web interface for demos (see ciaopp_online bundle).
- Added a high level interface for intermental analisis (incanal).
Benchmarks, internal testing, and debugging: - Tests/benchmarks moved to a separate bundle (ciaopp_tests).
- Added tests for gitlab CI (continuous integration).
- Some fixes in the davinci interface.
- Fixed (documentation) assertions. CiaoPP can be run with the package rtchecks.
- Added analysis_stats.pl to unify statistics collecting.
- ciaopp-dump-cmp: new command to compare two ciaopp analaysis dumps.
- ciaopp-dump-fmt: new command that outputs the analysis in dot format.
- New flag value: Raw analysis printer (pp_flag output_lang=raw).
- Added pp_flag to trace fixpoints.
Other bug fixes, cleanups, refactoring, etc.: - Removed api (now using p_unit).
- Fixed maintaining plai_db for complete operations
- Fixed classifying mistakenly recursive predicates as non recursive (meta predicates).
- Fixed issue with reexported predicates in p_unit.
- Fixed problem with meta_predicates that did not have any meta argument.
- Added free/1 to sharefree_clique domain.
- Replaced runtime_control:statistics/2 by analysis_stats:pp_statistics/2.
- Using p_unit/program_keys.pl for the keys of ciaopp.
- Version 1.2 (2006/1/3)
- New release.
- Version 1.0 (2001/11/7)
- Major code reorganization from CiaoPP 0.8. Moved to repo system. See below for 0.8 changelog prior to 1.0 (covers 1999-2003).
- Version 0.7 (1999/7/12)
- Version freeze for major type inference mods. (Manuel Hermenegildo).
- Version 0.4 (1998/2/12)
- First modularization of the code. (Francisco Bueno Carrillo).
- Version 0.3 (1997/5/1)
- First version of typeslib. (Pedro Lopez Garcia).
- Version 0.1 (1993/10/1)
- First version of m_ciaopp.pl (Francisco Bueno).