diff --git a/CHANGELOG.md b/CHANGELOG.md index ec126a985..77e7761b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,80 @@ # PowerShell Editor Services Release History +## v3.0.0 +### Thursday, October 28, 2021 + +This preview release includes a complete overhaul of the core PowerShell engine +of PowerShell Editor Services. +This represents over a year's work, +tracked in [PSES #1295](https://github.com/PowerShell/PowerShellEditorServices/issues/1295) +and implemented in [PSES #1459](https://github.com/PowerShell/PowerShellEditorServices/pull/1459), +and is our answer to many, many issues +opened by users over the last few years. +We're hoping you'll see a marked improvement +in the reliability, performance and footprint +of the extension as a result. + +Previously the Integrated Console was run +by setting threadpool tasks on a shared main runspace, +and where LSP servicing was done with PowerShell idle events. +This lead to overhead, threading issues +and a complex implementation intended to work around +the asymmetry between PowerShell as a synchronous, +single-threaded runtime and a language server +as an asynchronous, multi-threaded service. + +Now, PowerShell Editor Services maintains its own dedicated pipeline thread, +which is able to service requests similar to JavaScript's event loop, +meaning we can run everything synchronously on the correct thread. +We also get more efficiency because we can directly call +PowerShell APIs and code written in C# from this thread, +without the overhead of a PowerShell pipeline. + +This change has overhauled how we service LSP requests, +how the Integrated Console works, +how PSReadLine is integrated, +how debugging is implemented, +how remoting is handled, +and a long tail of other features in PowerShell Editor Services. + +Also, in making it, while 6,000 lines of code were added, +we removed 12,000, +for a more maintainable, more efficient +and easier to understand extension backend. + +While most of our testing has been re-enabled +(and we're working on adding more), +there are bound to be issues with this new implementation. +Please give this a try and let us know if you run into anything. + +We also want to thank [@SeeminglyScience](https://github.com/SeeminglyScience) +for his help and knowledge as we've made this migration. + +Finally, a crude breakdown of the work from the commits: + +- An initial dedicated pipeline thread consumer implementation +- Implement the console REPL +- Implement PSRL idle handling +- Implement completions +- Move to invoking PSRL as a C# delegate +- Implement cancellation and Ctrl+C +- Make F8 work again +- Ensure execution policy is set correctly +- Implement $PROFILE support +- Make nested prompts work +- Implement REPL debugging +- Implement remote debugging in the REPL +- Hook up the debugging UI +- Implement a new concurrent priority queue for PowerShell tasks +- Reimplement the REPL synchronously rather than on its own thread +- Really get debugging working... +- Implement DSC breakpoint support +- Reimplement legacy readline support +- Ensure stdio is still supported as an LSP transport +- Remove PowerShellContextService and other defunct code +- Get integration tests working again (and improve diagnosis of PSES failures) +- Get unit testing working again (except debug service tests) + ## v2.5.2 ### Monday, October 18, 2021 diff --git a/PowerShellEditorServices.Common.props b/PowerShellEditorServices.Common.props index d2371b014..0e8d135fe 100644 --- a/PowerShellEditorServices.Common.props +++ b/PowerShellEditorServices.Common.props @@ -1,6 +1,6 @@ - 2.5.2 + 3.0.0 Microsoft © Microsoft Corporation. diff --git a/module/PowerShellEditorServices/PowerShellEditorServices.psd1 b/module/PowerShellEditorServices/PowerShellEditorServices.psd1 index 071a37c8e..ff89a1890 100644 --- a/module/PowerShellEditorServices/PowerShellEditorServices.psd1 +++ b/module/PowerShellEditorServices/PowerShellEditorServices.psd1 @@ -19,7 +19,7 @@ RootModule = if ($PSEdition -eq 'Core') } # Version number of this module. -ModuleVersion = '2.5.2' +ModuleVersion = '3.0.0' # ID used to uniquely identify this module GUID = '9ca15887-53a2-479a-9cda-48d26bcb6c47'