• Stars
    star
    1,339
  • Rank 33,961 (Top 0.7 %)
  • Language
    Java
  • License
    MIT License
  • Created about 6 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

DDlog is a programming language for incremental computation. It is well suited for writing programs that continuously update their output in response to input changes. A DDlog programmer does not write incremental algorithms; instead they specify the desired input-output mapping in a declarative manner.

License: MIT CI workflow pipeline status rustc Gitter chat

Differential Datalog (DDlog)

DDlog is a programming language for incremental computation. It is well suited for writing programs that continuously update their output in response to input changes. With DDlog, the programmer does not need to worry about writing incremental algorithms. Instead they specify the desired input-output mapping in a declarative manner, using a dialect of Datalog. The DDlog compiler then synthesizes an efficient incremental implementation. DDlog is based on Frank McSherry's excellent differential dataflow library.

DDlog has the following key properties:

  1. Relational: A DDlog program transforms a set of input relations (or tables) into a set of output relations. It is thus well suited for applications that operate on relational data, ranging from real-time analytics to cloud management systems and static program analysis tools.

  2. Dataflow-oriented: At runtime, a DDlog program accepts a stream of updates to input relations. Each update inserts, deletes, or modifies a subset of input records. DDlog responds to an input update by outputting an update to its output relations.

  3. Incremental: DDlog processes input updates by performing the minimum amount of work necessary to compute changes to output relations. This has significant performance benefits for many queries.

  4. Bottom-up: DDlog starts from a set of input facts and computes all possible derived facts by following user-defined rules, in a bottom-up fashion. In contrast, top-down engines are optimized to answer individual user queries without computing all possible facts ahead of time. For example, given a Datalog program that computes pairs of connected vertices in a graph, a bottom-up engine maintains the set of all such pairs. A top-down engine, on the other hand, is triggered by a user query to determine whether a pair of vertices is connected and handles the query by searching for a derivation chain back to ground facts. The bottom-up approach is preferable in applications where all derived facts must be computed ahead of time and in applications where the cost of initial computation is amortized across a large number of queries.

  5. In-memory: DDlog stores and processes data in memory. In a typical use case, a DDlog program is used in conjunction with a persistent database, with database records being fed to DDlog as ground facts and the derived facts computed by DDlog being written back to the database.

    At the moment, DDlog can only operate on databases that completely fit the memory of a single machine. We are working on a distributed version of DDlog that will be able to partition its state and computation across multiple machines.

  6. Typed: In its classical textbook form Datalog is more of a mathematical formalism than a practical tool for programmers. In particular, pure Datalog does not have concepts like types, arithmetics, strings or functions. To facilitate writing of safe, clear, and concise code, DDlog extends pure Datalog with:

    1. A powerful type system, including Booleans, unlimited precision integers, bitvectors, floating point numbers, strings, tuples, tagged unions, vectors, sets, and maps. All of these types can be stored in DDlog relations and manipulated by DDlog rules. Thus, with DDlog one can perform relational operations, such as joins, directly over structured data, without having to flatten it first (as is often done in SQL databases).

    2. Standard integer, bitvector, and floating point arithmetic.

    3. A simple procedural language that allows expressing many computations natively in DDlog without resorting to external functions.

    4. String operations, including string concatenation and interpolation.

    5. Syntactic sugar for writing imperative-style code using for/let/assignments.

  7. Integrated: while DDlog programs can be run interactively via a command line interface, its primary use case is to integrate with other applications that require deductive database functionality. A DDlog program is compiled into a Rust library that can be linked against a Rust, C/C++, Java, or Go program (bindings for other languages can be easily added). This enables good performance, but somewhat limits the flexibility, as changes to the relational schema or rules require re-compilation.

Documentation

Installation

Installing DDlog from a binary release

To install a precompiled version of DDlog, download the latest binary release, extract it from archive, add ddlog/bin to your $PATH, and set $DDLOG_HOME to point to the ddlog directory. You will also need to install the Rust toolchain (see instructions below).

If you're using OS X, you will need to override the binary's security settings through these instructions. Else, when first running the DDlog compiler (through calling ddlog), you will get the following warning dialog:

"ddlog" cannot be opened because the developer cannot be verified.
macOS cannot verify that this app is free from malware.

You are now ready to start coding in DDlog.

Compiling DDlog from sources

Installing dependencies manually

  • Haskell stack:
    wget -qO- https://get.haskellstack.org/ | sh
    
  • Rust toolchain v1.52.1 or later:
    curl https://sh.rustup.rs -sSf | sh
    . $HOME/.cargo/env
    rustup component add rustfmt
    rustup component add clippy
    
    Note: The rustup script adds path to Rust toolchain binaries (typically, $HOME/.cargo/bin) to ~/.profile, so that it becomes effective at the next login attempt. To configure your current shell run source $HOME/.cargo/env.
  • JDK, e.g.:
    apt install default-jdk
    
  • Google FlatBuffers library. Download and build FlatBuffers release 1.11.0 from github. Make sure that the flatc tool is in your $PATH. Additionally, make sure that FlatBuffers Java classes are in your $CLASSPATH:
    ./tools/install-flatbuf.sh
    cd flatbuffers
    export CLASSPATH=`pwd`"/java":$CLASSPATH
    export PATH=`pwd`:$PATH
    cd ..
    
  • Static versions of the following libraries: libpthread.a, libc.a, libm.a, librt.a, libutil.a, libdl.a, libgmp.a, and libstdc++.a can be installed from distro-specific packages. On Ubuntu:
    apt install libc6-dev libgmp-dev
    
    On Fedora:
    dnf install glibc-static gmp-static libstdc++-static
    

Building

To build the software once you've installed the dependencies using one of the above methods, clone this repository and set $DDLOG_HOME variable to point to the root of the repository. Run

stack build

anywhere inside the repository to build the DDlog compiler. To install DDlog binaries in Haskell stack's default binary directory:

stack install

To install to a different location:

stack install --local-bin-path <custom_path>

To test basic DDlog functionality:

stack test --ta '-p path'

Note: this takes a few minutes

You are now ready to start coding in DDlog.

vim syntax highlighting

The easiest way to enable differential datalog syntax highlighting for .dl files in Vim is by creating a symlink from <ddlog-folder>/tools/vim/syntax/dl.vim into ~/.vim/syntax/.

If you are using a plugin manager you may be able to directly consume the file from the upstream repository as well. In the case of Vundle, for example, configuration could look as follows:

call vundle#begin('~/.config/nvim/bundle')
...
Plugin 'vmware/differential-datalog', {'rtp': 'tools/vim'} <---- relevant line
...
call vundle#end()

Debugging with GHCi

To run the test suite with the GHCi debugger:

stack ghci --ghci-options -isrc --ghci-options -itest differential-datalog:differential-datalog-test

and type do main in the command prompt.

Building with profiling info enabled

stack clean

followed by

stack build --profile

or

stack test --profile

More Repositories

1

photon

Minimal Linux container host
Python
2,879
star
2

govmomi

Go library for the VMware vSphere API
Go
2,177
star
3

pyvmomi

VMware vSphere API Python Bindings
Python
2,168
star
4

open-vm-tools

Official repository of VMware open-vm-tools project
C
2,048
star
5

pyvmomi-community-samples

A place for community contributed samples for the pyVmomi library.
Python
989
star
6

PowerCLI-Example-Scripts

PowerShell
738
star
7

vsphere-automation-sdk-python

Python samples, language bindings, and API reference documentation for vSphere, VMC, and NSX-T using the VMware REST API
Python
721
star
8

splinterdb

High Performance Embedded Key-Value Store
C
664
star
9

vic

vSphere Integrated Containers Engine is a container runtime for vSphere.
Go
641
star
10

burp-rest-api

REST/JSON API to the Burp Suite security tool.
Java
546
star
11

versatile-data-kit

One framework to develop, deploy and operate data workflows with Python and SQL.
Python
412
star
12

concord-bft

Concord byzantine fault tolerant state machine replication library
C++
374
star
13

chap

chap analyzes un-instrumented core files for leaks, memory growth, and corruption
C++
345
star
14

kube-fluentd-operator

Auto-configuration of Fluentd daemon-set based on Kubernetes metadata
Go
318
star
15

vsphere-automation-sdk-java

Java samples, language bindings, and API reference documentation for vSphere, VMC, and NSX-T using the VMware REST API
Java
202
star
16

goipmi

Go IPMI library
Go
181
star
17

vic-product

vSphere Integrated Containers enables VMware customers to deliver a production-ready container solution to their developers and DevOps teams.
RobotFramework
174
star
18

ansible-for-nsxt

Ansible delivers simple IT automation that ends repetitive tasks and frees up DevOps teams for more strategic work. This project is to enable this automation for NSX-T installation.
Python
164
star
19

mangle

Git Repository for the Mangle tool
Java
159
star
20

weathervane

Virtual-Infrastructure and Cloud Performance Benchmark
Java
154
star
21

vmware-go-kcl

KCL Implementation in Go lang by VMware
Go
149
star
22

dscr-for-vmware

The Repository contains Microsoft PowerShell Desired State Configuration (DSC) Resources for managing VC and ESXi settings.
PowerShell
139
star
23

terraform-provider-vcd

Terraform VMware Cloud Director provider
Go
138
star
24

dod-compliance-and-automation

Security hardening content for VMware solutions to US Department of Defense standards
Ruby
135
star
25

ansible-module-vcloud-director

ansible-module-vcloud-director
Python
108
star
26

tdnf

Tiny Dandified Yum
C
106
star
27

terraform-provider-nsxt

Terraform VMware NSX-T provider
Go
105
star
28

declarative-cluster-management

Declarative cluster management using constraint programming, where constraints are described using SQL.
Java
99
star
29

powerclicore

PowerCLI Core Dockerfile
Dockerfile
96
star
30

terraform-provider-vra

Terraform VMware vRealize Automation provider
Go
96
star
31

clarity-city

Clarity City
CSS
91
star
32

load-balancer-and-ingress-services-for-kubernetes

Load Balancer and Ingress services for Kubernetes
Go
87
star
33

hamlet

Multi-Vendor Service Mesh Interoperation
86
star
34

open-vmdk

Python
85
star
35

container-service-extension

Container Service for VMware vCloud Director
Python
78
star
36

go-vcloud-director

Golang SDK for VMware Cloud Director
Go
77
star
37

vrealize-developer-tools

Extension for Visual Studio Code that provides code intelligence features and enables a more developer-friendly experience when creating vRealize content
TypeScript
73
star
38

nsx-t-datacenter-ci-pipelines

CI pipelines for VMware NSX-T Datacenter
Python
72
star
39

flowgate

Project FlowGate is an open-source vendor-neutral project that helps enterprises integrate facility systems data and IT data to form a single holistic view of their operations. By combining these two disparate data sets into one view, data center operators/IT admins are better equipped to optimize operations which were previously impossible.
Java
71
star
40

nsx-powerops

NSX-v Operationalization project. Automate Networking Documentation and HealthCheck.
Python
68
star
41

singleton

A service that provides support for Software Internationalization and Localization
Java
68
star
42

alb-sdk

Avi SDK and Utilities
Java
66
star
43

esx-boot

The ESXi bootloader
C
65
star
44

node-replication

An operation-log based approach for data replication.
Rust
57
star
45

ansible-security-hardening

ansible playbooks for linux distro security hardening
56
star
46

go-vmware-nsxt

golang library for NSX-T REST API
Go
55
star
47

data-annotator-for-machine-learning

Data annotator for machine learning allows you to centrally create, manage and administer annotation projects for machine learning
TypeScript
54
star
48

te-ns

Traffic Emulator for Network Services
C
53
star
49

idm

51
star
50

replay-app-for-tvos

tvOS application that converts an Apple TV into to a digital signage / kiosk
Swift
49
star
51

bitfusion-with-kubernetes-integration

Bitfusion with Kubernetes Integration Support
Go
48
star
52

photon-docker-image

Shell
44
star
53

vmw-guestinfo

Go
41
star
54

terraform-provider-tanzu-mission-control

Terraform provider to manage resources of Tanzu Mission Control
Go
40
star
55

terraform-provider-vra7

Terraform VMware vRealize Automation 7 provider
Go
40
star
56

c-rest-engine

C
39
star
57

power-validated-solutions-for-cloud-foundation

PowerShell Module for VMware Validated Solutions
PowerShell
39
star
58

nsx-alb-datascript-samples-library

DataScript Examples Library
Lua
38
star
59

build-tools-for-vmware-aria

Build Tools for VMware Aria provides development and release management tools for implementing automation solutions based on the VMware Aria Suite and VMware Cloud Director. The solution enables Virtual Infrastructure Administrators and Automation Developers to use standard DevOps practices for managing and deploying content.
Java
38
star
60

harbor-boshrelease

CFF BOSH Release for Project Harbor
Shell
37
star
61

ansible-vsphere-gos-validation

Guest OS validation test set for vSphere using Ansible
Python
37
star
62

cluster-api-provider-cloud-director

Cluster API Provider for VMware Cloud Director. The project is an open source implementation of K8s ClusterAPI project and allows customers to provision resources directly from VMware Cloud Director. It enables Cloud Director powered Clouds to be treated as yet-another-cloud in the multi-cloud journey for VMware Cloud Providers.
Go
36
star
63

script-runtime-service-for-vsphere

The Repository contains Script Runtime Service for vSphere. A service for managing server-side PowerCLI instances to run commands and scripts against VCenter servers.
Smalltalk
35
star
64

vrops-export

vRealize Operations Export Tool
Java
34
star
65

powershell-module-for-vmware-cloud-foundation

PowerShell Module for VMware Cloud Foundation
PowerShell
34
star
66

photon-packer-templates

VMware Photon Packer Templates
HCL
32
star
67

vsphere-automation-sdk-go

Go programming language SDK (Beta) for VMC. NSX-T and vSphere services will be added soon.
Go
32
star
68

likewise-open

Likewise OSS project
C
32
star
69

terraform-provider-avi

Terraform AVI Networks provider
Go
31
star
70

go-ipfix

An ipfix library in Go
Go
30
star
71

network-config-manager

Network configuration manager is utility for easily configuring networking on a linux system
C
30
star
72

nsx-container-plugin-operator

Kubernetes Operator for the NSX Container Plugin (NCP)
Go
30
star
73

nerpa

Network Programming with Relational and Procedural Abstractions (NERPA)
Rust
30
star
74

json-template-engine

This project provides implementations for the JSON template specification.
C++
30
star
75

vidm-saml-toolkit

VMware Identity Manager SAML Toolkit for Developers
Java
28
star
76

vic-ui

vSphere Integrated Containers Plug-In for vSphere Client provides information about your VIC setup and allows you to deploy VCHs directly from the vSphere Client.
TypeScript
28
star
77

cloud-director-named-disk-csi-driver

Container Storage Interface (CSI) driver for VMware Cloud Director
Go
27
star
78

vmware-cloud-director-ui-components

VMware Cloud Director UI Common Components
TypeScript
26
star
79

terraform-provider-vmc

Terraform provider for VMware Cloud on AWS
Go
25
star
80

vsphere-guest-run

Python library for guest operations
Python
24
star
81

python-client-for-vmware-cloud-on-aws

Python Client for VMware Cloud on AWS is an open-source Python-based tool. Written in Python, the tool enables VMware Cloud on AWS users to automate the consumption of their VMware Cloud on AWS SDDC.
Python
24
star
82

vmware-openapi-generator

VMware-openapi-generator tool generates open-api documents from vapi metamodel format.
Python
23
star
83

nsx-advanced-load-balancer-tools

Repository to build Docker container with all Avi tools.
Dockerfile
22
star
84

vSphere-machine-learning-extension

vSphere Machine Learning Extension
Shell
21
star
85

vmware-go-kcl-v2

vmware-go-kcl is a vmware originated open-source project for AWS Kinesis Client Library in Go. It has been widely used by many external companies and internally by Carbon Black. vmware-go-kcl-v2 is its companion project by utilizing AWS Go SDK V2 which introduces lots of breaking changes. To keep the repo clean, it is better to have a separated repo vmware-go-kcl-v2 with better golang project structure improvement.
Go
21
star
86

workflowTools

Developer workflow tooling for jenkins, jira, reviewboard and git
Java
20
star
87

global-load-balancing-services-for-kubernetes

Global Load Balancing Services for Kubernetes
Go
20
star
88

network-event-broker

manages network configuration
Go
20
star
89

crest

Crest machine learning based automated accessibility tests
Python
20
star
90

django-yamlconf

Django settings values via external YAML formatted files simplifying the c onfiguration of Django applications
Python
19
star
91

ansible-collection-alb

VMware Advanced Load Balancer (formerly Avi) Ansible Collection
Python
18
star
92

kernel-event-collector-module

This is the Linux kernel module event collector for the Carbon Black Cloud.
C
18
star
93

vra-sdk-go

VMware vRealize Automation SDK for Go
Python
18
star
94

cloud-provider-for-cloud-director

Kubernetes External Cloud Provider for VMware Cloud Director
Go
18
star
95

vhpc-toolkit

Virtualized High Performance Computing Toolkit - A toolkit to help configure and manage virtual high performance computing (HPC) clusters by leveraging vSphere APIs
Python
17
star
96

upgrade-framework

A product-agnostic framework for defining and sequencing upgrades
Java
17
star
97

powershell-module-for-vmware-cloud-foundation-reporting

PowerShell Module for VMware Cloud Foundation Reporting
PowerShell
17
star
98

nsx-integration-for-openshift

NSX-T deployment playbooks for Openshift integration
Python
16
star
99

trace-cruncher

Trace-Cruncher provides an interface between the existing instrumentation for collection and visualization of Linux kernel tracing data and the ecosystem of instruments for data analysis available in Python.
C
16
star
100

cloud-director-extension-standard-library

Standard Library for VMware Cloud Director solutions add-ons and add-on elements.
TypeScript
16
star