Skip to content

Releases: vmware/differential-datalog

DDlog v0.48.1

07 Sep 15:38
Compare
Choose a tag to compare

[0.48.1] - Sep 7, 2021

  • Fixed compilation speed regression in v0.48.0.

DDlog v0.48.0

07 Sep 00:09
Compare
Choose a tag to compare

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 the profile 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() and from_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) and ddlog_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

19 Aug 22:33
Compare
Choose a tag to compare

[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

18 Aug 22:05
Compare
Choose a tag to compare

[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

16 Aug 21:54
Compare
Choose a tag to compare

[0.45.1] - Aug 16, 2021

Optimizations

  • Optimize code generation for match and ? expressions.
  • Optimize code generation for interpolated strings.

DDlog v0.45.0

16 Aug 01:58
Compare
Choose a tag to compare

[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

13 Aug 06:17
Compare
Choose a tag to compare

[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 and Mutator traits
    (#1029):
    • Automatically handle Record::Serialized() in FromRecord and Mutator
      implementations.
    • Allow modifying, and not just overwriting Map values.

DDlog v0.43.0

26 Jul 05:28
Compare
Choose a tag to compare

[0.43.0] - Jul 25, 2021

Bug fixes

  • Fixed a bug in type inference: #1022.
  • Fixed non-deterministic behavior in internment.dl: e0be732

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

18 Jul 00:24
Compare
Choose a tag to compare

[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

09 Jul 21:57
Compare
Choose a tag to compare

[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 the ddlog_run_with_config() function and to Java via
    the DDlogConfig class.

Breaking API changes

  • Rust API refactoring: Moved HDDlog type (handle to a running DDlog program) from
    the main auto-generated crate to the differential_datalog crate. The
    auto-generated crate now exports two public functions that create an HDDlog
    instance: run and run_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 the run_with_config() API
    described above and explicitly set the profiling mode to either SelfProfiling
    (to enable the internal profiler) or TimelyProfiling (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.