|
|
|
|
|
by 5e92cb50239222b
1281 days ago
|
|
Now we only need it to start up at least 100 times faster than it does currently, and be available out of the box absolutely everywhere. I have no use for it for these reasons alone. $ hyperfine -N 'bash -c ""' 'dash -c ""' 'pwsh -c ""'
Benchmark 1: bash -c ""
Time (mean ± σ): 2.2 ms ± 0.1 ms [User: 1.8 ms, System: 0.4 ms]
Range (min … max): 2.1 ms … 2.6 ms 1214 runs
Benchmark 2: dash -c ""
Time (mean ± σ): 0.6 ms ± 0.0 ms [User: 0.5 ms, System: 0.1 ms]
Range (min … max): 0.5 ms … 0.8 ms 4623 runs
Benchmark 3: pwsh -c ""
Time (mean ± σ): 278.5 ms ± 10.8 ms [User: 267.6 ms, System: 64.9 ms]
Range (min … max): 263.8 ms … 297.0 ms 10 runs
Summary
'dash -c ""' ran
3.80 ± 0.23 times faster than 'bash -c ""'
470.61 ± 31.00 times faster than 'pwsh -c ""'
|
|
For example, `Invoke-WebRequest` generates an error when you get a response by default with a 5xx status code, even if there's data in the response body. The switch to turn that off (`-SkipHttpErrorCheck`) wasn't added until ~7.2, so to support older Windows installations I don't have control over, I have to write it targeting the older version.
You don't find this out via the online documentation (unless you explicitly diff the call signature); only when it fails running on that Windows Server 2016 VM do you find out that, oh, it's only a supported parameter in newer versions of PowerShell.
And that's just a single example.
Did you make a typo when referencing a variable? Ha, let's silently initialize it to null without saying anything. Want to turn on strict mode to catch stuff like that? Better not put that line before the script-level parameter block, because fuck you. Great, that's sorted... ugh, now some type in some random function call doesn't explicitly match so the silent casting we were doing for you is now an error! How was the silent cast being done before? Fuck you for asking, we're never telling. Did you want to put some log / print statements in your functions? Have fun finding out why the function return value is suddenly an array!
As a shell scripting language for short, personal things, it's great. But for building anything bigger? Give me Python or C# or TypeScript or anything with better tooling around it.