Alex Rivera | Logout

Why don't I see pipe operators in most high-level languages?

Asked 2009-10-19T03:39:31.063
54

In Unix shell programming the pipe operator is an extremely powerful tool. With a small set of core utilities, a systems language (like C) and a scripting language (like Python) you can construct extremely compact and powerful shell scripts, that are automatically parallelized by the operating system.

Obviously this is a very powerful programming paradigm, but I haven't seen pipes as first class abstractions in any language other than a shell script. The code needed to replicate the functionality of scripts using pipes seems to always be quite complex.

So my question is why don't I see something similar to Unix pipes in modern high-level languages like C#, Java, etc.? Are there languages (other than shell scripts) which do support first class pipes? Isn't it a convenient and safe way to express concurrent algorithms?

Just in case someone brings it up, I looked at the F# pipe-forward operator (forward pipe operator), and it looks more like a function application operator. It applies a function to data, rather than connecting two streams together, as far as I can tell, but I am open to corrections.

Postscript: While doing some research on implementing coroutines, I realize that there are certain parallels. In a blog post Martin Wolf describes a similar problem to mine but in terms of coroutines instead of pipes.

Edit
Report

2 Answers

1

I've had a lot of fun building pipeline functions in Python. I have a library I wrote, I put the contents and a sample run here. The best fit me for has been XML processing, described in this Wikipedia article.

answered 2009-10-19T04:52:01.713
1

You can do pipe like operations in Java by chaining/filtering/transforming iterators. You can use Google's Guava Iterators.

I will say even with the very helpful guava library and static imports its still ends up being lots of Java code.

In Scala its quite easy to make your own pipe operator.

answered 2011-05-18T18:27:39.163

Your Answer