Releases: vmware/differential-datalog
DDlog v0.48.1
[0.48.1] - Sep 7, 2021
- Fixed compilation speed regression in v0.48.0.
DDlog v0.48.0
New features
-
Added change profiling support to the DDlog self-profiler. Unlike arrangement size
profiling, which tracks the number of records in each arrangement, the change profile
shows the amount of churn. For example adding one record and deleting one record will
show up as two changes in the change profile, but will cancel out in the size profile.
The self-profiler now support theprofile change on/off
commands (also available
through the API), which enables change profiling for selected transactions.
When change profiling is disabled, the recording stops, but the previously accumulated
profile is preserved. By selectively enabling change profiling for a subset of transactions,
the user can focus their analysis on specific parts of the program. -
Limited support for dynamic typing. We introduce a new type
Any
to the standard
library, which can represent any DDlog value, along with two library functions
to_any()
andfrom_any()
that convert values to and from this type. This
feature can be used to, e.g., store a mix of values of different types in a
set or map. -
Experimental features to support implementing parts of D3log runtime in DDlog.
See #1065 for details.
Language and standard library changes
-
The semantics of the
group_by
operator changed in a subtle way. A group
now contain exactly one occurrence of each value. See #1070 for details. -
Removed
ddlog_std::count(Group)
andddlog_std::group_count(Group)
methods
to avoid changing their behavior in a non-backwards-compatible way. Added
count_distinct(Group)
instead, which returns the count of distinct values in
the group. -
Removed
ddlog_std::group_sum(Group)
. Added
function sum_of(g: Group<'K, 'V>, f: function('V): 'N): 'N
instead.
DDlog v0.47.0
[0.47.0] - Aug 19, 2021
OVSDB-to-DDlog compiler update
- Added
--intern-strings
option that causes all strings in generated OVSDB tables
to be emitted as 'istring'. This reduces memory use and can aid performance in programs
that use strings heavily. See PR #1056.
DDlog v0.46.0
[0.46.0] - Aug 18, 2021
Optimizations
- Speedup hashing of interned objects (fixes performance regression in 0.43.0,
see #1053 for details). - Speedup serialization of the
json::JsonValue
type (see #1052)
Initial Calcite SQL support
- Added partial support for the Calcite dialect of SQL (see #1044) to the
SQL-to-DDlog translator.
DDlog v0.45.1
[0.45.1] - Aug 16, 2021
Optimizations
- Optimize code generation for
match
and?
expressions. - Optimize code generation for interpolated strings.
DDlog v0.45.0
[0.45.0] - Aug 15, 2021
Optimizations
- Introduce
#[by_val]
attribute to pass function arguments by value. - Use the new attribute to optimize a bunch of library functions. This should
not break any existing DDlog code, but it will affect Rust code that calls
DDlog libraries directly.
DDlog v0.44.0
[0.44.0] - Aug 12, 2021
Optimizations
- Compile string literals into lazy static to avoid dynamic allocation every
time a string literal is used.
Bug fixes
- Bug fixes in the SQL-to-DDlog compiler
- Bug in
#[derive(Mutator)]
macro: mutations that change the constructor of a
type failed (#1041).
Improvements
- Improved infrastructure for implementing
FromRecord
andMutator
traits
(#1029):- Automatically handle
Record::Serialized()
inFromRecord
andMutator
implementations. - Allow modifying, and not just overwriting
Map
values.
- Automatically handle
DDlog v0.43.0
[0.43.0] - Jul 25, 2021
Bug fixes
New library functions
-
New
ddlog_std
library functions:/* Convert any DDlog type into a string in a programmer-facing, * debugging context. Implemented by calling the `Debug::fmt()` * method of the underlying Rust type. */ extern function to_string_debug(x: 'T): string function reverse(v: mut Vec<'X>) function reverse_imm(v: Vec<'X>): Vec<'X>
DDlog v0.42.1
[0.42.1] - Jul 16, 2021
-
New library functions:
-
ddlog_std.dl
:function values(m: Map<'K, 'V>): Vec<'V> function nth_value(m: Map<'K, 'V>, n: usize): Option<'V> function nth_key(m: Map<'K, 'V>, n: usize): Option<'K>
-
map.dl
:function find(m: Map<'K, 'V>, f: function('V): bool): Option<'V> function any(m: Map<'K, 'V>, f: function('V): bool): bool
-
-
Bug fixes:
- Fixed scrambled self-profiler output.
- Fixed compilation speed regression introduced in 0.42.0.
-
New feature in OVSDB-to-DDlog compiler:
multiset-table
option to force an output-only table to be declared as a
multiset
.
DDlog v0.42.0
[0.42.0] - Jul 9, 2021
DDShow integration
- DDShow is a timely/differential dataflow
profiler developed by @Kixiron. DDlog now supports DDShow as an alternative
to its built-in profiler. The built-in profiler is still preferable in
production environments, due to its low overhead, but DDShow is a better (and
constantly improving!) option for development-time profiling. See
Profiling tutorial for details on how to enable
DDShow-based profiling via CLI switches, as well as via Rust/C/Java APIs.
Configuration API
- DDlog now supports several configuration parameters: (1) number of worker threads,
(1) idle merge effort, (3) profiling configuration, (4) debug regions. We
introduce a new startup API<your_program>_ddlog::run_with_config()
that allows
the user to configure these parameters before instantiating a DDlog program. This
API is exposed to C via theddlog_run_with_config()
function and to Java via
theDDlogConfig
class.
Breaking API changes
-
Rust API refactoring: Moved
HDDlog
type (handle to a running DDlog program) from
the main auto-generated crate to thedifferential_datalog
crate. The
auto-generated crate now exports two public functions that create anHDDlog
instance:run
andrun_with_config
. -
Profiling is disabled by default. Previously, DDlog's self-profiler was
always enabled by default. This is no longer the case. When starting the
program via<your_program>_ddlog::run()
(ddlog_run()
in C), the profiler
will be disabled. To enable the profiler, use therun_with_config()
API
described above and explicitly set the profiling mode to eitherSelfProfiling
(to enable the internal profiler) orTimelyProfiling
(to use DDShow).
New features
- Support for "original" annotation on relations to record original name
(if name is generated by code).
Bug fixes
- Link ovsdb2ddlog statically, making it self-contained for better portability
across different Linux distros.