This repo includes example protocol implementations for automatic derived
conformances based on the Structural
protocol. It is meant to accompany the
Swift evolution proposal, and should not be depended on as a library.
The codebase is structured in the following modules:
- StructuralCore
- StructuralExamples
- StructuralBenchmarks
This module contains definition of the Structural
protocol, and additional
data types necessary to model the structural representations.
We implement a number of protocols, using the Structural
.
Including protocols inspired by the Swift standard library:
CustomEquatable
CustomComparable
CustomHashable
CustomDebugString
EncodeJSON
DecodeJSON
And also protocols based on the Swift for TensorFlow libraries:
Additive
Zero
InplaceAdd
ScaleBy
DefaultInitializable
Lastly, we also provide examples of hand-written conformances to Structural
for the following datatypes:
- enums: ASCII, Color, BinaryTree
- structs: PointN (for N in 1..16)
In the future, those conformances are going to be generated by the compiler.
This module includes benchmarks done using swift-benchmark framework.
You can run benchmarks using the following command:
$ swift run -c release StructuralBenchmarksMain
You can also compare benchmarks against their corresponding baselines:
$ swift run -c release BaselineBenchmarksMain --format json > baseline.json
$ swift run -c release StructuralBenchmarksMain --format json > structural.json
$ python3 compare.py baseline.json structural.json
Compare script can be found in the swift-benchmark repo.
An example output of the benchmark run can be found in [benchmark.results] file.