copyright |
---|
Copyright (c) Runtime Verification, Inc. All Rights Reserved. |
-
The Pyk distribution package name has been renamed to
kframework
in preparation for publishing the library to PyPI. The import package remainspyk
. Consumers of the library will need to update theirpyproject.toml
files to reflect the new name, but should not need to update any code. -
Updates to the syntax of regular expression terminals (
r"..."
) in K; some previously accepted syntax is no longer valid. This allows us to improve error messages, and will enable more checks in the future. -
K no longer supports macOS running on Intel machines.
-
Improved logging when executing symbolically using the Haskell backend; these logs make it easier to track down performance issues in K code.
-
SimpleSub-based principled type inference is now enabled by default.
-
Pyk now implements a more correct parenthesising unparser; this reduces downstream reliance on symbol table patching when unparsing.
-
Eliminated internal sources of flakiness due to undefined iteration order; this makes it easier to write stable tests using K.
-
Improvements to K's Nix infrastructure that reduce the size of a K Nix closure, making
kup install
faster. -
CI refactorings to improve K core developer experience.
-
Updates to dependency versions.
-
General bug fixes, UI and performance improvements.
-
Important change for all K and Pyk users. The Pyk library has been reintegrated into K, and is no longer maintained as a standalone project. This means that in K 7, first-class Python tooling is available wherever K is installed. Existing projects using the standalone Pyk library can continue to do so, but will not receive updates in the future.
-
The Haskell backend and booster components have been merged and are now developed as a single project.
-
Add an explicit
overload(_)
attribute to specify sets of overloaded symbols; this replaces the oldklabel(_)
syntax. -
The outer parser no longer supports
priorities
,require
andimport
.
-
Tooling and version updates for our Java and Scala code.
-
Substantial cleanup and auditing of the K frontend's use of attributes when generating KORE definitions.
-
Extended compiler warnings for the deprecated
symbol, klabel(_)
attribute combination, as well as for overload sets. -
Clarification and better compiler warnings for cell collection initializers.
-
Add
total
attribute to record projection functions that are verifiably total. -
Removed deprecated
--directory
flag. -
Removed deprecated binary format for KAST.
-
Removed deprecated
STRATEGY
module.
-
The syntax
.
to represent an empty K sequence has been deprecated in favour of.K
. Definitions using.
will now emit a warning when they are compiled, but will remain functional. -
Added a new one-argument form of the
symbol(_)
attribute that replaces the previousklabel(_), symbol
combination that specified the KORE label for a particular production. -
The outer parser no longer applies an implicit
klabel(_)
attribute to shorthand "unquoted" productions (e.g.syntax Foo ::= foo()
); this can break code if those productions were overloaded. Add an explicitklabel(_)
attribute to fix this. -
The
macro
attribute family are now prohibited on rules, rather than just emitting a warning. -
Deprecation of K's support for LaTeX emission.
-
Improvements to consistency within the compiler: fewer duplicated symbols are present in compiled output, and the
ARRAY
module is no longer treated as being hooked. -
Better handling of the compiler's internal attribute data structures.
-
Optimization of the binary format for KORE used in the LLVM backend.
-
Better error handling when using the LLVM backend bindings from the Haskell backend.
-
Substantial cleanup and dead code elimination in the compiler.
- The
Bytes
sort no longer represents mutable buffers of bytes by default. Hooks that would previously have mutated a buffer when executing with the LLVM backend will now perform a transparent copy of the underlying buffer. This aligns the LLVM backend's behaviour with that of the Haskell backend and K. To opt out of this change if performance when operating on large buffers is important, semantics can pass the flag--llvm-mutable-bytes
tokompile
.
-
Removed the
#parseKORE
hook (which presented a hole in the K type system) in favour of modern, Pyk-based solutions to deserializing intermediate K states. -
Added
k-which-python
tool to Nix builds of K, which helps to resolve incompatibilities in Pyk-based applications that use K viakup
. -
Strict casts now use the
::S
syntax everywhere; a legacy use case for the syntax{...}<:S
is no longer required. -
Improvements to the deterministic type inferencing algorithm; strict casts are now handled and the new inferencer is enabled when typing proof claims.
-
Better integration between the Booster and LLVM backend in the presence of partial functions and run-time errors.
-
The PL tutorial that was previously bundled with K will now be developed and tested in its own repository.
-
Substantial improvements to K developer experience (code cleanup, auditing and automatic tooling).
-
Bug fixes and feature requests supporting RV-internal projects.
-
Added support for MacOS 13 Ventura. We dropped support for Ubuntu 20.04 Focal. K can now be built from source on Apple Silicon. See README for more details.
-
Updated dependency to Java version 17 or higher.
-
Added the Haskell Backend Booster as a dependency to K. This can improve performance when running large proofs. It uses the LLVM Backend for concrete execution and relies on the Haskell Backend to simplify terms when there is a split in the proof.
-
Optimized the kompiler by removing unit applications for collections.
-
Minimize JSON output by dropping unused attributes.
-
Added
--smt-timeout
flag tokrun
andkprove
. -
Changed the Maven repository to Cloudrepo for more stability and flexibility when building K from sources.
-
Improved attribute error messages by creating a whitelist dependent on the context. This check is now mandatory.
-
Rule label can no longer contain backticks (`) or whitespace.
-
Improved the help messages by adding a description of the expected parameter.
-
Documentation: Started work on Section 2 of the tutorial. Added a description for
kserver
. -
Added
--debugger-command
flag to krun. -
Added two options
--debug-tokens
and--debug-parse
to help with debugging parsing errors. The first option will print a Markdown table with all the matched tokens by the scanner. The second one will give more details about the partial parse tree constructed before an error was encountered.
-
Fixed a bug where the LLVM backend would segfault because of badly initialized fresh variables in the configuration.
-
Improved performance for JSON creation.
-
Remove old unused attributes.
-
Fix output sorting for KPrint. This will create a more stable pretty printed output.
-
Fix configuration pretty printing where
<generatedCounter>
would appear instead of a closing cell. -
Moved a README file from the
builtin
directory that could collide with users' files.
A more detailed list of changes can be found here: #3706
-
Removed the Java backend. From now on, all symbolic execution will be handled by the haskell backend and concrete execution by the llvm backend. Alongside that we also removed the
kprove-legacy
and thekbmc
tool. Bounded model checking capabilities have been added to the pyk library. -
Deprecated the
--directory
option. Use--output-definition
to store a definition and--definition
to load one. -
Introduced
--execute-to-branch
tokrun
when using the LLVM backend. -
Created a hidden category for advanced options:
--help-hidden
. This should make it easier to read the help menu forkompile
andkprove
. -
Added attribute validation. From now on, you will have to use
group(_)
to tag a production. You can still get the old behavior by providing--no-pedantic-attributes
. -
Add
--temp-dir
option to specify where to store all the temp files created at runtime. This can avoid some issues with accumulating files and readonly restrictions. -
Added a new builtin type
RangeMap
, a map whose keys are stored as ranges, bounded inclusively below and exclusively above. Contiguous or overlapping ranges that map to the same value are merged into a single range.
-
Fix some issues related to unicode characters not being parsed correctly.
-
Total attribute is allowed only on function symbols.
-
Added more checks and warning messages.
-
Fix inconsistencies around the
comm
attribute. -
Fix KLabel checks to consider
--concrete-rules
option.
A more detailed list of changes can be found here: #3403
-
Rename the attribute
functional
tototal
to better reflect its semantics. -
Updated
pl-tutorial
examples to work with the more modern backends: simple-untyped, kool, fun and logik. -
Pass through C build type option to llvm-kompile.
-
Extended the syntax for code block annotations to allow for more decorators for web extensions.
-
Added option
kompile --enable-llvm-debug
as a more easy to remember alternative to-g -O1
. -
Improved LLDB debugging support for macOS.
-
Added the
klsp
tool. It adds Language Server support for K. For now it supports: contextual code completion, go-to definition, find references, syntax error reporting and selection range. Has been tested with VSCode. You can find the K Framework extension on the marketplace.
-
Fix an issue where #Exists would not bind variables in the LHS.
-
Automatically import BOOL when strictness is applied.
-
Update the check for duplicated modules. It now allows for file copy. It calculates a digest and looks for content changes.
A more detailed list of changes can be found here: #3260
-
Improve error messages for erroneous simplification rules.
-
Added the
kup
tool to help with keeping the various dependencies up to date. -
Documentation updates
- Relax module duplication check to allow for duplicate files. Useful when moving the original definition to a new location.
A more detailed list of changes can be found here: #3005
-
Added
--definition
and--output-definition
command line options for specifying the exact path for storing and loading from the kompiled definition. -
Print source lines in error messages.
-
The haskell backend uses by default a new binary kore format. This decreases load time but can cause issues on certain systems (Apple Silicon). Use the
-no-haskell-binary
option to fall back to the textual format. -
Renamed
kprovex
tokprove
andkprove
tokprove-legacy
. -
Introduced V2 of the JSON kast format. Better handling for
KLabel
parameters and sorts. -
Add error message for duplicate user lists.
-
Added
#trace
to the list of IO operations to aid in debugging. -
Added
--post-process
, a JSON KAST => JSON KAST converter to run on the definition after kompile pipeline. The pyk library offers a convenient collection of operations for quick prototyping. -
Adding the
comm
attribute on a simplification rule will now generate a similar rule with the top most LHS function reversed. The syntax declaration also needs this attribute. -
LLDB can now be used for debugging the llvm-backend on OSX.
-
The
kast
tool now allows access to the rule grammar by providing--input rule
. -
Added more claims filtering options for
kprove
:--trusted
,--exclude
and--claims
. -
Various improvements to error messages and made it easier to debug and profile a definition.
-
Optimize grammar generator steps.
-
Optimize the type inference step by reducing the work done by Z3.
-
Make generated anonymous variables parsable (
_0
=>_Gen0
). -
Outer parser returned off by one end-column.
-
Bad parameters to kompile and kprove are now corectly reported as errors.
-
Fix the Bison parser not handling Bytes correctly.
-
Use clang by default on OSX
-
--emit-json-spec
now can print out multiple modules.
-
Haskell backend is updated to version efeb976.
-
LLVM backend is updated to version 5001b5b.
-
K Web Theme is updated to version f670742.
-
Require Z3 4.8.15 or higher
-
Downgrade Calibre to 5.42.0
A more detailed list of changes can be found here: #2514
-
Moved the main repository from
kframework/k
toruntimeverification/k
-
Removed the Ocaml backend.
-
Added options to modify llvm-kompile's parameters in the Kompile frontend.
-
Added support for
--pattern
passed to krun when you use the llvm backend. This delegates the search pattern matching to the haskell backend. -
Bytes
literals are now supported natively by the K syntax. -
kprovex
now supports function/functional simplification rules in the spec file. This makes it so you don't have to call kompile if you need to add only simplification rules to the spec file. -
kprovex
can now print the specification file as JSON with the option--emit-json-spec
-
The LLVM backend now supports binary KORE representation. This can have a significant speed benefit on large definitions.
-
Check for existential variables in requires clause. Dissallowed since it is considered LHS of the rule.
-
Fixed an issue with the eoncding/decoding of anonymous variables in KORE (
decodeKoreString
) -
Fixed an issue where parsing an empty program would throw an
ArrayIndexOutOfBoundsException
. -
Improve checks for format attributes.
-
Fixed an issue with
kparse
where it would truncate the output. -
Fixed various issues with the
--version
option. -
Fixed priority of
#let
relative to user syntax. Right now we have_:Int > user-syntax > #let > ~> > =>
-
Allow macros on hooked sorts
-
Improved type inference for anonymous variables
-
Caching some of the scanners when running
kprovex
-
Haskell backend is updated to version ed00c99.
-
LLVM backend is updated to version 4dedab7.
-
K Web Theme is updated to version b458d14.
-
Require Z3 4.8.11 or higher
-
Require Java 11 or higher
A more detailed list of changes can be found here: #2325
-
Added
kprovex
. A lightweight version ofkprove
which restricts the spec files to claims and token syntax. This avoids several bugs in the old code path and slightly improves the front end overhead. To convert the old tests, you need to kompile ahead of time the definition with the simplification rules and extra helper syntax needed for the proofs. -
kompile
will now attempt to simplify constant expressions which appear in the RHS of rules. -
krun
now supports--search
and--search-final
. This works with the LLVM backend and must be enabled atkompile
time with--enable-search --backend llvm
. -
The sentence type
imports syntax
has been removed. It was only used in one place in the tutorial, which was easy to resolve. This allows several code-paths inkompile
to be simplified. -
All modules which contain
configuration
declarations will automatically import theMAP
module now, instead of only the main module. -
The new Haskell backend hooks for
encodeBytes
anddecodeBytes
are exposed indomains.md
. -
Added support for module signatures supporting public/private syntax and imports.
-
macro
is now expected to be added to the syntax declaration instead of rules. -
Rework timing info for
--profile-rule-parsing
. It now takes a file and includes separate data fields for parsing and type inference.
-
Relicense as BSD 3-Clause
-
Lessons Basic 2-21 of the new K tutorial have been written.
-
The option
--help-experimental
or-X
is removed from all tools, and all the--help
option lists are flattened. -
Rename
pending-documentation.md
intoUSER_MANUAL.md
-
Modules marked as
not-lr1
are automatically excluded from the generated Bison parser, instead of causing an error. -
krun
respects the--no-exc-wrap
option now. -
Formatting of several error messages is improved, especially indentation.
-
File symlink handling in
requires
statements is improved. -
kast
tool no longer silently ignores the--output-file
parameter. -
Verbose mode offers more information about timings and scanners being created.
-
Added
-I
,--md-selector
and--no-prelude
tokprove
,kprovex
andkbmc
-
Definition parsing performance is significantly improved by being smarter with the existing caches and optimizing some specific code hotspots.
-
Improve type inference time for anonymous variables.
-
Parse Record Productions in linear time.
-
The K formula calculating Array extension has been optimized in
domains.md
.
-
The Nix packages are built with LTO turned on. Bison is included in the Nix package dependencies.
kserver
now works on Nix. -
The platform independent K binary, which really would only realistically work with Ubuntu Bionic (18.04), has been removed as an install option.
-
The Arch linux Dockerfiles have been updated for new Arch docker image naming scheme.
-
Haskell backend is updated to version 82b8a19.
-
LLVM backend is updated to version 572cf69.
-
K Web Theme is updated to version b458d14.
-
JavaCC is updated to version 4.1.4.
-
commons-io Java library is bumped to version 2.7.
A more detailed list of changes can be found here: #1697
-
Use the
claim
keyword instead ofrule
for proof obligations. -
Bison parser is full-featured and supports external ahead-of-time
macro
andmacro-rec
expansion. -
The new
krun
pipeline is written inbash
, and can often skip running the Java frontend altogether. In particular, ifkompile
is called using the Bison parser (--gen-bison-parser
or--gen-glr-bison-parser
), you get this benefit. -
K semantic version numbers are re-introduced, and can be expected to increment (rather than relying on git commit IDs).
Major changes since version 3.6, not all are documented here. In particular:
-
No longer uses Maude backend for K.
-
OCaml backend was developed, but now is being deprecated in favor of LLVM backend for concrete execution.
-
Java backend was developed, but now is being deprecated in favor of Haskell backend for symbolic execution.