283
edits
KalmanKeri (talk | contribs) (→Syntax) |
KalmanKeri (talk | contribs) |
||
| Line 5: | Line 5: | ||
=== Motivation and brief story === | === Motivation and brief story === | ||
Development of pipe-calculus stemmed from the author's conviction that syntax should be a first class element of programming languages the same way as formation rules are integral part of logical systems. A language that complies with this principle is able to recognize the syntax of input data without using a parser library. Pipe-calculus is a very minimal language with this | Development of pipe-calculus stemmed from the author's conviction that syntax should be a first class element of programming languages the same way as formation rules are integral part of logical systems. A language that complies with this principle is able to recognize the syntax of input data without using a parser library. Pipe-calculus is a very minimal language with this capability. | ||
The first attempt to implement this idea resulted in a logical system which is referred to as ''well-typed parsing''. The author's interest in | The first attempt to implement this idea resulted in a logical system which is referred to as ''well-typed parsing''. The author's interest in process calculus led him to the realization that well-typed parsing can be translated to a calculus that uses combinators and rewriting rules instead of inference rules. | ||
=== Connection to other fields === | |||
Pipe-calculus is inspired by logical programming, substructural logic, process calculus, formal grammars, automata theory, type theory (up to the lambda-cube) and the study of algebraic effects. Its early version was considered a process calculus. However it has since diverged in subtle details, it is still very close to process calculi and its presentation style maintains that heritage. | |||
On the practical side pipe-calculus is motivated by shell programming and streams. Indeed the idea of the ''pipe'' combinator comes from shell scripting. | |||
=== Variants === | === Variants === | ||
edits