Hacker News new | ask | show | jobs
by mwj 3267 days ago
"Powershell is brilliant"

Wot?

Ugly syntax, cryptic error messages and random idiosyncrasies like misplaced semicolons turning variables into lists... The language is a nightmare.

3 comments

>Ugly syntax, cryptic error messages and random idiosyncrasies

Yeah, nothing like the elegance, straightforward messages, and "no surprises" of POSIX shells...

It might be me succumbing to stereotypes, but POSIX shell syntax feels something that grew organically, out of use and necessity, with basic guiding principles but no set guidelines or rules.

Powershell feels like something designed by committee, it has an internal consistency and logic, but feels bloated and overcomplicated.

>POSIX shell syntax feels something that grew organically, out of use and necessity

Isn't that what everyone hates about PHP?

Consistency and logic comes with a price. But i guess both approches have cons and pros.
The best way I think is: start with either, and prune what has been shown not to work in a version n+1 every few years iteratively.

Provide a good migration path (e.g. for a language that could be a n to n+1 transpiler), and you're set.

Buuuut there's definite room for improvement in unix pipes.
I see the point and to a certain extent agree in theory. But every improvement feels like it's improved on something that just didn't need to be improved, some things become easier, but others become worse. Along the way the simplicity of text streams becomes lost.

I can see a case where passing around structured data could make sense, but Powershell definitely takes things to far by passing around full .net classes that have functionality.

“Simplicity of text streams”

This is a common complaint about PS/elvish/etc, but I’m not sure it makes sense. Is that “simple text stream” tab delimited data? CSV? JSON? XML?

At the end of the day, what you have isn’t just a “simple” text stream; you have a more complex data structure serialized into text, which will need to be parsed by each command in the pipeline for any non-trivial processing.

Quite often, yes it's just text. 90% of the time you're only a string split away from having the structure you need. Most of the more complicated systems are chasing that 10% but complicating the 90%.
> Is that “simple text stream” tab delimited data? CSV? JSON? XML?

Sure. Or all 4 at different points, because we didn't tie ourselves to one format. That's kinda the point.

The Elvish example is a lot neater in Powershell: `(irm https://api.github.com/repos/elves/elvish/issues)|select number, title -first 11`

Can you elaborate on the semicolons? Lists are declared by a comma, not semicolon: `$a = 1,2`, or `$a = @(1)` to enforce it