libraries shouldn't log directly to std out/err (see ExternalReaderProcessImpl)
some ExternalReaderProcessException messages are externalized, others aren't
ExternalReaderProcessException is a checked exception
it's not clear to me what Pkl's policy on unchecked vs. checked exceptions is
new Random().nextLong() is expensive and has poor randomness (Random should be reused or replaced with counter)
deprecation of ModuleKeyFactories.closeQuietly in favor of org.pkl.core.util.Readers.closeQuietly turns package org.pkl.core.util into a public API
private packages keep leaking into public APIs
org.pkl.core.module.ResourceReaders API is (too) tightly coupled to reader protocol via ModuleReaderSpec
ExternalReaderProcess is a leaky abstraction
only partially implements the reader protocol
exposes its MessageTransport
interface name implies that all implementations spawn a process (unnecessary requirement?)
msgpack is now a hard dependency of pkl-core, pkl-config-java, etc.
might be safer to make it an optional dependency
IMHO the external reader API/implementation needs more work.
Changes:
keep implementation classes internal to their packages
make classes final if possible
make namespace classes non-instantiable
throw IllegalStateException instead of ExternalReaderProcessException for use after close
common convention already used by HttpClient etc.
programming errors should be signaled with unchecked exceptions
use private instead of public lock object
polish Javadoc
delete commented out code
don't use star import for importing a single class
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/apple/pkl/pull/759
**Author:** [@odenix](https://github.com/odenix)
**Created:** 10/31/2024
**Status:** ✅ Merged
**Merged:** 10/31/2024
**Merged by:** [@bioball](https://github.com/bioball)
**Base:** `main` ← **Head:** `polish-reader`
---
### 📝 Commits (1)
- [`598d98d`](https://github.com/apple/pkl/commit/598d98d12b636a881df46c3232eb34b14e52f4ba) Polish external reader API/implementation
### 📊 Changes
**14 files changed** (+107 additions, -86 deletions)
<details>
<summary>View changed files</summary>
📝 `pkl-commons-cli/src/main/kotlin/org/pkl/commons/cli/CliCommand.kt` (+5 -6)
📝 `pkl-core/src/main/java/org/pkl/core/EvaluatorBuilder.java` (+3 -4)
📝 `pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderMessagePackDecoder.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderMessagePackEncoder.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderMessages.java` (+2 -1)
📝 `pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderProcess.java` (+31 -12)
📝 `pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderProcessImpl.java` (+52 -46)
📝 `pkl-core/src/main/java/org/pkl/core/messaging/MessageTransports.java` (+2 -1)
📝 `pkl-core/src/main/java/org/pkl/core/messaging/Messages.java` (+2 -7)
📝 `pkl-core/src/main/java/org/pkl/core/module/ModuleKeys.java` (+2 -2)
📝 `pkl-core/src/main/java/org/pkl/core/resource/ExternalResourceResolver.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/resource/ResourceReaders.java` (+1 -1)
📝 `pkl-core/src/main/java/org/pkl/core/util/Readers.java` (+3 -1)
📝 `pkl-server/src/main/kotlin/org/pkl/server/Server.kt` (+1 -2)
</details>
### 📄 Description
Things I noticed but didn't address in this PR:
* many APIs are missing Javadoc
* libraries shouldn't log directly to std out/err (see `ExternalReaderProcessImpl`)
* some `ExternalReaderProcessException` messages are externalized, others aren't
* `ExternalReaderProcessException` is a checked exception
- it's not clear to me what Pkl's policy on unchecked vs. checked exceptions is
* `new Random().nextLong()` is expensive and has poor randomness (Random should be reused or replaced with counter)
* deprecation of `ModuleKeyFactories.closeQuietly` in favor of `org.pkl.core.util.Readers.closeQuietly` turns package `org.pkl.core.util` into a public API
- private packages keep leaking into public APIs
* `org.pkl.core.module.ResourceReaders` API is (too) tightly coupled to reader protocol via `ModuleReaderSpec`
* `ExternalReaderProcess` is a leaky abstraction
- only partially implements the reader protocol
- exposes its `MessageTransport`
- interface name implies that all implementations spawn a process (unnecessary requirement?)
* msgpack is now a hard dependency of pkl-core, pkl-config-java, etc.
- might be safer to make it an optional dependency
IMHO the external reader API/implementation needs more work.
Changes:
- keep implementation classes internal to their packages
- make classes final if possible
- make namespace classes non-instantiable
- throw IllegalStateException instead of ExternalReaderProcessException for use after close
- common convention already used by HttpClient etc.
- programming errors should be signaled with unchecked exceptions
- use private instead of public lock object
- polish Javadoc
- delete commented out code
- don't use star import for importing a single class
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/apple/pkl/pull/759
Author: @odenix
Created: 10/31/2024
Status: ✅ Merged
Merged: 10/31/2024
Merged by: @bioball
Base:
main← Head:polish-reader📝 Commits (1)
598d98dPolish external reader API/implementation📊 Changes
14 files changed (+107 additions, -86 deletions)
View changed files
📝
pkl-commons-cli/src/main/kotlin/org/pkl/commons/cli/CliCommand.kt(+5 -6)📝
pkl-core/src/main/java/org/pkl/core/EvaluatorBuilder.java(+3 -4)📝
pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderMessagePackDecoder.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderMessagePackEncoder.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderMessages.java(+2 -1)📝
pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderProcess.java(+31 -12)📝
pkl-core/src/main/java/org/pkl/core/externalreader/ExternalReaderProcessImpl.java(+52 -46)📝
pkl-core/src/main/java/org/pkl/core/messaging/MessageTransports.java(+2 -1)📝
pkl-core/src/main/java/org/pkl/core/messaging/Messages.java(+2 -7)📝
pkl-core/src/main/java/org/pkl/core/module/ModuleKeys.java(+2 -2)📝
pkl-core/src/main/java/org/pkl/core/resource/ExternalResourceResolver.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/resource/ResourceReaders.java(+1 -1)📝
pkl-core/src/main/java/org/pkl/core/util/Readers.java(+3 -1)📝
pkl-server/src/main/kotlin/org/pkl/server/Server.kt(+1 -2)📄 Description
Things I noticed but didn't address in this PR:
ExternalReaderProcessImpl)ExternalReaderProcessExceptionmessages are externalized, others aren'tExternalReaderProcessExceptionis a checked exceptionnew Random().nextLong()is expensive and has poor randomness (Random should be reused or replaced with counter)ModuleKeyFactories.closeQuietlyin favor oforg.pkl.core.util.Readers.closeQuietlyturns packageorg.pkl.core.utilinto a public APIorg.pkl.core.module.ResourceReadersAPI is (too) tightly coupled to reader protocol viaModuleReaderSpecExternalReaderProcessis a leaky abstractionMessageTransportIMHO the external reader API/implementation needs more work.
Changes:
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.