Daniel Keep wrote:
Powershell is designed to work with managed (.NET) objects.  It can
dynamically introspect these objects and pull them apart, mutate them,
convert them, etc.  Imagine if every file on a UNIX system also carried
around a reference to its own parser, and a description of how to
interpret the data.  THAT is what Powershell has over UNIX shells.

You are rarely going to write a program that uses reflection more often than direct calls. It's inefficient in terms of the amount of code you need to write. It's inefficient in terms of running time. And you need to have a very good idea of what you're looking for in the first place. So that doesn't much matter.

What *does* matter is standard interfaces. If a command will usually only return, say, a DataTable or an IEnumerable or a string or an integer, then you're down to a manageable range.

In this regard, Unix has a standard interface: text. This turns out to be usable >90% of the time. It has the advantage that you can write a program in any language that can process text. But it has disadvantages, too.

For example, the output of the "ls" equivalent is a table of objects.
By default, it gets toString'd and displayed as a table.  However, you
can pipe this into a command that reorders columns.  Or sorts.  And you
don't have to dick about with ensuring the filenames don't contain
whitespace or newlines because the file names are carried around as
actual strings that know their own length.

That's awesome. It's an annoying and unsolvable issue with bash. That would remove issues where you have to escape a string multiple times -- which can result in hard-to-find bugs.

Of course, it only helps when you're working within powershell. But that would still be an improvement.

Reply via email to