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.