joergen7 / cuneiform-legacy Goto Github PK
View Code? Open in Web Editor NEWA Functional Workflow Language
License: Apache License 2.0
A Functional Workflow Language
License: Apache License 2.0
Also in the visualization, only relevant nodes should be drawn.
Macro calls should look more like apply calls. Thus
Conditionals should be first level citizens.
Task names can be displayed inside the boxes if there is only one of them.
Use declare statement to create .dot graphs with meaningful names.
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.
One gets the following error message when starting a task body with a tab:
missing BODY at '*'
Assigning the same variable multiple times should be forbidden, because all data types are immutable by definition.
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.
Packages should have dependencies only in one direction.
A test case has been added. This is a crucial bug.
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'
);
fa = apply(
task : connect
...
ext : fa
);
The invocations that are supposed to be started after an output reduce task, are never invoked.
Readlink, the tool that resolves the full file name of an output variable, does not check for the existence of a file. Funny errors result.
i -> __I
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.
Invocation signatures must reliably represent invocations.
Some people prefer include. Make them interchangeable. Also can an import eat a string expression instead of just an identifier.
Data items don't have a type, variables in a prototype do have. Don't confuse them.
To ease the parse of a possible provenance software, input and output declarations should have the same form.
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.
What macro hasn't been found?
Is importing macros erroneous.
Right now, the LocalDispatcher filters the report entries for the invocation output. This can be pushed into the Invocation class itself.
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.
By default, store the log in a separate file in the build directory.
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.
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'
);
Caching obsoletes the task ids and invocation ids since these can be different for multiple workflow run. Log instead the cacheIds.
This also makes it easier to find the results in the file system.
Types should be checked.
Literals must not anymore be decorated. It suffices to have the task definition prototypes typed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.