Skip to content
This repository has been archived by the owner on Jan 10, 2023. It is now read-only.

google/swift-structural

swift-structural

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

StructuralCore

This module contains definition of the Structural protocol, and additional data types necessary to model the structural representations.

StructuralExamples

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.

StructuralBenchmarks

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.

About

No description, website, or topics provided.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages