You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+58Lines changed: 58 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -9,3 +9,61 @@ See [Declarative String Processing Overview][decl-string]
9
9
## Requirements
10
10
11
11
-[Swift Trunk Development Snapshot](https://www.swift.org/download/#snapshots) DEVELOPMENT-SNAPSHOT-2022-02-03 or later.
12
+
13
+
## Integration with Swift
14
+
15
+
`_MatchingEngine`, `_CUnicode` and `_StringProcessing` are specially integrated modules that are built as part of apple/swift.
16
+
17
+
Specifically, `_MatchingEngine` contains the parser for regular expression literals and is built both as part of the compiler and as a core library. `_CUnicode` and `_StringProcessing` are built together as a core library named `_StringProcessing`.
The `main` branch is the branch for day-to-day development. Generally, you should create PRs against this branch.
30
+
31
+
#### Swift integration branches
32
+
33
+
Branches whose name starts with `swift/` are Swift integration branches similar to those in [apple/llvm-project](https://github.com/apple/llvm-project). For each branch, dropping the `swift/` prefix is the corresponding branch in [apple/swift](https://github.com/apple/swift).
A pair of corresponding branches are expected to build successfully together and pass all tests.
42
+
43
+
### Integration workflow
44
+
45
+
To integrate the latest changes in apple/swift-experimental-string-processing to apple/swift, carefully follow the workflow:
46
+
47
+
- Create a pull request in apple/swift-experimental-string-processing from `main` to `swift/main`, e.g. "[Integration] main -> swift/main".
48
+
- Create a pull request in apple/swift.
49
+
- If apple/swift needs to be modified to work with the latest `main` in apple/swift-experimental-string-processing, create a pull request that contains those modifications.
50
+
- Otherwise, create a dummy pull request by, for example, editing a character in README. This is so that we can trigger CI to test Swift against the latest changes in apple/swift-experimental-string-processing.
51
+
- In the apple/swift pull request, trigger CI using the following command (replacing `<PR NUMBER>` with the apple/swift-experimental-string-processing pull request number):
- When all tests pass, attach the successful test results to the pull request in apple/swift-experimental-string-processing.
57
+
- When approved:
58
+
- Merge the pull request in apple/swift-experimental-string-processing.
59
+
- If the pull request in apple/swift is not a dummy, merge it.
60
+
61
+
### Development notes
62
+
63
+
Compiler integration can be tricky. Use special caution when developing `_MatchingEngine`, `_CUnicode` and `_StringProcessing` modules.
64
+
65
+
- Do not change the names of these modules without due approval from compiler and infrastructure teams.
66
+
- Do not modify the existing ABI between the regular expression parser and the Swift compiler unless absolutely necessary.
67
+
- Always minimize the number of lockstep integrations, i.e. when apple/swift-experimental-string-processing and apple/swift have to change together.
68
+
- In `_StringProcessing`, do not write fully qualified references to symbols in `_CUnicode`, and always wrap `import _CUnicode` in a `#if canImport(_CUnicode)`. This is because `_CUnicode` is built as part of `_StringProcessing` with CMake.
69
+
- In `_MatchingEngine`, do not write fully qualified references to `_MatchingEngine` itself. This is because `_MatchingEngine` is built as `ExperimentalRegex` in `SwiftCompilerSources/` with CMake.
0 commit comments