Giter Club home page Giter Club logo

cuneiform-legacy's Introduction

I am a software engineer focusing on language design and distributed systems. My goal is to support open-source and free software projects. To learn more, take a look at Cuneiform, a distributed functional programming language, or gen_pnet, an Erlang library to implement Petri nets.

Professionally, I program C, C++, Java, and Python. For my own projects, I prefer Erlang, Common Lisp, or Racket.

cuneiform-legacy's People

Contributors

joergen7 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

cuneiform-legacy's Issues

Support of other scripting languages, e.g., Python

It should be possible to create foreign code in any given scripting language. Consider the example below:

declare python-example;

deftask + in python( ~result : ~<operand> ) *{
    #!/usr/bin/env python

    result = 0
    for line in operand:
        result += float( line )
}*

target x;

x = apply(
    task: +
    operand: ~'5' ~'10' ~'-7' ~'1'
);

BashInvocation: catch error signal

Currently, when an error occurs in a Bash script, it may be, that the workflow just continues.

It collects the error messages, but does not halt.

Make all logging information JSON

Make the log a bag of JSON objects. In the following, it might be useful to create a KNIME node that extracts a table out of the log.

Improve invocation signatures

Invocation signatures must reliably represent invocations.

  • if a task body is altered, the signature is altered too
  • if an invocation signature changes, all downstream signatures also change
  • use long signatures
  • before any intermediate results are reused, compare all logs with all created directories and delete any directories, that aren't mentioned in any log

Allow empty lists as task output

In order to allow provenance-explicit filters we need to be able to produce the empty list as a task result.

However, as task input it shouldn't be allowed.

Stdout and error channel into workflow trace

Each task invocation writes things to the stdout and the stderr. Instead of just losing this information, the controlled side-effects of the invocation should appear in the controlled side effect of the workflow execution: the worklfow trace.

Create signatures also for task nodes

Task nodes have ids which are stored in the log. Since these ids may not be the same in a subsequent run, all task node ids have to be exchanged for signatures, as done for invocations.

Check whether all occurrences of task node ids can be replaced by signatures.

Relax import

Some people prefer include. Make them interchangeable. Also can an import eat a string expression instead of just an identifier.

Type checking

Types should be checked.

Literals must not anymore be decorated. It suffices to have the task definition prototypes typed.

Store log to file

By default, store the log in a separate file in the build directory.

Adapt Macro calls

Macro calls should look more like apply calls. Thus

  • keyword arguments
  • allow expressions, not only ids

Problem in hashing task calls

  • Altering the body of a function must also alter its hash.
  • Altered intermediate data should affect downstream invocations.
  • If an invocation did not produce an output it has to be recomputed.

This is especially important when workflow leaves are heavily altered. Because the current state forces the user to delete all cached results prior to his next run.

Error in output reduce

The invocations that are supposed to be started after an output reduce task, are never invoked.

Higher Order Functions

Cuneiform has support of higher order functions. Consider the following example

declare higher-order-fn;

deftask calculate-fn( fn : ) {
echo my-task > $fn
}

deftask my-task( out : a b ) {
cat $a $b > $out
}

target x;

x = apply(
task: apply( task: calculate-fn )
a: ~'hello'
b: ~'world'
);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.